Skip to content

Commit f4a9c80

Browse files
committed
[TEST] expand dynamic templates tests for runtime fields (#74297)
Dynamic templates don't support match_mapping_type object and binary when runtime mappings are set, as such types are not supported runtime fields. This was not tested before, and this commit adds unit tests for these scenarios.
1 parent 600a552 commit f4a9c80

File tree

1 file changed

+34
-7
lines changed

1 file changed

+34
-7
lines changed

server/src/test/java/org/elasticsearch/index/mapper/DynamicTemplateTests.java

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import java.util.Collections;
2222
import java.util.HashMap;
2323
import java.util.List;
24+
import java.util.Locale;
2425
import java.util.Map;
26+
import java.util.stream.Collectors;
2527

2628
import static org.hamcrest.Matchers.equalTo;
2729

@@ -214,13 +216,38 @@ public void testMatchTypeTemplate() {
214216
}
215217

216218
public void testMatchTypeTemplateRuntime() {
217-
Map<String, Object> templateDef = new HashMap<>();
218-
templateDef.put("match_mapping_type", "string");
219-
templateDef.put("runtime", Collections.emptyMap());
220-
DynamicTemplate template = DynamicTemplate.parse("my_template", templateDef, Version.CURRENT);
221-
assertTrue(template.match(null, "a.b", "b", XContentFieldType.STRING));
222-
assertFalse(template.match(null, "a.b", "b", XContentFieldType.BOOLEAN));
223-
assertTrue(template.isRuntimeMapping());
219+
List<XContentFieldType> runtimeFieldTypes =
220+
Arrays.stream(XContentFieldType.values()).filter(XContentFieldType::supportsRuntimeField).collect(Collectors.toList());
221+
for (XContentFieldType runtimeFieldType : runtimeFieldTypes) {
222+
Map<String, Object> templateDef = new HashMap<>();
223+
templateDef.put("match_mapping_type", runtimeFieldType.name().toLowerCase(Locale.ROOT));
224+
templateDef.put("runtime", Collections.emptyMap());
225+
DynamicTemplate template = DynamicTemplate.parse("my_template", templateDef, Version.CURRENT);
226+
assertTrue(template.isRuntimeMapping());
227+
for (XContentFieldType xContentFieldType : XContentFieldType.values()) {
228+
if (xContentFieldType == runtimeFieldType) {
229+
assertTrue(template.match(null, "a.b", "b", xContentFieldType));
230+
} else {
231+
assertFalse(template.match(null, "a.b", "b", xContentFieldType));
232+
}
233+
}
234+
}
235+
}
236+
237+
public void testMatchTypeTemplateRuntimeUnsupported() {
238+
List<XContentFieldType> xContentFieldTypes = Arrays.stream(XContentFieldType.values())
239+
.filter(xContentFieldType -> xContentFieldType.supportsRuntimeField() == false).collect(Collectors.toList());
240+
for (XContentFieldType xContentFieldType : xContentFieldTypes) {
241+
String fieldType = xContentFieldType.name().toLowerCase(Locale.ROOT);
242+
Map<String, Object> templateDef = new HashMap<>();
243+
templateDef.put("match_mapping_type", fieldType);
244+
templateDef.put("runtime", Collections.emptyMap());
245+
MapperParsingException e = expectThrows(MapperParsingException.class, () -> DynamicTemplate.parse("my_template", templateDef,
246+
Version.CURRENT));
247+
assertEquals("Dynamic template [my_template] defines a runtime field but type [" +
248+
fieldType + "] is not supported as runtime field",
249+
e.getMessage());
250+
}
224251
}
225252

226253
public void testSupportedMatchMappingTypesRuntime() {

0 commit comments

Comments
 (0)