From 9bde1d9007fe3a7598e01aca6f1d90515dd0d82b Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Wed, 11 Aug 2021 14:22:14 -0400 Subject: [PATCH] Expand DocumentMapperTests (#76368) Adds a test for setting the maximum number of dimensions setting and tests the names and types of the metadata fields in the index. Previously we just asserted the count of metadata fields. That made it hard to read failures. --- .../index/mapper/DocumentMapperTests.java | 58 +++++++++++++++++-- 1 file changed, 52 insertions(+), 6 deletions(-) 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")); } }