Skip to content

Commit 6a86c34

Browse files
committed
Dont test runtime fields
1 parent 1c1f258 commit 6a86c34

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

test/framework/src/main/java/org/elasticsearch/datageneration/queries/QueryGenerator.java

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package org.elasticsearch.datageneration.queries;
1111

1212
import org.apache.lucene.search.join.ScoreMode;
13+
import org.elasticsearch.datageneration.Mapping;
1314
import org.elasticsearch.index.query.QueryBuilder;
1415
import org.elasticsearch.index.query.QueryBuilders;
1516

@@ -20,19 +21,24 @@
2021

2122
public class QueryGenerator {
2223

23-
private final Map<String, Object> mappingRaw;
24+
private final Mapping mapping;
2425

25-
public QueryGenerator(Map<String, Object> mappingRaw) {
26-
this.mappingRaw = mappingRaw;
26+
public QueryGenerator(Mapping mapping) {
27+
this.mapping = mapping;
2728
}
2829

29-
public List<QueryBuilder> generateQueries(String type, String path, Map<String, Object> mapping, Object value) {
30+
public List<QueryBuilder> generateQueries(String type, String path, Object value) {
3031
// This query generator cannot handle fields with periods in the name.
3132
if (path.equals("host.name")) {
3233
return List.of();
3334
}
35+
// Can handle dynamically mapped fields, but not runtime fields
36+
if (isRuntimeField(path)) {
37+
return List.of();
38+
}
3439
var leafQueryGenerator = LeafQueryGenerator.buildForType(type);
35-
var leafQueries = leafQueryGenerator.generate(mapping, path, value);
40+
var fieldMapping = mapping.lookup().get(path);
41+
var leafQueries = leafQueryGenerator.generate(fieldMapping, path, value);
3642
return leafQueries.stream().map(q -> wrapInNestedQuery(path, q)).toList();
3743
}
3844

@@ -48,7 +54,7 @@ private QueryBuilder wrapInNestedQuery(String path, QueryBuilder leafQuery) {
4854

4955
@SuppressWarnings("unchecked")
5056
private List<String> getNestedPathPrefixes(String[] path) {
51-
Map<String, Object> mapping = mappingRaw;
57+
Map<String, Object> mapping = this.mapping.raw();
5258
mapping = (Map<String, Object>) mapping.get("_doc");
5359
mapping = (Map<String, Object>) mapping.get("properties");
5460

@@ -70,4 +76,23 @@ private List<String> getNestedPathPrefixes(String[] path) {
7076
}
7177
return result;
7278
}
79+
80+
@SuppressWarnings("unchecked")
81+
private boolean isRuntimeField(String path) {
82+
String[] parts = path.split("\\.");
83+
var topLevelMapping = (Map<String, Object>) mapping.raw().get("_doc");
84+
boolean inRuntimeContext = "runtime".equals(topLevelMapping.get("dynamic"));
85+
for (int i = 0; i < parts.length - 1; i++) {
86+
var pathToHere = String.join(".", Arrays.copyOfRange(parts, 0, i + 1));
87+
Map<String, Object> fieldMapping = mapping.lookup().get(pathToHere);
88+
if (fieldMapping == null) {
89+
break;
90+
}
91+
if (fieldMapping.containsKey("dynamic")) {
92+
// lower down dynamic definitions override higher up behavior
93+
inRuntimeContext = "runtime".equals(fieldMapping.get("dynamic"));
94+
}
95+
}
96+
return inRuntimeContext;
97+
}
7398
}

x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/qa/StandardVersusLogsIndexModeChallengeRestIT.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public void testMatchAllQuery() throws IOException {
144144
}
145145

146146
public void testRandomQueries() throws IOException {
147-
int numberOfDocuments = ESTestCase.randomIntBetween(20, 80);
147+
int numberOfDocuments = ESTestCase.randomIntBetween(10, 50);
148148
final List<XContentBuilder> documents = generateDocuments(numberOfDocuments);
149149
var mappingLookup = dataGenerationHelper.mapping().lookup();
150150
final List<Map<String, List<Object>>> docsNormalized = documents.stream().map(d -> {
@@ -154,19 +154,18 @@ public void testRandomQueries() throws IOException {
154154

155155
indexDocuments(documents);
156156

157-
QueryGenerator queryGenerator = new QueryGenerator(dataGenerationHelper.mapping().raw());
157+
QueryGenerator queryGenerator = new QueryGenerator(dataGenerationHelper.mapping());
158158
Map<String, String> fieldsTypes = dataGenerationHelper.getTemplateFieldTypes();
159159
for (var e : fieldsTypes.entrySet()) {
160160
var path = e.getKey();
161161
var type = e.getValue();
162-
var mapping = mappingLookup.get(path);
163162
var docsWithFields = docsNormalized.stream().filter(d -> d.containsKey(path)).toList();
164163
if (docsWithFields.isEmpty() == false) {
165164
var doc = randomFrom(docsWithFields);
166165
List<Object> values = doc.get(path).stream().filter(Objects::nonNull).toList();
167166
if (values.isEmpty() == false) {
168167
Object value = randomFrom(values);
169-
List<QueryBuilder> queries = queryGenerator.generateQueries(type, path, mapping, value);
168+
List<QueryBuilder> queries = queryGenerator.generateQueries(type, path, value);
170169
for (var query : queries) {
171170
logger.info("Querying for field [{}] with value [{}]", path, value);
172171

0 commit comments

Comments
 (0)