From dac6dd676dedfe5492cf933cf3a0f7e1deff5ed5 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Wed, 11 Aug 2021 11:43:52 -0400 Subject: [PATCH] Expand DocumentMapperTests 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")); } }