diff --git a/server/src/test/java/org/elasticsearch/index/mapper/DocumentMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/DocumentMapperTests.java index 844ce55b5548f..a6dfe7de56749 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/DocumentMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/DocumentMapperTests.java @@ -23,11 +23,17 @@ import org.elasticsearch.index.mapper.MapperService.MergeReason; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; import java.util.Map; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; +import static io.github.nik9000.mapmatcher.ListMatcher.matchesList; +import static io.github.nik9000.mapmatcher.MapMatcher.assertMap; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; @@ -284,20 +290,60 @@ public void testEmptyDocumentMapper() { assertNotNull(documentMapper.idFieldMapper()); assertNotNull(documentMapper.sourceMapper()); assertNotNull(documentMapper.IndexFieldMapper()); - assertEquals(10, documentMapper.mappers().getMapping().getMetadataMappersMap().size()); - assertEquals(10, documentMapper.mappers().getMatchingFieldNames("*").size()); + List> metadataMappers = new ArrayList<>(documentMapper.mappers().getMapping().getMetadataMappersMap().keySet()); + Collections.sort(metadataMappers, Comparator.comparing(c -> c.getSimpleName())); + assertMap( + metadataMappers, + matchesList().item(DocCountFieldMapper.class) + .item(FieldNamesFieldMapper.class) + .item(IdFieldMapper.class) + .item(IgnoredFieldMapper.class) + .item(IndexFieldMapper.class) + .item(NestedPathFieldMapper.class) + .item(RoutingFieldMapper.class) + .item(SeqNoFieldMapper.class) + .item(SourceFieldMapper.class) + .item(VersionFieldMapper.class) + ); + List matching = new ArrayList<>(documentMapper.mappers().getMatchingFieldNames("*")); + Collections.sort(matching); + assertMap( + matching, + matchesList().item(DocCountFieldMapper.CONTENT_TYPE) + .item(FieldNamesFieldMapper.CONTENT_TYPE) + .item(IdFieldMapper.CONTENT_TYPE) + .item(IgnoredFieldMapper.CONTENT_TYPE) + .item(IndexFieldMapper.CONTENT_TYPE) + .item(NestedPathFieldMapper.NAME) + .item(RoutingFieldMapper.CONTENT_TYPE) + .item(SeqNoFieldMapper.CONTENT_TYPE) + .item(SourceFieldMapper.CONTENT_TYPE) + .item(VersionFieldMapper.CONTENT_TYPE) + ); } public void testTooManyDimensionFields() { - // By default no more than 16 dimensions per document are supported - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> createDocumentMapper(mapping(b -> { - for (int i = 0; i < 17; i++) { + int max; + Settings settings; + if (randomBoolean()) { + max = 16; // By default no more than 16 dimensions per document are supported + settings = getIndexSettings(); + } else { + max = between(1, 10000); + settings = Settings.builder() + .put(getIndexSettings()) + .put(MapperService.INDEX_MAPPING_DIMENSION_FIELDS_LIMIT_SETTING.getKey(), max) + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), max + 1) + .build(); + } + IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> createMapperService(settings, mapping(b -> { + for (int i = 0; i <= max; i++) { b.startObject("field" + i) .field("type", randomFrom("ip", "keyword", "long", "integer", "byte", "short")) .field("dimension", true) .endObject(); } }))); - assertThat(e.getMessage(), containsString("Limit of total dimension fields [16] has been exceeded")); + assertThat(e.getMessage(), containsString("Limit of total dimension fields [" + max + "] has been exceeded")); } }