Skip to content

Commit 009f23e

Browse files
authored
Explicitly say if stored fields aren't supported in MapperTestCase (#72474)
MapperTestCase has a check that if a field mapper supports stored fields, those stored fields are available to index time scripts. Many of our mappers do not support stored fields, and we try and catch this with an assumeFalse so that those mappers do not run this test. However, this test is fragile - it does not work for mappers created with an index version below 8.0, and it misses mappers that always store their values, e.g. match_only_text. This commit adds a new supportsStoredField method to MapperTestCase, and overrides it for those mappers that do not support storing values. It also adds a minimalStoredMapping method that defaults to the minimal mapping plus a store parameter, which is overridden by match_only_text because storing is not configurable and always available on this mapper.
1 parent 17717a0 commit 009f23e

File tree

16 files changed

+88
-12
lines changed

16 files changed

+88
-12
lines changed

modules/mapper-extras/src/internalClusterTest/java/org/elasticsearch/index/mapper/MatchOnlyTextFieldMapperTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ protected void minimalMapping(XContentBuilder b) throws IOException {
6161
b.field("type", "match_only_text");
6262
}
6363

64+
@Override
65+
protected void minimalStoreMapping(XContentBuilder b) throws IOException {
66+
// 'store' is always true
67+
minimalMapping(b);
68+
}
69+
6470
public void testDefaults() throws IOException {
6571
DocumentMapper mapper = createDocumentMapper(fieldMapping(this::minimalMapping));
6672
assertEquals(Strings.toString(fieldMapping(this::minimalMapping)), mapper.mappingSource().toString());

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/RankFeatureFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ protected void assertSearchable(MappedFieldType fieldType) {
5252
assertTrue(fieldType.isSearchable());
5353
}
5454

55+
@Override
56+
protected boolean supportsStoredFields() {
57+
return false;
58+
}
59+
5560
@Override
5661
protected Collection<? extends Plugin> getPlugins() {
5762
return List.of(new MapperExtrasPlugin());

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/RankFeaturesFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ protected void minimalMapping(XContentBuilder b) throws IOException {
4646
b.field("type", "rank_features");
4747
}
4848

49+
@Override
50+
protected boolean supportsStoredFields() {
51+
return false;
52+
}
53+
4954
@Override
5055
protected void registerParameters(ParameterChecker checker) throws IOException {
5156
checker.registerConflictCheck("positive_score_impact", b -> b.field("positive_score_impact", false));

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ protected void metaMapping(XContentBuilder b) throws IOException {
7373
b.field("max_input_length", 50);
7474
}
7575

76+
@Override
77+
protected boolean supportsStoredFields() {
78+
return false;
79+
}
80+
7681
@Override
7782
protected void registerParameters(ParameterChecker checker) throws IOException {
7883
checker.registerConflictCheck("analyzer", b -> b.field("analyzer", "standard"));

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ protected void minimalMapping(XContentBuilder b) throws IOException {
5656
b.field("type", "geo_shape");
5757
}
5858

59+
@Override
60+
protected boolean supportsStoredFields() {
61+
return false;
62+
}
63+
5964
@Override
6065
protected Object getSampleValueForDocument() {
6166
return "POINT (14.0 15.0)";

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ protected void minimalMapping(XContentBuilder b) throws IOException {
5454
b.field("type", "geo_shape").field("strategy", "recursive");
5555
}
5656

57+
@Override
58+
protected boolean supportsStoredFields() {
59+
return false;
60+
}
61+
5762
@Override
5863
protected void registerParameters(ParameterChecker checker) throws IOException {
5964

server/src/test/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ protected void registerParameters(ParameterChecker checker) throws IOException {
6565
m -> assertEquals(10, ((FlattenedFieldMapper)m).depthLimit()));
6666
}
6767

68+
@Override
69+
protected boolean supportsStoredFields() {
70+
return false;
71+
}
72+
6873
public void testDefaults() throws Exception {
6974
DocumentMapper mapper = createDocumentMapper(fieldMapping(this::minimalMapping));
7075
ParsedDocument parsedDoc = mapper.parse(source(b -> b.startObject("field").field("key", "value").endObject()));

test/framework/src/main/java/org/elasticsearch/index/mapper/MapperTestCase.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -643,24 +643,24 @@ public final void testIndexTimeFieldData() throws IOException {
643643
});
644644
}
645645

646+
protected boolean supportsStoredFields() {
647+
return true;
648+
}
649+
650+
protected void minimalStoreMapping(XContentBuilder b) throws IOException {
651+
minimalMapping(b);
652+
b.field("store", true);
653+
}
654+
646655
/**
647656
* Checks that loading stored fields for this field produces the same set of values
648657
* for query time scripts and index time scripts
649658
*/
650659
public final void testIndexTimeStoredFieldsAccess() throws IOException {
651660

652-
MapperService mapperService;
653-
try {
654-
mapperService = createMapperService(fieldMapping(b -> {
655-
minimalMapping(b);
656-
b.field("store", true);
657-
}));
658-
assertParseMinimalWarnings();
659-
} catch (MapperParsingException e) {
660-
assertParseMinimalWarnings();
661-
assumeFalse("Field type does not support stored fields", true);
662-
return;
663-
}
661+
assumeTrue("Field type does not support stored fields", supportsStoredFields());
662+
MapperService mapperService = createMapperService(fieldMapping(this::minimalStoreMapping));
663+
assertParseMinimalWarnings();
664664

665665
MappedFieldType fieldType = mapperService.fieldType("field");
666666
SourceToParse source = source(this::writeField);

x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/mapper/HistogramFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ protected boolean supportsSearchLookup() {
5454
return false;
5555
}
5656

57+
@Override
58+
protected boolean supportsStoredFields() {
59+
return false;
60+
}
61+
5762
public void testParseValue() throws Exception {
5863
DocumentMapper mapper = createDocumentMapper(fieldMapping(this::minimalMapping));
5964
ParsedDocument doc = mapper.parse(

x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ protected Object getSampleValueForQuery() {
9999
return 50.0;
100100
}
101101

102+
@Override
103+
protected boolean supportsStoredFields() {
104+
return false;
105+
}
106+
102107
/**
103108
* Test parsing field mapping and adding simple field
104109
*/

0 commit comments

Comments
 (0)