From 9495dae40fee8528201862e9cf2552f4ed4d4bc3 Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Tue, 13 Aug 2024 17:10:39 +0800 Subject: [PATCH] Increase test coverage Signed-off-by: Gao Binlong --- .../opensearch/index/IndexSettingsTests.java | 10 + .../index/mapper/DocumentParserTests.java | 228 +++++++++++------- 2 files changed, 151 insertions(+), 87 deletions(-) diff --git a/server/src/test/java/org/opensearch/index/IndexSettingsTests.java b/server/src/test/java/org/opensearch/index/IndexSettingsTests.java index 42fe0609db594..26605ab98e617 100644 --- a/server/src/test/java/org/opensearch/index/IndexSettingsTests.java +++ b/server/src/test/java/org/opensearch/index/IndexSettingsTests.java @@ -805,6 +805,16 @@ public void testUnmapFieldsBeyondTotalFieldsLimitSetting() { ); settings = new IndexSettings(metadata, Settings.EMPTY); assertTrue(settings.getUnmapFieldsBeyondTotalFieldsLimit()); + + Settings.Builder newSettings = Settings.builder() + .put( + Settings.builder() + .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT) + .put(INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), false) + .build() + ); + settings.updateIndexMetadata(newIndexMeta("index", newSettings.build())); + assertFalse(settings.getUnmapFieldsBeyondTotalFieldsLimit()); } public void testRemoteTranslogStoreDefaultSetting() { diff --git a/server/src/test/java/org/opensearch/index/mapper/DocumentParserTests.java b/server/src/test/java/org/opensearch/index/mapper/DocumentParserTests.java index 2a41211949d58..bf30c21e12944 100644 --- a/server/src/test/java/org/opensearch/index/mapper/DocumentParserTests.java +++ b/server/src/test/java/org/opensearch/index/mapper/DocumentParserTests.java @@ -1201,85 +1201,166 @@ public void testDynamicStrictAllowTemplatesValue() throws Exception { } public void testDynamicValueWithUnmapFieldsBeyondTotalLimit() throws Exception { - Settings settings = Settings.builder() - .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) - .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) - .build(); - DocumentMapper mapper = createDocumentMapper(topMapping(b -> { - b.field("dynamic", "true"); - b.startObject("properties"); - { - b.startObject("foo"); - b.field("type", "keyword"); - b.endObject(); - b.startObject("bar"); - b.field("type", "keyword"); - b.endObject(); - b.startObject("zoo"); - b.field("type", "keyword"); + { + Settings settings = Settings.builder() + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) + .build(); + DocumentMapper mapper = createDocumentMapper(topMapping(b -> { + b.field("dynamic", "true"); + b.startObject("properties"); + { + b.startObject("foo"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("bar"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("zoo"); + b.field("type", "keyword"); + b.endObject(); + } b.endObject(); } - b.endObject(); + + ), settings); + + ParsedDocument doc = mapper.parse(source(b -> b.field("test1", "baz"))); + assertEquals(0, doc.rootDoc().getFields("test1").length); } - ), settings); + { + Settings settings = Settings.builder() + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) + .build(); + DocumentMapper mapper = createDocumentMapper(topMapping(b -> { + b.field("dynamic", "true"); + b.startObject("properties"); + { + b.startObject("foo"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("bar"); + b.field("type", "keyword"); + b.endObject(); + } + b.endObject(); + } - ParsedDocument doc = mapper.parse(source(b -> b.field("test1", "baz"))); - assertEquals(0, doc.rootDoc().getFields("test1").length); + ), settings); + + // Add a string type field will add two fields into the mapping(text+keyword), so the field `test` + // will not be added to the mapping because of the total fields limit + ParsedDocument doc = mapper.parse(source(b -> b.field("test", "baz"))); + assertEquals(0, doc.rootDoc().getFields("test").length); + } } public void testDynamicLongArrayWithUnmapFieldsBeyondTotalLimit() throws Exception { - Settings settings = Settings.builder() - .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) - .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) - .build(); - DocumentMapper mapper = createDocumentMapper(topMapping(b -> { - b.field("dynamic", "true"); - b.startObject("properties"); - { - b.startObject("foo"); - b.field("type", "keyword"); - b.endObject(); - b.startObject("bar"); - b.field("type", "keyword"); + { + Settings settings = Settings.builder() + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) + .build(); + DocumentMapper mapper = createDocumentMapper(topMapping(b -> { + b.field("dynamic", "true"); + b.startObject("properties"); + { + b.startObject("foo"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("bar"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("zoo"); + b.field("type", "keyword"); + b.endObject(); + } b.endObject(); - b.startObject("zoo"); - b.field("type", "keyword"); + }), settings); + + ParsedDocument doc = mapper.parse(source(b -> b.startArray("test").value(0).value(1).endArray())); + assertEquals(0, doc.rootDoc().getFields("test").length); + } + + { + Settings settings = Settings.builder() + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) + .build(); + DocumentMapper mapper = createDocumentMapper(topMapping(b -> { + b.field("dynamic", "true"); + b.startObject("properties"); + { + b.startObject("foo"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("bar"); + b.field("type", "keyword"); + b.endObject(); + } b.endObject(); - } - b.endObject(); - }), settings); + }), settings); - ParsedDocument doc = mapper.parse(source(b -> b.startArray("test").value(0).value(1).endArray())); - assertEquals(0, doc.rootDoc().getFields("test").length); + ParsedDocument doc = mapper.parse(source(b -> b.startArray("test").value(0).value(1).endArray())); + assertEquals(2, doc.rootDoc().getFields("test").length); + } } public void testDynamicObjectWithUnmapFieldsBeyondTotalLimit() throws Exception { - Settings settings = Settings.builder() - .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) - .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) - .build(); - DocumentMapper mapper = createDocumentMapper(topMapping(b -> { - b.field("dynamic", "true"); - b.startObject("properties"); - { - b.startObject("foo"); - b.field("type", "keyword"); - b.endObject(); - b.startObject("bar"); - b.field("type", "keyword"); - b.endObject(); - b.startObject("zoo"); - b.field("type", "keyword"); + { + Settings settings = Settings.builder() + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) + .build(); + DocumentMapper mapper = createDocumentMapper(topMapping(b -> { + b.field("dynamic", "true"); + b.startObject("properties"); + { + b.startObject("foo"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("bar"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("zoo"); + b.field("type", "keyword"); + b.endObject(); + } b.endObject(); } - b.endObject(); + + ), settings); + + ParsedDocument doc = mapper.parse(source(b -> b.startObject("test").field("test1", "baz").endObject())); + assertEquals(0, doc.rootDoc().getFields("test.test1").length); } - ), settings); + { + Settings settings = Settings.builder() + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) + .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) + .build(); + DocumentMapper mapper = createDocumentMapper(topMapping(b -> { + b.field("dynamic", "true"); + b.startObject("properties"); + { + b.startObject("foo"); + b.field("type", "keyword"); + b.endObject(); + b.startObject("bar"); + b.field("type", "keyword"); + b.endObject(); + } + b.endObject(); + } - ParsedDocument doc = mapper.parse(source(b -> b.startObject("test").field("test1", "baz").endObject())); - assertEquals(0, doc.rootDoc().getFields("test.test1").length); + ), settings); + + ParsedDocument doc = mapper.parse(source(b -> b.startObject("test").field("test1", "baz").endObject())); + assertEquals(0, doc.rootDoc().getFields("test.test1").length); + } } public void testDynamicStrictAllowTemplatesValueWithUnmapFieldsBeyondTotalLimit() throws Exception { @@ -1408,33 +1489,6 @@ public void testDynamicStrictAllowTemplatesObjectWithUnmapFieldsBeyondTotalLimit assertEquals(0, doc.rootDoc().getFields("test.test1").length); } - public void testCannotAddNewFieldWithUnmapFieldsBeyondTotalLimit() throws Exception { - Settings settings = Settings.builder() - .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), 3) - .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING.getKey(), true) - .build(); - DocumentMapper mapper = createDocumentMapper(topMapping(b -> { - b.field("dynamic", "true"); - b.startObject("properties"); - { - b.startObject("foo"); - b.field("type", "keyword"); - b.endObject(); - b.startObject("bar"); - b.field("type", "keyword"); - b.endObject(); - } - b.endObject(); - } - - ), settings); - - // Add a string type field will add two fields into the mapping(text+keyword), so the field `test` - // will not be added to the mapping because of the total fields limit - ParsedDocument doc = mapper.parse(source(b -> b.field("test", "baz"))); - assertEquals(0, doc.rootDoc().getFields("test").length); - } - public void testDynamicStrictAllowTemplatesNull() throws Exception { DocumentMapper mapper = createDocumentMapper(topMapping(b -> b.field("dynamic", "strict_allow_templates"))); StrictDynamicMappingException exception = expectThrows(