Skip to content

Commit 54da625

Browse files
committed
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 c6aab5f commit 54da625

File tree

17 files changed

+55
-54
lines changed

17 files changed

+55
-54
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
@@ -60,6 +60,12 @@ protected void minimalMapping(XContentBuilder b) throws IOException {
6060
b.field("type", "match_only_text");
6161
}
6262

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

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ protected void assertSearchable(MappedFieldType fieldType) {
5353
}
5454

5555
@Override
56-
protected Collection<? extends Plugin> getPlugins() {
57-
return List.of(new MapperExtrasPlugin());
56+
protected boolean supportsStoredFields() {
57+
return false;
5858
}
5959

6060
@Override
61-
protected boolean allowsStore() {
62-
return false;
61+
protected Collection<? extends Plugin> getPlugins() {
62+
return List.of(new MapperExtrasPlugin());
6363
}
6464

6565
static int getFrequency(TokenStream tk) throws IOException {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,17 @@ protected void minimalMapping(XContentBuilder b) throws IOException {
4646
}
4747

4848
@Override
49-
protected void registerParameters(ParameterChecker checker) throws IOException {
50-
checker.registerConflictCheck("positive_score_impact", b -> b.field("positive_score_impact", false));
49+
protected boolean supportsStoredFields() {
50+
return false;
5151
}
5252

5353
@Override
54-
protected boolean supportsMeta() {
55-
return false;
54+
protected void registerParameters(ParameterChecker checker) throws IOException {
55+
checker.registerConflictCheck("positive_score_impact", b -> b.field("positive_score_impact", false));
5656
}
5757

5858
@Override
59-
protected boolean allowsStore() {
59+
protected boolean supportsMeta() {
6060
return false;
6161
}
6262

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

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

77+
@Override
78+
protected boolean supportsStoredFields() {
79+
return false;
80+
}
81+
7782
@Override
7883
protected void registerParameters(ParameterChecker checker) throws IOException {
7984
checker.registerConflictCheck("analyzer", b -> b.field("analyzer", "standard"));
@@ -108,11 +113,6 @@ protected IndexAnalyzers createIndexAnalyzers(IndexSettings indexSettings) {
108113
return new IndexAnalyzers(analyzers, Collections.emptyMap(), Collections.emptyMap());
109114
}
110115

111-
@Override
112-
protected boolean allowsStore() {
113-
return false;
114-
}
115-
116116
public void testDefaultConfiguration() throws IOException {
117117

118118
DocumentMapper defaultMapper = createDocumentMapper(fieldMapping(this::minimalMapping));

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ protected void minimalMapping(XContentBuilder b) throws IOException {
5757
}
5858

5959
@Override
60-
protected Object getSampleValueForDocument() {
61-
return "POINT (14.0 15.0)";
60+
protected boolean supportsStoredFields() {
61+
return false;
6262
}
6363

6464
@Override
65-
protected boolean allowsStore() {
66-
return false;
65+
protected Object getSampleValueForDocument() {
66+
return "POINT (14.0 15.0)";
6767
}
6868

6969
public void testDefaultConfiguration() throws IOException {

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

Lines changed: 5 additions & 5 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

@@ -98,11 +103,6 @@ protected boolean supportsMeta() {
98103
return false;
99104
}
100105

101-
@Override
102-
protected boolean allowsStore() {
103-
return false;
104-
}
105-
106106
public void testLegacySwitches() throws IOException {
107107
// if one of the legacy parameters is added to a 'type':'geo_shape' config then
108108
// that will select the legacy field mapper

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ protected void registerParameters(ParameterChecker checker) throws IOException {
6666
}
6767

6868
@Override
69-
protected boolean allowsStore() {
69+
protected boolean supportsStoredFields() {
7070
return false;
7171
}
7272

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

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -631,29 +631,24 @@ public final void testIndexTimeFieldData() throws IOException {
631631
});
632632
}
633633

634-
protected boolean allowsStore() {
634+
protected boolean supportsStoredFields() {
635635
return true;
636636
}
637637

638+
protected void minimalStoreMapping(XContentBuilder b) throws IOException {
639+
minimalMapping(b);
640+
b.field("store", true);
641+
}
642+
638643
/**
639644
* Checks that loading stored fields for this field produces the same set of values
640645
* for query time scripts and index time scripts
641646
*/
642647
public final void testIndexTimeStoredFieldsAccess() throws IOException {
643648

644-
assumeTrue("FieldMapper implementation does not allow stored fields", allowsStore());
645-
MapperService mapperService;
646-
try {
647-
mapperService = createMapperService(fieldMapping(b -> {
648-
minimalMapping(b);
649-
b.field("store", true);
650-
}));
651-
assertParseMinimalWarnings();
652-
} catch (MapperParsingException e) {
653-
assertParseMinimalWarnings();
654-
assumeFalse("Field type does not support stored fields", true);
655-
return;
656-
}
649+
assumeTrue("Field type does not support stored fields", supportsStoredFields());
650+
MapperService mapperService = createMapperService(fieldMapping(this::minimalStoreMapping));
651+
assertParseMinimalWarnings();
657652

658653
MappedFieldType fieldType = mapperService.fieldType("field");
659654
SourceToParse source = source(this::writeField);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ protected boolean supportsSearchLookup() {
5555
}
5656

5757
@Override
58-
protected boolean allowsStore() {
58+
protected boolean supportsStoredFields() {
5959
return false;
6060
}
6161

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ protected Object getSampleValueForQuery() {
100100
}
101101

102102
@Override
103-
protected boolean allowsStore() {
103+
protected boolean supportsStoredFields() {
104104
return false;
105105
}
106106

0 commit comments

Comments
 (0)