From e8533f0c969a1cbaa54c79726539d0b3aaa076d5 Mon Sep 17 00:00:00 2001 From: Petar Dzepina Date: Sat, 24 Dec 2022 02:49:52 +0100 Subject: [PATCH] fixed aliases being returned in unmapped_index_fields (#147) Signed-off-by: Petar Dzepina (cherry picked from commit 1c798dc01c63f363c2fc3600b14fa3f42c80019a) --- .../mapper/MappingsTraverser.java | 10 +--------- .../securityanalytics/mapper/MapperRestApiIT.java | 15 +++++++-------- .../mapper/MapperUtilsTests.java | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/opensearch/securityanalytics/mapper/MappingsTraverser.java b/src/main/java/org/opensearch/securityanalytics/mapper/MappingsTraverser.java index 26b6aaecf..2531d3dcf 100644 --- a/src/main/java/org/opensearch/securityanalytics/mapper/MappingsTraverser.java +++ b/src/main/java/org/opensearch/securityanalytics/mapper/MappingsTraverser.java @@ -120,14 +120,6 @@ public void addListener(MappingsTraverserListener l) { this.mappingsTraverserListeners.add(l); } - /** - * Sets set of property "type" values to skip during traversal. - * @param types Set of strings representing property "type" - */ - public void setTypesToSkip(Set types) { - this.typesToSkip = types; - } - /** * Traverses mappings tree and collects all fields that are not of type "alias". * Nested fields are flattened. @@ -136,7 +128,7 @@ public void setTypesToSkip(Set types) { public List extractFlatNonAliasFields() { List flatProperties = new ArrayList<>(); // Setup - this.typesToSkip.add(ALIAS); + this.propertiesToSkip.add(Pair.of(TYPE, ALIAS)); this.mappingsTraverserListeners.add(new MappingsTraverserListener() { @Override public void onLeafVisited(Node node) { diff --git a/src/test/java/org/opensearch/securityanalytics/mapper/MapperRestApiIT.java b/src/test/java/org/opensearch/securityanalytics/mapper/MapperRestApiIT.java index 08fb730e3..7b454e77a 100644 --- a/src/test/java/org/opensearch/securityanalytics/mapper/MapperRestApiIT.java +++ b/src/test/java/org/opensearch/securityanalytics/mapper/MapperRestApiIT.java @@ -48,19 +48,18 @@ public void testCreateMappingSuccess() throws IOException { " \"partial\":true" + "}" ); - // request.addParameter("indexName", testIndexName); - // request.addParameter("ruleTopic", "netflow"); Response response = client().performRequest(request); assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode()); // Verify mappings GetMappingsResponse getMappingsResponse = SecurityAnalyticsClientUtils.executeGetMappingsRequest(testIndexName); MappingsTraverser mappingsTraverser = new MappingsTraverser(getMappingsResponse.getMappings().iterator().next().value); + // After applying netflow aliases, our index will have 4 alias mappings List flatProperties = mappingsTraverser.extractFlatNonAliasFields(); - assertTrue(flatProperties.contains("source.ip")); - assertTrue(flatProperties.contains("destination.ip")); - assertTrue(flatProperties.contains("source.port")); - assertTrue(flatProperties.contains("destination.port")); + assertFalse(flatProperties.contains("source.ip")); + assertFalse(flatProperties.contains("destination.ip")); + assertFalse(flatProperties.contains("source.port")); + assertFalse(flatProperties.contains("destination.port")); // Try searching by alias field String query = "{" + " \"query\": {" + @@ -110,8 +109,8 @@ public void testCreateMappingWithAliasesSuccess() throws IOException { GetMappingsResponse getMappingsResponse = SecurityAnalyticsClientUtils.executeGetMappingsRequest(testIndexName); MappingsTraverser mappingsTraverser = new MappingsTraverser(getMappingsResponse.getMappings().iterator().next().value); List flatProperties = mappingsTraverser.extractFlatNonAliasFields(); - assertTrue(flatProperties.contains("source.ip")); - assertTrue(flatProperties.contains("source.port")); + assertFalse(flatProperties.contains("source.ip")); + assertFalse(flatProperties.contains("source.port")); // Try searching by alias field String query = "{" + " \"query\": {" + diff --git a/src/test/java/org/opensearch/securityanalytics/mapper/MapperUtilsTests.java b/src/test/java/org/opensearch/securityanalytics/mapper/MapperUtilsTests.java index f9af17e1d..8667da25b 100644 --- a/src/test/java/org/opensearch/securityanalytics/mapper/MapperUtilsTests.java +++ b/src/test/java/org/opensearch/securityanalytics/mapper/MapperUtilsTests.java @@ -64,6 +64,20 @@ public void testValidateIndexMappingsNoMissing() throws IOException { assertEquals(0, missingFields.size()); } + public void testGetAllNonAliasFieldsFromIndex_success() throws IOException { + // Create index mappings + Map m = new HashMap<>(); + m.put("netflow.event_data.SourceAddress", Map.of("type", "ip")); + m.put("alias_123", Map.of("type", "alias", "path", "netflow.event_data.SourceAddress")); + Map properties = Map.of("properties", m); + Map root = Map.of(MapperService.SINGLE_MAPPING_NAME, properties); + MappingMetadata mappingMetadata = new MappingMetadata(MapperService.SINGLE_MAPPING_NAME, root); + + List fields = MapperUtils.getAllNonAliasFieldsFromIndex(mappingMetadata); + assertEquals(1, fields.size()); + assertEquals("netflow.event_data.SourceAddress", fields.get(0)); + } + public void testGetAllPathsFromAliasMappingsSuccess() throws IOException { MapperTopicStore.putAliasMappings("test123", "testValidAliasMappingsSimple.json");