From d5d946851181435dee0cd39c8ca4caebbbcb05f9 Mon Sep 17 00:00:00 2001 From: Daniel Widdis Date: Tue, 8 Aug 2023 21:43:30 -0700 Subject: [PATCH] Prevent duplicate keys in random mapping fields Signed-off-by: Daniel Widdis --- .../GetIndexTemplatesResponseTests.java | 19 +++++++++++++------ .../index/RandomCreateIndexGenerator.java | 10 ++++++++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/client/rest-high-level/src/test/java/org/opensearch/client/indices/GetIndexTemplatesResponseTests.java b/client/rest-high-level/src/test/java/org/opensearch/client/indices/GetIndexTemplatesResponseTests.java index 8c83791d94d42..37c898274f393 100644 --- a/client/rest-high-level/src/test/java/org/opensearch/client/indices/GetIndexTemplatesResponseTests.java +++ b/client/rest-high-level/src/test/java/org/opensearch/client/indices/GetIndexTemplatesResponseTests.java @@ -34,18 +34,18 @@ import org.opensearch.cluster.metadata.AliasMetadata; import org.opensearch.cluster.metadata.MappingMetadata; -import org.opensearch.core.common.bytes.BytesArray; -import org.opensearch.core.common.bytes.BytesReference; import org.opensearch.common.compress.CompressedXContent; import org.opensearch.common.settings.Settings; +import org.opensearch.common.xcontent.XContentHelper; +import org.opensearch.common.xcontent.XContentType; +import org.opensearch.core.common.bytes.BytesArray; +import org.opensearch.core.common.bytes.BytesReference; import org.opensearch.core.xcontent.DeprecationHandler; import org.opensearch.core.xcontent.MediaTypeRegistry; import org.opensearch.core.xcontent.NamedXContentRegistry; import org.opensearch.core.xcontent.ToXContent; import org.opensearch.core.xcontent.XContentBuilder; -import org.opensearch.common.xcontent.XContentHelper; import org.opensearch.core.xcontent.XContentParser; -import org.opensearch.common.xcontent.XContentType; import org.opensearch.index.mapper.MapperService; import org.opensearch.test.OpenSearchTestCase; @@ -53,18 +53,21 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.IntStream; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; import static org.opensearch.index.RandomCreateIndexGenerator.randomIndexSettings; import static org.opensearch.index.RandomCreateIndexGenerator.randomMappingFields; import static org.opensearch.test.AbstractXContentTestCase.xContentTester; -import static org.hamcrest.Matchers.equalTo; public class GetIndexTemplatesResponseTests extends OpenSearchTestCase { @@ -99,8 +102,12 @@ public void testParsingFromOpenSearchResponse() throws IOException { esIMD.settings(randomIndexSettings()); esIMD.putMapping("_doc", new CompressedXContent(BytesReference.bytes(randomMapping("_doc", xContentType)))); int numAliases = randomIntBetween(0, 8); + Set uniqueAliases = new HashSet<>(); for (int j = 0; j < numAliases; j++) { - esIMD.putAlias(randomAliasMetadata(String.format(Locale.ROOT, "%02d ", j) + randomAlphaOfLength(4))); + uniqueAliases.add(String.format(Locale.ROOT, "%02d ", j) + randomAlphaOfLength(4)); + } + for (String uniqueAlias : uniqueAliases) { + esIMD.putAlias(randomAliasMetadata(uniqueAlias)); } esIMD.order(randomIntBetween(0, Integer.MAX_VALUE)); esIMD.version(randomIntBetween(0, Integer.MAX_VALUE)); diff --git a/test/framework/src/main/java/org/opensearch/index/RandomCreateIndexGenerator.java b/test/framework/src/main/java/org/opensearch/index/RandomCreateIndexGenerator.java index 8d951c603425d..56b8d49b7496d 100644 --- a/test/framework/src/main/java/org/opensearch/index/RandomCreateIndexGenerator.java +++ b/test/framework/src/main/java/org/opensearch/index/RandomCreateIndexGenerator.java @@ -35,11 +35,13 @@ import org.opensearch.action.admin.indices.alias.Alias; import org.opensearch.action.admin.indices.create.CreateIndexRequest; import org.opensearch.common.settings.Settings; +import org.opensearch.common.xcontent.XContentType; import org.opensearch.core.xcontent.MediaTypeRegistry; import org.opensearch.core.xcontent.XContentBuilder; -import org.opensearch.common.xcontent.XContentType; import java.io.IOException; +import java.util.HashSet; +import java.util.Set; import static org.opensearch.cluster.metadata.IndexMetadata.SETTING_NUMBER_OF_REPLICAS; import static org.opensearch.cluster.metadata.IndexMetadata.SETTING_NUMBER_OF_SHARDS; @@ -112,8 +114,12 @@ public static void randomMappingFields(XContentBuilder builder, boolean allowObj builder.startObject("properties"); int fieldsNo = randomIntBetween(0, 5); + Set uniqueFields = new HashSet<>(); for (int i = 0; i < fieldsNo; i++) { - builder.startObject(randomAlphaOfLength(5)); + uniqueFields.add(randomAlphaOfLength(5)); + } + for (String uniqueField : uniqueFields) { + builder.startObject(uniqueField); if (allowObjectField && randomBoolean()) { randomMappingFields(builder, false);