Repository: metron
Updated Branches:
  refs/heads/master 768a6fada -> 4a089900a


http://git-wip-us.apache.org/repos/asf/metron/blob/4a089900/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/matcher/SearchRequestMatcher.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/matcher/SearchRequestMatcher.java
 
b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/matcher/SearchRequestMatcher.java
deleted file mode 100644
index 417e48b..0000000
--- 
a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/matcher/SearchRequestMatcher.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * 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.elasticsearch.matcher;
-
-import org.apache.metron.indexing.dao.search.SortField;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.Requests;
-import org.elasticsearch.common.bytes.BytesReference;
-import org.elasticsearch.index.query.QueryStringQueryBuilder;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
-import org.elasticsearch.search.sort.FieldSortBuilder;
-import org.elasticsearch.search.sort.SortOrder;
-import org.hamcrest.Description;
-import org.mockito.ArgumentMatcher;
-
-import java.util.Arrays;
-
-public class SearchRequestMatcher extends ArgumentMatcher<SearchRequest> {
-
-  private String[] expectedIndices;
-  private String[] actualIndices;
-
-  private BytesReference expectedSource;
-  private BytesReference actualSource;
-
-  private boolean indicesMatch;
-  private boolean sourcesMatch;
-
-  public SearchRequestMatcher(String[] indices, String query, int size, int 
from, SortField[] sortFields) {
-    expectedIndices = indices;
-    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
-            .size(size)
-            .from(from)
-            .query(new QueryStringQueryBuilder(query))
-            .fetchSource(true)
-            .trackScores(true);
-    for(SortField sortField: sortFields) {
-      FieldSortBuilder fieldSortBuilder = new 
FieldSortBuilder(sortField.getField());
-      fieldSortBuilder.order(sortField.getSortOrder() == 
org.apache.metron.indexing.dao.search.SortOrder.DESC ? SortOrder.DESC : 
SortOrder.ASC);
-      searchSourceBuilder = searchSourceBuilder.sort(fieldSortBuilder);
-    }
-    expectedSource = searchSourceBuilder.buildAsBytes(Requests.CONTENT_TYPE);
-  }
-
-  @Override
-  public boolean matches(Object o) {
-    SearchRequest searchRequest = (SearchRequest) o;
-
-    actualIndices = searchRequest.indices();
-    actualSource = searchRequest.source();
-
-    indicesMatch = Arrays.equals(expectedIndices, actualIndices);
-    sourcesMatch = expectedSource.equals(actualSource);
-
-    return indicesMatch && sourcesMatch;
-  }
-
-  @Override
-  public void describeTo(Description description) {
-    if(!indicesMatch) {
-      description.appendText("Bad search request indices: ");
-      description.appendText(" expected=");
-      description.appendValue(expectedIndices);
-      description.appendText(", got=");
-      description.appendValue(actualIndices);
-      description.appendText("  ");
-    }
-
-    if(!sourcesMatch) {
-      description.appendText("Bad search request sources: ");
-      description.appendText(" expected=");
-      description.appendValue(expectedSource);
-      description.appendText(", got=");
-      description.appendValue(actualSource);
-      description.appendText("  ");
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/metron/blob/4a089900/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/AccessConfig.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/AccessConfig.java
 
b/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/AccessConfig.java
index 4f47a65..c16401e 100644
--- 
a/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/AccessConfig.java
+++ 
b/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/AccessConfig.java
@@ -31,8 +31,7 @@ public class AccessConfig {
   private TableProvider tableProvider = null;
 
   /**
-   * A supplier which will return the current global config.
-   * @return
+   * @return A supplier which will return the current global config.
    */
   public Supplier<Map<String, Object>> getGlobalConfigSupplier() {
     return globalConfigSupplier;
@@ -43,8 +42,7 @@ public class AccessConfig {
   }
 
   /**
-   * The maximum search result.
-   * @return
+   * @return The maximum number of search results.
    */
   public Integer getMaxSearchResults() {
     return maxSearchResults;
@@ -55,8 +53,7 @@ public class AccessConfig {
   }
 
   /**
-   * The maximum search groups.
-   * @return
+   * @return The maximum number of search groups.
    */
   public Integer getMaxSearchGroups() {
     return maxSearchGroups;
@@ -67,8 +64,7 @@ public class AccessConfig {
   }
 
   /**
-   * Get optional settings for initializing indices.
-   * @return
+   * @return Optional settings for initializing indices.
    */
   public Map<String, String> getOptionalSettings() {
     return optionalSettings;
@@ -79,8 +75,7 @@ public class AccessConfig {
   }
 
   /**
-   * Return the table provider to use for NoSql DAOs
-   * @return
+   * @return The table provider to use for NoSql DAOs
    */
   public TableProvider getTableProvider() {
     return tableProvider;
@@ -89,5 +84,4 @@ public class AccessConfig {
   public void setTableProvider(TableProvider tableProvider) {
     this.tableProvider = tableProvider;
   }
-
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/4a089900/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java
 
b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java
index f2108de..002ec28 100644
--- 
a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java
+++ 
b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java
@@ -21,14 +21,34 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ComparisonChain;
 import com.google.common.collect.Iterables;
-import java.util.Map.Entry;
+import com.google.common.collect.Ordering;
 import org.apache.metron.common.Constants;
 import org.apache.metron.common.utils.JSONUtils;
-import org.apache.metron.indexing.dao.search.*;
+import org.apache.metron.indexing.dao.search.FieldType;
+import org.apache.metron.indexing.dao.search.GetRequest;
+import org.apache.metron.indexing.dao.search.Group;
+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.search.SortOrder;
 import org.apache.metron.indexing.dao.update.Document;
 
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.UUID;
 
 public class InMemoryDao implements IndexDao {
   // Map from index to list of documents as JSON strings
@@ -102,13 +122,14 @@ public class InMemoryDao implements IndexDao {
 
   private static class ComparableComparator implements Comparator<Comparable>  
{
     SortOrder order = null;
+
     public ComparableComparator(SortOrder order) {
       this.order = order;
     }
     @Override
     public int compare(Comparable o1, Comparable o2) {
-      int result = ComparisonChain.start().compare(o1, o2).result();
-      return order == SortOrder.ASC?result:-1*result;
+      int result = ComparisonChain.start().compare(o1, o2, 
Ordering.natural().nullsLast()).result();
+      return order == SortOrder.ASC ? result : -1*result;
     }
   }
 

http://git-wip-us.apache.org/repos/asf/metron/blob/4a089900/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java
 
b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java
index 8f32946..4d3ff9b 100644
--- 
a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java
+++ 
b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java
@@ -18,31 +18,31 @@
 package org.apache.metron.indexing.dao;
 
 import com.fasterxml.jackson.core.type.TypeReference;
-import java.util.Iterator;
-import java.util.Optional;
 import org.adrianwalker.multilinestring.Multiline;
 import org.apache.metron.common.utils.JSONUtils;
 import org.apache.metron.indexing.dao.search.FieldType;
 import org.apache.metron.indexing.dao.search.GetRequest;
 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.GroupResult;
 import org.apache.metron.indexing.dao.update.Document;
 import org.apache.metron.integration.InMemoryComponent;
+import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.*;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 public abstract class SearchIntegrationTest {
   /**
@@ -59,8 +59,8 @@ public abstract class SearchIntegrationTest {
 
   /**
    * [
-   * {"source:type": "snort", "ip_src_addr":"192.168.1.6", "ip_src_port": 
8005, "long_field": 10000, "timestamp":6, "latitude": 48.5839, "score": 50.0, 
"is_alert":false, "location_point": "50.0,7.7455", "snort_field": 10, 
"duplicate_name_field": 1, "guid":"snort_1"},
-   * {"source:type": "snort", "ip_src_addr":"192.168.1.1", "ip_src_port": 
8004, "long_field": 10000, "timestamp":7, "latitude": 48.5839, "score": 10.0, 
"is_alert":true, "location_point": "48.5839,7.7455", "snort_field": 20, 
"duplicate_name_field": 2, "guid":"snort_2"},
+   * {"source:type": "snort", "ip_src_addr":"192.168.1.6", "ip_src_port": 
8005, "long_field": 10000, "timestamp":6, "latitude": 48.5839, "score": 50.0, 
"is_alert":false, "location_point": "50.0,7.7455", "snort_field": 10, 
"duplicate_name_field": 1, "guid":"snort_1", "threat:triage:score":"10"},
+   * {"source:type": "snort", "ip_src_addr":"192.168.1.1", "ip_src_port": 
8004, "long_field": 10000, "timestamp":7, "latitude": 48.5839, "score": 10.0, 
"is_alert":true, "location_point": "48.5839,7.7455", "snort_field": 20, 
"duplicate_name_field": 2, "guid":"snort_2", "threat:triage:score":"20"},
    * {"source:type": "snort", "ip_src_addr":"192.168.1.7", "ip_src_port": 
8003, "long_field": 10000, "timestamp":8, "latitude": 48.5839, "score": 20.0, 
"is_alert":false, "location_point": "48.5839,7.7455", "snort_field": 30, 
"duplicate_name_field": 3, "guid":"snort_3"},
    * {"source:type": "snort", "ip_src_addr":"192.168.1.1", "ip_src_port": 
8002, "long_field": 20000, "timestamp":9, "latitude": 48.0001, "score": 50.0, 
"is_alert":true, "location_point": "48.5839,7.7455", "snort_field": 40, 
"duplicate_name_field": 4, "guid":"snort_4"},
    * {"source:type": "snort", "ip_src_addr":"192.168.1.8", "ip_src_port": 
8001, "long_field": 10000, "timestamp":10, "latitude": 48.5839, "score": 10.0, 
"is_alert":false, "location_point": "48.5839,7.7455", "snort_field": 50, 
"duplicate_name_field": 5, "guid":"snort_5"}
@@ -155,6 +155,46 @@ public abstract class SearchIntegrationTest {
 
   /**
    * {
+   *  "indices": [
+   *    "snort",
+   *    "bro"
+   *  ],
+   * "query": "*",
+   * "from": 0,
+   * "size": 25,
+   * "sort": [
+   *    {
+   *      "field": "threat:triage:score",
+   *      "sortOrder": "asc"
+   *    }
+   *  ]
+   * }
+   */
+  @Multiline
+  public static String sortAscendingWithMissingFields;
+
+  /**
+   * {
+   *  "indices": [
+   *    "snort",
+   *    "bro"
+   *  ],
+   * "query": "*",
+   * "from": 0,
+   * "size": 25,
+   * "sort": [
+   *    {
+   *      "field": "threat:triage:score",
+   *      "sortOrder": "desc"
+   *    }
+   *  ]
+   * }
+   */
+  @Multiline
+  public static String sortDescendingWithMissingFields;
+
+  /**
+   * {
    * "indices": ["bro", "snort"],
    * "query": "*",
    * "from": 4,
@@ -407,6 +447,7 @@ public abstract class SearchIntegrationTest {
       SearchResponse response = dao.search(request);
       Assert.assertEquals(10, response.getTotal());
       List<SearchResult> results = response.getResults();
+      Assert.assertEquals(10, results.size());
       for(int i = 0;i < 5;++i) {
         Assert.assertEquals("snort", 
results.get(i).getSource().get("source:type"));
         Assert.assertEquals(10-i, results.get(i).getSource().get("timestamp"));
@@ -461,6 +502,50 @@ public abstract class SearchIntegrationTest {
         Assert.assertEquals(i, 
results.get(i-8001).getSource().get("ip_src_port"));
       }
     }
+    //Sort descending with missing fields
+    {
+      SearchRequest request = 
JSONUtils.INSTANCE.load(sortDescendingWithMissingFields, SearchRequest.class);
+      SearchResponse response = dao.search(request);
+      Assert.assertEquals(10, response.getTotal());
+      List<SearchResult> results = response.getResults();
+      Assert.assertEquals(10, results.size());
+
+      // validate sorted order - there are only 2 with a 'threat:triage:score'
+      Assert.assertEquals("20", 
results.get(0).getSource().get("threat:triage:score"));
+      Assert.assertEquals("10", 
results.get(1).getSource().get("threat:triage:score"));
+
+      // the remaining are missing the 'threat:triage:score' and should be 
sorted last
+      
Assert.assertFalse(results.get(2).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(3).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(4).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(5).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(6).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(7).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(8).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(9).getSource().containsKey("threat:triage:score"));
+    }
+    //Sort ascending with missing fields
+    {
+      SearchRequest request = 
JSONUtils.INSTANCE.load(sortAscendingWithMissingFields, SearchRequest.class);
+      SearchResponse response = dao.search(request);
+      Assert.assertEquals(10, response.getTotal());
+      List<SearchResult> results = response.getResults();
+      Assert.assertEquals(10, results.size());
+
+      // the remaining are missing the 'threat:triage:score' and should be 
sorted last
+      
Assert.assertFalse(results.get(0).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(1).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(2).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(3).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(4).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(5).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(6).getSource().containsKey("threat:triage:score"));
+      
Assert.assertFalse(results.get(7).getSource().containsKey("threat:triage:score"));
+
+      // validate sorted order - there are only 2 with a 'threat:triage:score'
+      Assert.assertEquals("10", 
results.get(8).getSource().get("threat:triage:score"));
+      Assert.assertEquals("20", 
results.get(9).getSource().get("threat:triage:score"));
+    }
     //pagination test case
     {
       SearchRequest request = JSONUtils.INSTANCE.load(paginationQuery, 
SearchRequest.class);
@@ -490,13 +575,18 @@ public abstract class SearchIntegrationTest {
     {
       SearchRequest request = JSONUtils.INSTANCE.load(facetQuery, 
SearchRequest.class);
       SearchResponse response = dao.search(request);
-      Assert.assertEquals(10, response.getTotal());
+      Assert.assertEquals(12, response.getTotal());
+
       Map<String, Map<String, Long>> facetCounts = response.getFacetCounts();
       Assert.assertEquals(8, facetCounts.size());
+
+      // source:type
       Map<String, Long> sourceTypeCounts = facetCounts.get("source:type");
       Assert.assertEquals(2, sourceTypeCounts.size());
       Assert.assertEquals(new Long(5), sourceTypeCounts.get("bro"));
       Assert.assertEquals(new Long(5), sourceTypeCounts.get("snort"));
+
+      // ip_src_addr
       Map<String, Long> ipSrcAddrCounts = facetCounts.get("ip_src_addr");
       Assert.assertEquals(8, ipSrcAddrCounts.size());
       Assert.assertEquals(new Long(3), ipSrcAddrCounts.get("192.168.1.1"));
@@ -507,6 +597,8 @@ public abstract class SearchIntegrationTest {
       Assert.assertEquals(new Long(1), ipSrcAddrCounts.get("192.168.1.6"));
       Assert.assertEquals(new Long(1), ipSrcAddrCounts.get("192.168.1.7"));
       Assert.assertEquals(new Long(1), ipSrcAddrCounts.get("192.168.1.8"));
+
+      // ip_src_port
       Map<String, Long> ipSrcPortCounts = facetCounts.get("ip_src_port");
       Assert.assertEquals(10, ipSrcPortCounts.size());
       Assert.assertEquals(new Long(1), ipSrcPortCounts.get("8001"));
@@ -519,10 +611,14 @@ public abstract class SearchIntegrationTest {
       Assert.assertEquals(new Long(1), ipSrcPortCounts.get("8008"));
       Assert.assertEquals(new Long(1), ipSrcPortCounts.get("8009"));
       Assert.assertEquals(new Long(1), ipSrcPortCounts.get("8010"));
+
+      // long_field
       Map<String, Long> longFieldCounts = facetCounts.get("long_field");
       Assert.assertEquals(2, longFieldCounts.size());
       Assert.assertEquals(new Long(8), longFieldCounts.get("10000"));
       Assert.assertEquals(new Long(2), longFieldCounts.get("20000"));
+
+      // timestamp
       Map<String, Long> timestampCounts = facetCounts.get("timestamp");
       Assert.assertEquals(10, timestampCounts.size());
       Assert.assertEquals(new Long(1), timestampCounts.get("1"));
@@ -535,6 +631,8 @@ public abstract class SearchIntegrationTest {
       Assert.assertEquals(new Long(1), timestampCounts.get("8"));
       Assert.assertEquals(new Long(1), timestampCounts.get("9"));
       Assert.assertEquals(new Long(1), timestampCounts.get("10"));
+
+      // latitude
       Map<String, Long> latitudeCounts = facetCounts.get("latitude");
       Assert.assertEquals(2, latitudeCounts.size());
       List<String> latitudeKeys = new ArrayList<>(latitudeCounts.keySet());
@@ -543,6 +641,8 @@ public abstract class SearchIntegrationTest {
       Assert.assertEquals(48.5839, Double.parseDouble(latitudeKeys.get(1)), 
0.00001);
       Assert.assertEquals(new Long(2), 
latitudeCounts.get(latitudeKeys.get(0)));
       Assert.assertEquals(new Long(8), 
latitudeCounts.get(latitudeKeys.get(1)));
+
+      // score
       Map<String, Long> scoreFieldCounts = facetCounts.get("score");
       Assert.assertEquals(4, scoreFieldCounts.size());
       List<String> scoreFieldKeys = new ArrayList<>(scoreFieldCounts.keySet());
@@ -555,6 +655,8 @@ public abstract class SearchIntegrationTest {
       Assert.assertEquals(new Long(2), 
scoreFieldCounts.get(scoreFieldKeys.get(1)));
       Assert.assertEquals(new Long(3), 
scoreFieldCounts.get(scoreFieldKeys.get(2)));
       Assert.assertEquals(new Long(1), 
scoreFieldCounts.get(scoreFieldKeys.get(3)));
+
+      // is_alert
       Map<String, Long> isAlertCounts = facetCounts.get("is_alert");
       Assert.assertEquals(2, isAlertCounts.size());
       Assert.assertEquals(new Long(6), isAlertCounts.get("true"));
@@ -568,7 +670,7 @@ public abstract class SearchIntegrationTest {
         Assert.fail("Exception expected, but did not come.");
       }
       catch(InvalidSearchException ise) {
-        Assert.assertEquals("Could not execute search", ise.getMessage());
+        // success
       }
     }
     //Disabled facet query
@@ -591,7 +693,7 @@ public abstract class SearchIntegrationTest {
     // getColumnMetadata with multiple indices
     {
       Map<String, FieldType> fieldTypes = 
dao.getColumnMetadata(Arrays.asList("bro", "snort"));
-      Assert.assertEquals(13, fieldTypes.size());
+      Assert.assertEquals(15, fieldTypes.size());
       Assert.assertEquals(FieldType.STRING, fieldTypes.get("guid"));
       Assert.assertEquals(FieldType.STRING, fieldTypes.get("source:type"));
       Assert.assertEquals(FieldType.IP, fieldTypes.get("ip_src_addr"));
@@ -605,25 +707,51 @@ public abstract class SearchIntegrationTest {
       Assert.assertEquals(FieldType.STRING, fieldTypes.get("bro_field"));
       Assert.assertEquals(FieldType.INTEGER, fieldTypes.get("snort_field"));
       Assert.assertEquals(FieldType.OTHER, 
fieldTypes.get("duplicate_name_field"));
+      Assert.assertEquals(FieldType.FLOAT, 
fieldTypes.get("threat:triage:score"));
+      Assert.assertEquals(FieldType.OTHER, fieldTypes.get("alert"));
     }
     // getColumnMetadata with only bro
     {
       Map<String, FieldType> fieldTypes = 
dao.getColumnMetadata(Collections.singletonList("bro"));
-      Assert.assertEquals(12, fieldTypes.size());
+      Assert.assertEquals(13, fieldTypes.size());
+      Assert.assertEquals(FieldType.STRING, fieldTypes.get("guid"));
+      Assert.assertEquals(FieldType.STRING, fieldTypes.get("source:type"));
+      Assert.assertEquals(FieldType.IP, fieldTypes.get("ip_src_addr"));
+      Assert.assertEquals(FieldType.INTEGER, fieldTypes.get("ip_src_port"));
+      Assert.assertEquals(FieldType.LONG, fieldTypes.get("long_field"));
+      Assert.assertEquals(FieldType.DATE, fieldTypes.get("timestamp"));
+      Assert.assertEquals(FieldType.FLOAT, fieldTypes.get("latitude"));
+      Assert.assertEquals(FieldType.DOUBLE, fieldTypes.get("score"));
+      Assert.assertEquals(FieldType.BOOLEAN, fieldTypes.get("is_alert"));
+      Assert.assertEquals(FieldType.OTHER, fieldTypes.get("location_point"));
       Assert.assertEquals(FieldType.STRING, fieldTypes.get("bro_field"));
+      Assert.assertEquals(FieldType.STRING, 
fieldTypes.get("duplicate_name_field"));
+      Assert.assertEquals(FieldType.OTHER, fieldTypes.get("alert"));
     }
     // getColumnMetadata with only snort
     {
       Map<String, FieldType> fieldTypes = 
dao.getColumnMetadata(Collections.singletonList("snort"));
-      Assert.assertEquals(12, fieldTypes.size());
+      Assert.assertEquals(14, fieldTypes.size());
       Assert.assertEquals(FieldType.INTEGER, fieldTypes.get("snort_field"));
+      Assert.assertEquals(FieldType.STRING, fieldTypes.get("guid"));
+      Assert.assertEquals(FieldType.STRING, fieldTypes.get("source:type"));
+      Assert.assertEquals(FieldType.IP, fieldTypes.get("ip_src_addr"));
+      Assert.assertEquals(FieldType.INTEGER, fieldTypes.get("ip_src_port"));
+      Assert.assertEquals(FieldType.LONG, fieldTypes.get("long_field"));
+      Assert.assertEquals(FieldType.DATE, fieldTypes.get("timestamp"));
+      Assert.assertEquals(FieldType.FLOAT, fieldTypes.get("latitude"));
+      Assert.assertEquals(FieldType.DOUBLE, fieldTypes.get("score"));
+      Assert.assertEquals(FieldType.BOOLEAN, fieldTypes.get("is_alert"));
+      Assert.assertEquals(FieldType.OTHER, fieldTypes.get("location_point"));
+      Assert.assertEquals(FieldType.INTEGER, 
fieldTypes.get("duplicate_name_field"));
+      Assert.assertEquals(FieldType.OTHER, fieldTypes.get("alert"));
     }
     // getColumnMetadata with an index that doesn't exist
     {
       Map<String, FieldType> fieldTypes = 
dao.getColumnMetadata(Collections.singletonList("someindex"));
       Assert.assertEquals(0, fieldTypes.size());
     }
-    //Fields query
+     //Fields query
     {
       SearchRequest request = JSONUtils.INSTANCE.load(fieldsQuery, 
SearchRequest.class);
       SearchResponse response = dao.search(request);
@@ -793,7 +921,7 @@ public abstract class SearchIntegrationTest {
         Assert.fail("Exception expected, but did not come.");
       }
       catch(InvalidSearchException ise) {
-        Assert.assertEquals("Could not execute search", ise.getMessage());
+        // success
       }
     }
     //Group by IP query

Reply via email to