You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by rm...@apache.org on 2018/04/27 19:30:29 UTC
[49/50] [abbrv] metron git commit: Merge remote-tracking branch
'origin/master' into feature/METRON-1416-upgrade-solr
http://git-wip-us.apache.org/repos/asf/metron/blob/d0a4e4c0/metron-platform/metron-solr/src/test/java/org/apache/metron/solr/dao/SolrSearchDaoTest.java
----------------------------------------------------------------------
diff --cc metron-platform/metron-solr/src/test/java/org/apache/metron/solr/dao/SolrSearchDaoTest.java
index 762a272,0000000..9f2414a
mode 100644,000000..100644
--- a/metron-platform/metron-solr/src/test/java/org/apache/metron/solr/dao/SolrSearchDaoTest.java
+++ b/metron-platform/metron-solr/src/test/java/org/apache/metron/solr/dao/SolrSearchDaoTest.java
@@@ -1,478 -1,0 +1,478 @@@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.metron.solr.dao;
+
+import org.apache.metron.common.Constants;
+import org.apache.metron.indexing.dao.AccessConfig;
+import org.apache.metron.indexing.dao.search.GetRequest;
+import org.apache.metron.indexing.dao.search.Group;
+import org.apache.metron.indexing.dao.search.GroupOrder;
+import org.apache.metron.indexing.dao.search.GroupRequest;
+import org.apache.metron.indexing.dao.search.GroupResponse;
+import org.apache.metron.indexing.dao.search.GroupResult;
+import org.apache.metron.indexing.dao.search.InvalidSearchException;
+import org.apache.metron.indexing.dao.search.SearchRequest;
+import org.apache.metron.indexing.dao.search.SearchResponse;
+import org.apache.metron.indexing.dao.search.SearchResult;
+import org.apache.metron.indexing.dao.search.SortField;
+import org.apache.metron.indexing.dao.update.Document;
+import org.apache.metron.solr.matcher.ModifiableSolrParamsMatcher;
+import org.apache.metron.solr.matcher.SolrQueryMatcher;
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.client.solrj.response.FacetField;
+import org.apache.solr.client.solrj.response.FieldStatsInfo;
+import org.apache.solr.client.solrj.response.PivotField;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.NamedList;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsCollectionContaining.hasItems;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+import static org.powermock.api.mockito.PowerMockito.mockStatic;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({CollectionAdminRequest.class})
+public class SolrSearchDaoTest {
+
+ @Rule
+ public final ExpectedException exception = ExpectedException.none();
+
+ private SolrClient client;
+ private AccessConfig accessConfig;
+ private SolrSearchDao solrSearchDao;
+
+ @SuppressWarnings("unchecked")
+ @Before
+ public void setUp() throws Exception {
+ client = mock(SolrClient.class);
+ accessConfig = mock(AccessConfig.class);
+ solrSearchDao = new SolrSearchDao(client, accessConfig);
+ mockStatic(CollectionAdminRequest.class);
+ when(CollectionAdminRequest.listCollections(client)).thenReturn(Arrays.asList("bro", "snort"));
+ }
+
+ @Test
+ public void searchShouldProperlyReturnSearchResponse() throws Exception {
+ SearchRequest searchRequest = mock(SearchRequest.class);
+ SearchResponse searchResponse = mock(SearchResponse.class);
+ SolrQuery solrQuery = mock(SolrQuery.class);
+ QueryResponse queryResponse = mock(QueryResponse.class);
+
+ solrSearchDao = spy(new SolrSearchDao(client, accessConfig));
+ when(searchRequest.getQuery()).thenReturn("query");
+ doReturn(solrQuery).when(solrSearchDao).buildSearchRequest(searchRequest);
+ when(client.query(solrQuery)).thenReturn(queryResponse);
+ doReturn(searchResponse).when(solrSearchDao).buildSearchResponse(searchRequest, queryResponse);
+
+ assertEquals(searchResponse, solrSearchDao.search(searchRequest));
+ verify(solrSearchDao).buildSearchRequest(searchRequest);
+ verify(client).query(solrQuery);
+ verify(solrSearchDao).buildSearchResponse(searchRequest, queryResponse);
+ verifyNoMoreInteractions(client);
+ }
+
+ @Test
+ public void searchShouldThrowInvalidSearchExceptionOnEmptyQuery() throws Exception {
+ exception.expect(InvalidSearchException.class);
+ exception.expectMessage("Search query is invalid: null");
+
+ solrSearchDao.search(new SearchRequest());
+ }
+
+ @Test
+ public void searchShouldThrowInvalidSearchExceptionOnEmptyClient() throws Exception {
+ exception.expect(InvalidSearchException.class);
+ exception.expectMessage("Uninitialized Dao! You must call init() prior to use.");
+
+ SearchRequest searchRequest = new SearchRequest();
+ searchRequest.setQuery("query");
+ new SolrSearchDao(null, accessConfig).search(searchRequest);
+ }
+
+ @Test
+ public void searchShouldThrowSearchResultSizeException() throws Exception {
+ exception.expect(InvalidSearchException.class);
+ exception.expectMessage("Search result size must be less than 100");
+
+ when(accessConfig.getMaxSearchResults()).thenReturn(100);
+ SearchRequest searchRequest = new SearchRequest();
+ searchRequest.setQuery("query");
+ searchRequest.setSize(200);
+ solrSearchDao.search(searchRequest);
+ }
+
+ @Test
+ public void groupShouldProperlyReturnGroupResponse() throws Exception {
+ GroupRequest groupRequest = mock(GroupRequest.class);
+ QueryResponse queryResponse = mock(QueryResponse.class);
+ GroupResponse groupResponse = mock(GroupResponse.class);
+
+ solrSearchDao = spy(new SolrSearchDao(client, accessConfig));
+ Group group1 = new Group();
+ group1.setField("field1");
+ Group group2 = new Group();
+ group2.setField("field2");
+ when(groupRequest.getQuery()).thenReturn("query");
+ when(groupRequest.getGroups()).thenReturn(Arrays.asList(group1, group2));
+ when(groupRequest.getScoreField()).thenReturn(Optional.of("scoreField"));
+ when(groupRequest.getIndices()).thenReturn(Arrays.asList("bro", "snort"));
+ when(client.query(any())).thenReturn(queryResponse);
+ doReturn(groupResponse).when(solrSearchDao).buildGroupResponse(groupRequest, queryResponse);
+ SolrQuery expectedSolrQuery = new SolrQuery()
+ .setStart(0)
+ .setRows(0)
+ .setQuery("query");
+ expectedSolrQuery.set("collection", "bro,snort");
+ expectedSolrQuery.set("stats", true);
+ expectedSolrQuery.set("stats.field", "{!tag=piv1 sum=true}scoreField");
+ expectedSolrQuery.set("facet", true);
+ expectedSolrQuery.set("facet.pivot", "{!stats=piv1}field1,field2");
+
+ assertEquals(groupResponse, solrSearchDao.group(groupRequest));
+ verify(client).query(argThat(new SolrQueryMatcher(expectedSolrQuery)));
+ verify(solrSearchDao).buildGroupResponse(groupRequest, queryResponse);
+
+ verifyNoMoreInteractions(client);
+ }
+
+ @Test
+ public void getLatestShouldProperlyReturnDocument() throws Exception {
+ SolrDocument solrDocument = mock(SolrDocument.class);
+ Document document = mock(Document.class);
+
+ solrSearchDao = spy(new SolrSearchDao(client, accessConfig));
+ when(client.getById("collection", "guid")).thenReturn(solrDocument);
+ doReturn(document).when(solrSearchDao).toDocument(solrDocument);
+
+ assertEquals(document, solrSearchDao.getLatest("guid", "collection"));
+
+ verify(client).getById("collection", "guid");
+ verify(solrSearchDao).toDocument(solrDocument);
+ verifyNoMoreInteractions(client);
+ }
+
+ @Test
+ public void getAllLatestShouldProperlyReturnDocuments() throws Exception {
+ GetRequest broRequest1 = new GetRequest("bro-1", "bro");
+ GetRequest broRequest2 = new GetRequest("bro-2", "bro");
+ GetRequest snortRequest1 = new GetRequest("snort-1", "snort");
+ GetRequest snortRequest2 = new GetRequest("snort-2", "snort");
+ SolrDocument broSolrDoc1 = mock(SolrDocument.class);
+ SolrDocument broSolrDoc2 = mock(SolrDocument.class);
+ SolrDocument snortSolrDoc1 = mock(SolrDocument.class);
+ SolrDocument snortSolrDoc2 = mock(SolrDocument.class);
+ Document broDoc1 = mock(Document.class);
+ Document broDoc2 = mock(Document.class);
+ Document snortDoc1 = mock(Document.class);
+ Document snortDoc2 = mock(Document.class);
+
+ solrSearchDao = spy(new SolrSearchDao(client, accessConfig));
+ doReturn(broDoc1).when(solrSearchDao).toDocument(broSolrDoc1);
+ doReturn(broDoc2).when(solrSearchDao).toDocument(broSolrDoc2);
+ doReturn(snortDoc1).when(solrSearchDao).toDocument(snortSolrDoc1);
+ doReturn(snortDoc2).when(solrSearchDao).toDocument(snortSolrDoc2);
+ SolrDocumentList broList = new SolrDocumentList();
+ broList.add(broSolrDoc1);
+ broList.add(broSolrDoc2);
+ SolrDocumentList snortList = new SolrDocumentList();
+ snortList.add(snortSolrDoc1);
+ snortList.add(snortSolrDoc2);
+ when(client.getById((Collection<String>) argThat(hasItems("bro-1", "bro-2")),
+ argThat(new ModifiableSolrParamsMatcher(new ModifiableSolrParams().set("collection", "bro"))))).thenReturn(broList);
+ when(client.getById((Collection<String>) argThat(hasItems("snort-1", "snort-2")),
+ argThat(new ModifiableSolrParamsMatcher(new ModifiableSolrParams().set("collection", "snort"))))).thenReturn(snortList);
+ assertEquals(Arrays.asList(broDoc1, broDoc2, snortDoc1, snortDoc2), solrSearchDao.getAllLatest(Arrays.asList(broRequest1, broRequest2, snortRequest1, snortRequest2)));
+ }
+
+ @Test
+ public void buildSearchRequestShouldReturnSolrQuery() throws Exception {
+ SearchRequest searchRequest = new SearchRequest();
+ searchRequest.setIndices(Arrays.asList("bro", "snort"));
+ searchRequest.setSize(5);
+ searchRequest.setFrom(10);
+ searchRequest.setQuery("query");
+ SortField sortField = new SortField();
+ sortField.setField("sortField");
+ sortField.setSortOrder("ASC");
+ searchRequest.setSort(Collections.singletonList(sortField));
+ searchRequest.setFields(Arrays.asList("field1", "field2"));
+ searchRequest.setFacetFields(Arrays.asList("facetField1", "facetField2"));
+
+ SolrQuery exceptedSolrQuery = new SolrQuery()
+ .setStart(10)
+ .setRows(5)
+ .setQuery("query")
+ .addSort("sortField", SolrQuery.ORDER.asc)
+ .addField("field1").addField("field2")
+ .addFacetField("facetField1", "facetField2");
+ exceptedSolrQuery.set("collection", "bro,snort");
+
+ SolrQuery solrQuery = solrSearchDao.buildSearchRequest(searchRequest);
+ assertThat(solrQuery, new SolrQueryMatcher(exceptedSolrQuery));
+ }
+
+ @Test
+ public void buildSearchResponseShouldReturnSearchResponse() throws Exception {
+ SearchRequest searchRequest = new SearchRequest();
+ searchRequest.setFields(Collections.singletonList("id"));
+ searchRequest.setFacetFields(Collections.singletonList("facetField"));
+ QueryResponse queryResponse = mock(QueryResponse.class);
+ SolrDocument solrDocument1 = mock(SolrDocument.class);
+ SolrDocument solrDocument2 = mock(SolrDocument.class);
+
+ solrSearchDao = spy(new SolrSearchDao(client, accessConfig));
+ SolrDocumentList solrDocumentList = new SolrDocumentList();
+ solrDocumentList.add(solrDocument1);
+ solrDocumentList.add(solrDocument2);
+ solrDocumentList.setNumFound(100);
+ when(queryResponse.getResults()).thenReturn(solrDocumentList);
+ SearchResult searchResult1 = new SearchResult();
+ searchResult1.setId("id1");
+ SearchResult searchResult2 = new SearchResult();
+ searchResult2.setId("id2");
+ doReturn(searchResult1).when(solrSearchDao).getSearchResult(solrDocument1,
- Optional.of(Collections.singletonList("id")));
++ Collections.singletonList("id"));
+ doReturn(searchResult2).when(solrSearchDao).getSearchResult(solrDocument2,
- Optional.of(Collections.singletonList("id")));
++ Collections.singletonList("id"));
+ Map<String, Map<String, Long>> facetCounts = new HashMap<String, Map<String, Long>>() {{
+ put("id", new HashMap<String, Long>() {{
+ put("id1", 1L);
+ put("id2", 1L);
+ }});
+ }};
+ doReturn(facetCounts).when(solrSearchDao).getFacetCounts(Collections.singletonList("facetField"), queryResponse);
+ SearchResponse expectedSearchResponse = new SearchResponse();
+ SearchResult expectedSearchResult1 = new SearchResult();
+ expectedSearchResult1.setId("id1");
+ SearchResult expectedSearchResult2 = new SearchResult();
+ expectedSearchResult2.setId("id2");
+ expectedSearchResponse.setResults(Arrays.asList(expectedSearchResult1, expectedSearchResult2));
+ expectedSearchResponse.setTotal(100);
+ expectedSearchResponse.setFacetCounts(facetCounts);
+
+ assertEquals(expectedSearchResponse, solrSearchDao.buildSearchResponse(searchRequest, queryResponse));
+ }
+
+ @Test
+ public void getSearchResultShouldProperlyReturnResults() throws Exception {
+ SolrDocument solrDocument = mock(SolrDocument.class);
+
+ when(solrDocument.getFieldValue(Constants.GUID)).thenReturn("guid");
+ when(solrDocument.getFieldValue("field1")).thenReturn("value1");
+ when(solrDocument.getFieldValue("field2")).thenReturn("value2");
+ when(solrDocument.getFieldNames()).thenReturn(Arrays.asList("field1", "field2"));
+
+ SearchResult expectedSearchResult = new SearchResult();
+ expectedSearchResult.setId("guid");
+ expectedSearchResult.setSource(new HashMap<String, Object>() {{
+ put("field1", "value1");
+ }});
+
+ assertEquals(expectedSearchResult, solrSearchDao.getSearchResult(solrDocument,
- Optional.of(Collections.singletonList("field1"))));
++ Collections.singletonList("field1")));
+
+ SearchResult expectedSearchResultAllFields = new SearchResult();
+ expectedSearchResultAllFields.setId("guid");
+ expectedSearchResultAllFields.setSource(new HashMap<String, Object>() {{
+ put("field1", "value1");
+ put("field2", "value2");
+ }});
+
- assertEquals(expectedSearchResultAllFields, solrSearchDao.getSearchResult(solrDocument, Optional.empty()));
++ assertEquals(expectedSearchResultAllFields, solrSearchDao.getSearchResult(solrDocument, null));
+ }
+
+ @Test
+ public void getFacetCountsShouldProperlyReturnFacetCounts() throws Exception {
+ QueryResponse queryResponse = mock(QueryResponse.class);
+
+ FacetField facetField1 = new FacetField("field1");
+ facetField1.add("value1", 1);
+ facetField1.add("value2", 2);
+ FacetField facetField2 = new FacetField("field2");
+ facetField2.add("value3", 3);
+ facetField2.add("value4", 4);
+ when(queryResponse.getFacetField("field1")).thenReturn(facetField1);
+ when(queryResponse.getFacetField("field2")).thenReturn(facetField2);
+
+ Map<String, Map<String, Long>> expectedFacetCounts = new HashMap<String, Map<String, Long>>() {{
+ put("field1", new HashMap<String, Long>() {{
+ put("value1", 1L);
+ put("value2", 2L);
+ }});
+ put("field2", new HashMap<String, Long>() {{
+ put("value3", 3L);
+ put("value4", 4L);
+ }});
+ }};
+
+ assertEquals(expectedFacetCounts, solrSearchDao.getFacetCounts(Arrays.asList("field1", "field2"), queryResponse));
+ }
+
+ @Test
+ public void buildGroupResponseShouldProperlyReturnGroupReponse() throws Exception {
+ GroupRequest groupRequest = mock(GroupRequest.class);
+ QueryResponse queryResponse = mock(QueryResponse.class);
+ NamedList namedList = mock(NamedList.class);
+ List pivotFields = mock(List.class);
+ List groupResults = mock(List.class);
+
+ solrSearchDao = spy(new SolrSearchDao(client, accessConfig));
+ Group group1 = new Group();
+ group1.setField("field1");
+ Group group2 = new Group();
+ group2.setField("field2");
+ when(groupRequest.getGroups()).thenReturn(Arrays.asList(group1, group2));
+ when(queryResponse.getFacetPivot()).thenReturn(namedList);
+ when(namedList.get("field1,field2")).thenReturn(pivotFields);
+ doReturn(groupResults).when(solrSearchDao).getGroupResults(groupRequest, 0, pivotFields);
+
+ GroupResponse groupResponse = solrSearchDao.buildGroupResponse(groupRequest, queryResponse);
+ assertEquals("field1", groupResponse.getGroupedBy());
+ verify(namedList).get("field1,field2");
+ verify(solrSearchDao).getGroupResults(groupRequest, 0, pivotFields);
+
+ }
+
+ @Test
+ public void getGroupResultsShouldProperlyReturnGroupResults() throws Exception {
+ GroupRequest groupRequest = new GroupRequest();
+ Group group1 = new Group();
+ group1.setField("field1");
+ GroupOrder groupOrder1 = new GroupOrder();
+ groupOrder1.setSortOrder("ASC");
+ groupOrder1.setGroupOrderType("TERM");
+ group1.setOrder(groupOrder1);
+ Group group2 = new Group();
+ group2.setField("field2");
+ GroupOrder groupOrder2 = new GroupOrder();
+ groupOrder2.setSortOrder("DESC");
+ groupOrder2.setGroupOrderType("COUNT");
+ group2.setOrder(groupOrder2);
+ groupRequest.setGroups(Arrays.asList(group1, group2));
+ groupRequest.setScoreField("scoreField");
+
+ PivotField level1Pivot1 = mock(PivotField.class);
+ PivotField level1Pivot2 = mock(PivotField.class);
+ PivotField level2Pivot1 = mock(PivotField.class);
+ PivotField level2Pivot2 = mock(PivotField.class);
+ FieldStatsInfo level1Pivot1FieldStatsInfo = mock(FieldStatsInfo.class);
+ FieldStatsInfo level1Pivot2FieldStatsInfo = mock(FieldStatsInfo.class);
+ FieldStatsInfo level2Pivot1FieldStatsInfo = mock(FieldStatsInfo.class);
+ FieldStatsInfo level2Pivot2FieldStatsInfo = mock(FieldStatsInfo.class);
+ List<PivotField> level1Pivots = Arrays.asList(level1Pivot1, level1Pivot2);
+ List<PivotField> level2Pivots = Arrays.asList(level2Pivot1, level2Pivot2);
+
+ when(level1Pivot1.getValue()).thenReturn("field1value1");
+ when(level1Pivot1.getCount()).thenReturn(1);
+ when(level1Pivot1FieldStatsInfo.getSum()).thenReturn(1.0);
+ when(level1Pivot1.getFieldStatsInfo()).thenReturn(new HashMap<String, FieldStatsInfo>(){{
+ put("score", level1Pivot1FieldStatsInfo);
+ }});
+ when(level1Pivot2.getValue()).thenReturn("field1value2");
+ when(level1Pivot2.getCount()).thenReturn(2);
+ when(level1Pivot2FieldStatsInfo.getSum()).thenReturn(2.0);
+ when(level1Pivot2.getFieldStatsInfo()).thenReturn(new HashMap<String, FieldStatsInfo>(){{
+ put("score", level1Pivot2FieldStatsInfo);
+ }});
+ when(level2Pivot1.getValue()).thenReturn("field2value1");
+ when(level2Pivot1.getCount()).thenReturn(3);
+ when(level2Pivot1FieldStatsInfo.getSum()).thenReturn(3.0);
+ when(level2Pivot1.getFieldStatsInfo()).thenReturn(new HashMap<String, FieldStatsInfo>(){{
+ put("score", level2Pivot1FieldStatsInfo);
+ }});
+ when(level2Pivot2.getValue()).thenReturn("field2value2");
+ when(level2Pivot2.getCount()).thenReturn(4);
+ when(level2Pivot2FieldStatsInfo.getSum()).thenReturn(4.0);
+ when(level2Pivot2.getFieldStatsInfo()).thenReturn(new HashMap<String, FieldStatsInfo>(){{
+ put("score", level2Pivot2FieldStatsInfo);
+ }});
+ when(level1Pivot1.getPivot()).thenReturn(level2Pivots);
+
+ List<GroupResult> level1GroupResults = solrSearchDao.getGroupResults(groupRequest, 0, level1Pivots);
+
+ assertEquals("field1value1", level1GroupResults.get(0).getKey());
+ assertEquals(1, level1GroupResults.get(0).getTotal());
+ assertEquals(1.0, level1GroupResults.get(0).getScore(), 0.00001);
+ assertEquals("field2", level1GroupResults.get(0).getGroupedBy());
+ assertEquals("field1value2", level1GroupResults.get(1).getKey());
+ assertEquals(2, level1GroupResults.get(1).getTotal());
+ assertEquals(2.0, level1GroupResults.get(1).getScore(), 0.00001);
+ assertEquals("field2", level1GroupResults.get(1).getGroupedBy());
+ assertEquals(0, level1GroupResults.get(1).getGroupResults().size());
+
+ List<GroupResult> level2GroupResults = level1GroupResults.get(0).getGroupResults();
+ assertEquals("field2value2", level2GroupResults.get(0).getKey());
+ assertEquals(4, level2GroupResults.get(0).getTotal());
+ assertEquals(4.0, level2GroupResults.get(0).getScore(), 0.00001);
+ assertNull(level2GroupResults.get(0).getGroupedBy());
+ assertNull(level2GroupResults.get(0).getGroupResults());
+ assertEquals("field2value1", level2GroupResults.get(1).getKey());
+ assertEquals(3, level2GroupResults.get(1).getTotal());
+ assertEquals(3.0, level2GroupResults.get(1).getScore(), 0.00001);
+ assertNull(level2GroupResults.get(1).getGroupedBy());
+ assertNull(level2GroupResults.get(1).getGroupResults());
+ }
+
+ @Test
+ public void toDocumentShouldProperlyReturnDocument() throws Exception {
+ SolrDocument solrDocument = new SolrDocument();
+ solrDocument.addField(SolrDao.VERSION_FIELD, 1.0);
+ solrDocument.addField(Constants.GUID, "guid");
+ solrDocument.addField(Constants.SENSOR_TYPE, "bro");
+ solrDocument.addField("field", "value");
+
+ Document expectedDocument = new Document(new HashMap<String, Object>(){{
+ put("field", "value");
+ put(Constants.GUID, "guid");
+ put(Constants.SENSOR_TYPE, "bro");
+ }}, "guid", "bro", 0L);
+
+ Document actualDocument = solrSearchDao.toDocument(solrDocument);
+ assertEquals(expectedDocument, actualDocument);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/metron/blob/d0a4e4c0/pom.xml
----------------------------------------------------------------------