Repository: metron Updated Branches: refs/heads/master 995b20170 -> 8022f2c8c
METRON-1319 Column Metadata REST service should use default indices on empty input (merrimanr) closes apache/metron#843 Project: http://git-wip-us.apache.org/repos/asf/metron/repo Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/8022f2c8 Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/8022f2c8 Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/8022f2c8 Branch: refs/heads/master Commit: 8022f2c8c4e9018a15a4f04d0a66f8bc0ea653c3 Parents: 995b201 Author: merrimanr <[email protected]> Authored: Tue Nov 21 13:46:35 2017 -0600 Committer: merrimanr <[email protected]> Committed: Tue Nov 21 13:46:35 2017 -0600 ---------------------------------------------------------------------- .../rest/service/impl/SearchServiceImpl.java | 12 +++++++++ .../SearchControllerIntegrationTest.java | 26 ++++++++++++++++++++ .../service/impl/SearchServiceImplTest.java | 13 ++++++++++ 3 files changed, 51 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metron/blob/8022f2c8/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java ---------------------------------------------------------------------- diff --git a/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java b/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java index a696f68..7cee3cc 100644 --- a/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java +++ b/metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/SearchServiceImpl.java @@ -22,6 +22,7 @@ import static org.apache.metron.indexing.dao.MetaAlertDao.METAALERT_TYPE; import static org.apache.metron.rest.MetronRestConstants.INDEX_WRITER_NAME; import com.google.common.collect.Lists; +import java.lang.invoke.MethodHandles; import org.apache.metron.indexing.dao.IndexDao; import org.apache.metron.indexing.dao.search.GetRequest; import org.apache.metron.indexing.dao.search.GroupRequest; @@ -33,6 +34,8 @@ import org.apache.metron.indexing.dao.search.FieldType; import org.apache.metron.rest.RestException; import org.apache.metron.rest.service.SearchService; import org.apache.metron.rest.service.SensorIndexingConfigService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; @@ -44,6 +47,9 @@ import java.util.List; @Service public class SearchServiceImpl implements SearchService { + + private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private IndexDao dao; private Environment environment; private SensorIndexingConfigService sensorIndexingConfigService; @@ -96,6 +102,12 @@ public class SearchServiceImpl implements SearchService { @Override public Map<String, FieldType> getColumnMetadata(List<String> indices) throws RestException { try { + if (indices == null || indices.isEmpty()) { + indices = getDefaultIndices(); + // metaalerts should be included by default in column metadata requests + indices.add(METAALERT_TYPE); + LOG.debug(String.format("No indices provided for getColumnMetadata. Using default indices: %s", String.join(",", indices))); + } return dao.getColumnMetadata(indices); } catch(IOException ioe) { http://git-wip-us.apache.org/repos/asf/metron/blob/8022f2c8/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java b/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java index 78a1e20..f83fe00 100644 --- a/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java +++ b/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/controller/SearchControllerIntegrationTest.java @@ -133,6 +133,32 @@ public class SearchControllerIntegrationTest extends DaoControllerTest { } @Test + public void testColumnMetadataUsingDefaultIndices() throws Exception { + // Setup the default indices of bro and snort + sensorIndexingConfigService.save("bro", new HashMap<String, Object>() {{ + put("index", "bro"); + }}); + sensorIndexingConfigService.save("snort", new HashMap<String, Object>() {{ + put("index", "snort"); + }}); + + // Pass in an empty list to trigger using default indices + assertEventually(() -> this.mockMvc.perform(post(searchUrl + "/column/metadata").with(httpBasic(user, password)).with(csrf()).contentType(MediaType.parseMediaType("application/json;charset=UTF-8")).content("[]")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.parseMediaType("application/json;charset=UTF-8"))) + .andExpect(jsonPath("$.*", hasSize(5))) + .andExpect(jsonPath("$.common_string_field").value("string")) + .andExpect(jsonPath("$.common_integer_field").value("integer")) + .andExpect(jsonPath("$.bro_field").value("boolean")) + .andExpect(jsonPath("$.snort_field").value("double")) + .andExpect(jsonPath("$.duplicate_field").value("other")) + ); + + sensorIndexingConfigService.delete("bro"); + sensorIndexingConfigService.delete("snort"); + } + + @Test public void test() throws Exception { this.mockMvc.perform(post(searchUrl + "/search").with(httpBasic(user, password)).with(csrf()).contentType(MediaType.parseMediaType("application/json;charset=UTF-8")).content(SearchIntegrationTest.allQuery)) http://git-wip-us.apache.org/repos/asf/metron/blob/8022f2c8/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java ---------------------------------------------------------------------- diff --git a/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java b/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java index 916422a..1d8f182 100644 --- a/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java +++ b/metron-interface/metron-rest/src/test/java/org/apache/metron/rest/service/impl/SearchServiceImplTest.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import java.util.ArrayList; import java.util.Arrays; import org.apache.metron.indexing.dao.IndexDao; import org.apache.metron.indexing.dao.search.InvalidSearchException; @@ -95,4 +96,16 @@ public class SearchServiceImplTest { searchRequest.setIndices(Arrays.asList("bro")); searchService.search(searchRequest); } + + @Test + public void getColumnMetadataShouldProperlyGetDefaultIndices() throws Exception { + when(environment.getProperty(INDEX_WRITER_NAME)).thenReturn("elasticsearch"); + when(sensorIndexingConfigService.getAllIndices("elasticsearch")).thenReturn(Arrays.asList("bro", "snort", "error")); + + searchService.getColumnMetadata(new ArrayList<>()); + + verify(dao).getColumnMetadata(eq(Arrays.asList("bro", "snort", "metaalert"))); + + verifyNoMoreInteractions(dao); + } }
