METRON-379 Stellar - No Error When Adding Variables That Do Not Exist 
(ottobackwards) closes apache/metron#675


Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/c08cd07f
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/c08cd07f
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/c08cd07f

Branch: refs/heads/master
Commit: c08cd07f36cd9bf2608a586a209bf809130a069a
Parents: b2375a1
Author: ottobackwards <[email protected]>
Authored: Thu Aug 3 10:24:42 2017 -0400
Committer: otto <[email protected]>
Committed: Thu Aug 3 10:24:42 2017 -0400

----------------------------------------------------------------------
 .../client/stellar/WindowLookbackTest.java      |   5 +-
 .../metron/statistics/BinFunctionsTest.java     |   3 +-
 .../StellarStatisticsFunctionsTest.java         |   3 +-
 .../outlier/MedianAbsoluteDeviationTest.java    |   3 +-
 .../stellar/GeoEnrichmentFunctionsTest.java     |   3 +-
 .../SimpleHBaseEnrichmentFunctionsTest.java     |   3 +-
 .../EnrichmentConfigFunctionsTest.java          |   3 +-
 .../management/IndexingConfigFunctionsTest.java |  18 +-
 .../KafkaFunctionsIntegrationTest.java          |   3 +-
 .../management/ParserConfigFunctionsTest.java   |   6 +-
 .../metron/management/ShellFunctionsTest.java   |   4 +-
 .../management/ThreatTriageFunctionsTest.java   |   8 +-
 .../metron/pcap/filter/PcapFieldResolver.java   |   5 +
 .../stellar/common/BaseStellarProcessor.java    |  19 +-
 .../metron/stellar/common/LambdaExpression.java |   5 +-
 .../metron/stellar/common/StellarCompiler.java  |   8 +-
 .../common/utils/StellarProcessorUtils.java     |  12 +-
 .../org/apache/metron/stellar/dsl/Context.java  |  17 ++
 .../stellar/dsl/DefaultVariableResolver.java    |  44 ++++
 .../metron/stellar/dsl/MapVariableResolver.java |  13 +-
 .../metron/stellar/dsl/VariableResolver.java    |   2 +
 ...larComparisonExpressionWithOperatorTest.java | 234 +++++++++---------
 .../shell/StellarShellOptionsValidatorTest.java |  68 +++---
 .../stellar/common/utils/BloomFilterTest.java   |  10 +-
 .../stellar/dsl/functions/BasicStellarTest.java | 235 +++++++++++--------
 .../dsl/functions/DateFunctionsTest.java        |  39 ++-
 .../dsl/functions/EncodingFunctionsTest.java    |  21 +-
 .../dsl/functions/FunctionalFunctionsTest.java  |  30 ++-
 .../dsl/functions/MathFunctionsTest.java        |   5 +-
 .../dsl/functions/RegExFunctionsTest.java       |  21 +-
 .../dsl/functions/StringFunctionsTest.java      |  44 +++-
 31 files changed, 569 insertions(+), 325 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-analytics/metron-profiler-client/src/test/java/org/apache/metron/profiler/client/stellar/WindowLookbackTest.java
----------------------------------------------------------------------
diff --git 
a/metron-analytics/metron-profiler-client/src/test/java/org/apache/metron/profiler/client/stellar/WindowLookbackTest.java
 
b/metron-analytics/metron-profiler-client/src/test/java/org/apache/metron/profiler/client/stellar/WindowLookbackTest.java
index 41d2074..fd6d122 100644
--- 
a/metron-analytics/metron-profiler-client/src/test/java/org/apache/metron/profiler/client/stellar/WindowLookbackTest.java
+++ 
b/metron-analytics/metron-profiler-client/src/test/java/org/apache/metron/profiler/client/stellar/WindowLookbackTest.java
@@ -22,6 +22,7 @@ package org.apache.metron.profiler.client.stellar;
 import com.google.common.collect.ImmutableMap;
 import org.apache.commons.lang3.Range;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.ParseException;
 import org.apache.metron.stellar.dsl.functions.resolver.FunctionResolver;
 import org.apache.metron.stellar.dsl.functions.resolver.SimpleFunctionResolver;
@@ -71,7 +72,7 @@ public class WindowLookbackTest {
     Map<String, Object> variables = new HashMap<>();
     StellarProcessor stellar = new StellarProcessor();
     List<ProfilePeriod> periods = (List<ProfilePeriod>)stellar.parse( 
stellarStatement
-                                                                    , k -> 
variables.get(k)
+                                                                    , new 
DefaultVariableResolver(k -> variables.get(k),k -> variables.containsKey(k))
                                                                     , resolver
                                                                     , context
                                                                     );
@@ -135,7 +136,7 @@ public class WindowLookbackTest {
     }
     StellarProcessor stellar = new StellarProcessor();
     List<ProfilePeriod> periods = (List<ProfilePeriod>)stellar.parse( 
stellarStatement
-                                                                    , k -> 
variables.get(k)
+                                                                    , new 
DefaultVariableResolver(k -> variables.get(k),k -> variables.containsKey(k))
                                                                     , resolver
                                                                     , context
                                                                     );

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/BinFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/BinFunctionsTest.java
 
b/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/BinFunctionsTest.java
index 97c3959..978b164 100644
--- 
a/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/BinFunctionsTest.java
+++ 
b/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/BinFunctionsTest.java
@@ -22,6 +22,7 @@ package org.apache.metron.statistics;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.apache.metron.stellar.common.StellarProcessor;
 import org.junit.Assert;
@@ -34,7 +35,7 @@ public class BinFunctionsTest {
     Context context = Context.EMPTY_CONTEXT();
     StellarProcessor processor = new StellarProcessor();
     Assert.assertTrue(rule + " not valid.", processor.validate(rule, context));
-    return processor.parse(rule, x -> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), context);
+    return processor.parse(rule, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), context);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/StellarStatisticsFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/StellarStatisticsFunctionsTest.java
 
b/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/StellarStatisticsFunctionsTest.java
index bbedeca..42b57bd 100644
--- 
a/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/StellarStatisticsFunctionsTest.java
+++ 
b/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/StellarStatisticsFunctionsTest.java
@@ -27,6 +27,7 @@ import org.apache.commons.math3.random.MersenneTwister;
 import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.apache.metron.stellar.common.StellarProcessor;
 import org.apache.metron.common.utils.SerDeUtils;
@@ -104,7 +105,7 @@ public class StellarStatisticsFunctionsTest {
    */
   private static Object run(String expr, Map<String, Object> variables) {
     StellarProcessor processor = new StellarProcessor();
-    Object ret = processor.parse(expr, x-> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), Context.EMPTY_CONTEXT());
+    Object ret = processor.parse(expr, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), Context.EMPTY_CONTEXT());
     byte[] raw = SerDeUtils.toBytes(ret);
     Object actual = SerDeUtils.fromBytes(raw, Object.class);
     if(ret instanceof StatisticsProvider) {

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/outlier/MedianAbsoluteDeviationTest.java
----------------------------------------------------------------------
diff --git 
a/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/outlier/MedianAbsoluteDeviationTest.java
 
b/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/outlier/MedianAbsoluteDeviationTest.java
index 2676d55..9390b7a 100644
--- 
a/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/outlier/MedianAbsoluteDeviationTest.java
+++ 
b/metron-analytics/metron-statistics/src/test/java/org/apache/metron/statistics/outlier/MedianAbsoluteDeviationTest.java
@@ -25,6 +25,7 @@ import 
org.apache.commons.math3.random.GaussianRandomGenerator;
 import org.apache.commons.math3.random.MersenneTwister;
 import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.apache.metron.stellar.common.StellarProcessor;
 import org.apache.metron.common.utils.SerDeUtils;
@@ -40,7 +41,7 @@ public class MedianAbsoluteDeviationTest {
     Context context = Context.EMPTY_CONTEXT();
     StellarProcessor processor = new StellarProcessor();
     Assert.assertTrue(rule + " not valid.", processor.validate(rule, context));
-    return processor.parse(rule, x -> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), context);
+    return processor.parse(rule, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), context);
   }
 
   private void assertScoreEquals(MedianAbsoluteDeviationFunctions.State 
currentState, MedianAbsoluteDeviationFunctions.State clonedState, double value) 
{

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/GeoEnrichmentFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/GeoEnrichmentFunctionsTest.java
 
b/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/GeoEnrichmentFunctionsTest.java
index 8619b9f..2c0e8f1 100644
--- 
a/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/GeoEnrichmentFunctionsTest.java
+++ 
b/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/GeoEnrichmentFunctionsTest.java
@@ -21,6 +21,7 @@ package org.apache.metron.enrichment.stellar;
 import com.google.common.collect.ImmutableMap;
 import org.adrianwalker.multilinestring.Multiline;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.apache.metron.stellar.common.StellarProcessor;
 import org.apache.metron.enrichment.adapters.geo.GeoLiteDatabase;
@@ -93,7 +94,7 @@ public class GeoEnrichmentFunctionsTest {
   public Object run(String rule, Map<String, Object> variables) throws 
Exception {
     StellarProcessor processor = new StellarProcessor();
     Assert.assertTrue(rule + " not valid.", processor.validate(rule, context));
-    return processor.parse(rule, x -> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), context);
+    return processor.parse(rule, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), context);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/SimpleHBaseEnrichmentFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/SimpleHBaseEnrichmentFunctionsTest.java
 
b/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/SimpleHBaseEnrichmentFunctionsTest.java
index 7ed0320..d0d41f7 100644
--- 
a/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/SimpleHBaseEnrichmentFunctionsTest.java
+++ 
b/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/stellar/SimpleHBaseEnrichmentFunctionsTest.java
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableMap;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.HTableInterface;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.ParseException;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.apache.metron.stellar.common.StellarProcessor;
@@ -79,7 +80,7 @@ public class SimpleHBaseEnrichmentFunctionsTest {
   public Object run(String rule, Map<String, Object> variables) throws 
Exception {
     StellarProcessor processor = new StellarProcessor();
     Assert.assertTrue(rule + " not valid.", processor.validate(rule, context));
-    return processor.parse(rule, x -> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), context);
+    return processor.parse(rule, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), context);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-management/src/test/java/org/apache/metron/management/EnrichmentConfigFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/EnrichmentConfigFunctionsTest.java
 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/EnrichmentConfigFunctionsTest.java
index d7dd8f5..51a24b3 100644
--- 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/EnrichmentConfigFunctionsTest.java
+++ 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/EnrichmentConfigFunctionsTest.java
@@ -25,6 +25,7 @@ import org.apache.metron.common.utils.JSONUtils;
 import org.apache.metron.stellar.common.StellarProcessor;
 import org.apache.metron.stellar.common.shell.StellarExecutor;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.junit.Assert;
 import org.junit.Before;
@@ -135,7 +136,7 @@ public class EnrichmentConfigFunctionsTest {
 
   private Object run(String rule, Map<String, Object> variables) {
     StellarProcessor processor = new StellarProcessor();
-    return processor.parse(rule, x -> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), context);
+    return processor.parse(rule, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), context);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-management/src/test/java/org/apache/metron/management/IndexingConfigFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/IndexingConfigFunctionsTest.java
 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/IndexingConfigFunctionsTest.java
index f43a79c..bfed827 100644
--- 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/IndexingConfigFunctionsTest.java
+++ 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/IndexingConfigFunctionsTest.java
@@ -20,6 +20,7 @@ package org.apache.metron.management;
 import com.google.common.collect.ImmutableMap;
 import org.apache.metron.common.configuration.IndexingConfigurations;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.apache.metron.stellar.common.StellarProcessor;
 import org.apache.metron.stellar.common.shell.StellarExecutor;
@@ -40,7 +41,7 @@ public class IndexingConfigFunctionsTest {
 
   private Object run(String rule, Map<String, Object> variables) {
     StellarProcessor processor = new StellarProcessor();
-    return processor.parse(rule, x -> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), context);
+    return processor.parse(rule, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), context);
   }
 
   @Before
@@ -66,8 +67,11 @@ public class IndexingConfigFunctionsTest {
 
   @Test(expected=IllegalStateException.class)
   public void testSetBatchBad() {
+    Map<String,Object> variables = new HashMap<String,Object>(){{
+      put("config",null);
+    }};
     run("INDEXING_SET_BATCH(config, 'hdfs', 10)"
-                             , new HashMap<>()
+                             , variables
     );
   }
 
@@ -82,8 +86,11 @@ public class IndexingConfigFunctionsTest {
 
   @Test(expected=IllegalStateException.class)
   public void testSetEnabledBad() {
+    Map<String,Object> variables = new HashMap<String,Object>(){{
+      put("config",null);
+    }};
     run("INDEXING_SET_ENABLED(config, 'hdfs', 10)"
-                             , new HashMap<>()
+                             , variables
     );
   }
 
@@ -98,8 +105,11 @@ public class IndexingConfigFunctionsTest {
 
   @Test(expected= IllegalStateException.class)
   public void testSetIndexBad() {
+    Map<String,Object> variables = new HashMap<String,Object>(){{
+      put("config",null);
+    }};
     run("INDEXING_SET_INDEX(config, 'hdfs', NULL)"
-            , new HashMap<>()
+            , variables
     );
   }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-management/src/test/java/org/apache/metron/management/KafkaFunctionsIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/KafkaFunctionsIntegrationTest.java
 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/KafkaFunctionsIntegrationTest.java
index e639c63..7a42d8b 100644
--- 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/KafkaFunctionsIntegrationTest.java
+++ 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/KafkaFunctionsIntegrationTest.java
@@ -19,6 +19,7 @@
 package org.apache.metron.management;
 
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.functions.resolver.FunctionResolver;
 import org.apache.metron.stellar.dsl.functions.resolver.SimpleFunctionResolver;
 import org.apache.metron.stellar.common.StellarProcessor;
@@ -198,7 +199,7 @@ public class KafkaFunctionsIntegrationTest extends 
BaseIntegrationTest {
             .withClass(KafkaFunctions.KafkaTail.class);
 
     StellarProcessor processor = new StellarProcessor();
-    return processor.parse(expr, x -> variables.get(x), functionResolver, 
context);
+    return processor.parse(expr, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), functionResolver, context);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-management/src/test/java/org/apache/metron/management/ParserConfigFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/ParserConfigFunctionsTest.java
 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/ParserConfigFunctionsTest.java
index 1f59ae0..f830e62 100644
--- 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/ParserConfigFunctionsTest.java
+++ 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/ParserConfigFunctionsTest.java
@@ -173,8 +173,10 @@ public class ParserConfigFunctionsTest {
 
   @Test
   public void testPrintNull() {
-
-    String out = (String) run("PARSER_STELLAR_TRANSFORM_PRINT(config )", new 
HashMap<>(), context);
+    Map<String,Object> variables = new HashMap<String,Object>(){{
+      put("config",null);
+    }};
+    String out = (String) run("PARSER_STELLAR_TRANSFORM_PRINT(config )", 
variables, context);
     Assert.assertNull( out);
   }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-management/src/test/java/org/apache/metron/management/ShellFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/ShellFunctionsTest.java
 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/ShellFunctionsTest.java
index 0f334ee..401454e 100644
--- 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/ShellFunctionsTest.java
+++ 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/ShellFunctionsTest.java
@@ -111,7 +111,9 @@ public class ShellFunctionsTest {
 
   @Test
   public void testMap2TableNullInput() {
-    Map<String, Object> variables = new HashMap<>();
+    Map<String,Object> variables = new HashMap<String,Object>(){{
+      put("map_field",null);
+    }};
     Context context = Context.EMPTY_CONTEXT();
     Object out = run("SHELL_MAP2TABLE(map_field)", variables, context);
     Assert.assertEquals(expectedMap2TableNullInput, out);

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-management/src/test/java/org/apache/metron/management/ThreatTriageFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/ThreatTriageFunctionsTest.java
 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/ThreatTriageFunctionsTest.java
index b5593b0..bb8d64b 100644
--- 
a/metron-platform/metron-management/src/test/java/org/apache/metron/management/ThreatTriageFunctionsTest.java
+++ 
b/metron-platform/metron-management/src/test/java/org/apache/metron/management/ThreatTriageFunctionsTest.java
@@ -22,6 +22,7 @@ import org.adrianwalker.multilinestring.Multiline;
 import 
org.apache.metron.common.configuration.enrichment.SensorEnrichmentConfig;
 import 
org.apache.metron.common.configuration.enrichment.threatintel.RiskLevelRule;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.apache.metron.stellar.common.StellarProcessor;
 import org.apache.metron.stellar.common.shell.StellarExecutor;
@@ -62,7 +63,7 @@ public class ThreatTriageFunctionsTest {
 
   private Object run(String rule, Map<String, Object> variables) {
     StellarProcessor processor = new StellarProcessor();
-    return processor.parse(rule, x -> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), context);
+    return processor.parse(rule, new DefaultVariableResolver(x -> 
variables.get(x),x -> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), context);
   }
 
   @Test
@@ -268,9 +269,12 @@ Aggregation: MAX*/
 
   @Test
   public void testPrintNull() {
+    Map<String,Object> variables = new HashMap<String,Object>(){{
+      put("config",null);
+    }};
     String out = (String) run(
             "THREAT_TRIAGE_PRINT(config)"
-            , new HashMap<>()
+            , variables
     );
     Assert.assertEquals(out, testPrintEmptyExpected);
   }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-platform/metron-pcap/src/main/java/org/apache/metron/pcap/filter/PcapFieldResolver.java
----------------------------------------------------------------------
diff --git 
a/metron-platform/metron-pcap/src/main/java/org/apache/metron/pcap/filter/PcapFieldResolver.java
 
b/metron-platform/metron-pcap/src/main/java/org/apache/metron/pcap/filter/PcapFieldResolver.java
index b32cdbc..4ea6836 100644
--- 
a/metron-platform/metron-pcap/src/main/java/org/apache/metron/pcap/filter/PcapFieldResolver.java
+++ 
b/metron-platform/metron-pcap/src/main/java/org/apache/metron/pcap/filter/PcapFieldResolver.java
@@ -35,4 +35,9 @@ public class PcapFieldResolver implements VariableResolver {
     return fieldsMap.get(variable);
   }
 
+  @Override
+  public boolean exists(String variable) {
+    return fieldsMap.containsKey(variable);
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/BaseStellarProcessor.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/BaseStellarProcessor.java
 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/BaseStellarProcessor.java
index 323c9d1..922feb7 100644
--- 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/BaseStellarProcessor.java
+++ 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/BaseStellarProcessor.java
@@ -31,6 +31,8 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.Context.ActivityType;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.ErrorListener;
 import org.apache.metron.stellar.dsl.ParseException;
 import org.apache.metron.stellar.dsl.StellarFunctions;
@@ -137,12 +139,21 @@ public class BaseStellarProcessor<T> {
     if (rule == null || isEmpty(rule.trim())) {
       return null;
     }
+    if(context.getActivityType() == null) {
+      context.setActivityType(ActivityType.PARSE_ACTIVITY);
+    }
     try {
       expression = expressionCache.get(rule, () -> compile(rule));
     } catch (ExecutionException|UncheckedExecutionException e) {
       throw new ParseException("Unable to parse: " + rule + " due to: " + 
e.getMessage(), e);
     }
-    return clazz.cast(expression.apply(new 
StellarCompiler.ExpressionState(context, functionResolver, variableResolver)));
+    try {
+      return clazz.cast(expression
+          .apply(new StellarCompiler.ExpressionState(context, 
functionResolver, variableResolver)));
+    }finally {
+        // always reset the activity type
+        context.setActivityType(null);
+    }
   }
 
   /**
@@ -219,8 +230,11 @@ public class BaseStellarProcessor<T> {
       return true;
     }
 
+    // set the context to validation
+    // it will be reset in parse()
+    context.setActivityType(ActivityType.VALIDATION_ACTIVITY);
     try {
-      parse(rule, x -> null, StellarFunctions.FUNCTION_RESOLVER(), context);
+      parse(rule, DefaultVariableResolver.NULL_RESOLVER(), 
StellarFunctions.FUNCTION_RESOLVER(), context);
     } catch (Throwable t) {
       if (throwException) {
         throw new ParseException("Unable to parse " + rule + ": " + 
t.getMessage(), t);
@@ -228,7 +242,6 @@ public class BaseStellarProcessor<T> {
         return false;
       }
     }
-
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/LambdaExpression.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/LambdaExpression.java
 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/LambdaExpression.java
index 06171fa..4f6570e 100644
--- 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/LambdaExpression.java
+++ 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/LambdaExpression.java
@@ -18,6 +18,7 @@
 
 package org.apache.metron.stellar.common;
 
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.Token;
 import org.apache.metron.stellar.dsl.VariableResolver;
 
@@ -56,9 +57,9 @@ public class LambdaExpression extends 
StellarCompiler.Expression {
       lambdaVariables.put(variables.get(i), null);
     }
 
-    VariableResolver variableResolver = variable -> 
lambdaVariables.getOrDefault(variable
+    VariableResolver variableResolver = new DefaultVariableResolver(variable 
-> lambdaVariables.getOrDefault(variable
                                                                                
 , state.variableResolver.resolve(variable)
-                                                                               
 );
+                                                                               
 ), variable -> true);
     StellarCompiler.ExpressionState localState = new 
StellarCompiler.ExpressionState(
             state.context
           , state.functionResolver

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/StellarCompiler.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/StellarCompiler.java
 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/StellarCompiler.java
index fb3da9f..a8bc773 100644
--- 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/StellarCompiler.java
+++ 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/StellarCompiler.java
@@ -19,6 +19,7 @@ package org.apache.metron.stellar.common;
 
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.Context.ActivityType;
 import org.apache.metron.stellar.dsl.Token;
 import org.apache.metron.stellar.dsl.VariableResolver;
 import org.apache.metron.stellar.dsl.functions.resolver.FunctionResolver;
@@ -352,7 +353,12 @@ public class StellarCompiler extends StellarBaseListener {
   public void exitVariable(StellarParser.VariableContext ctx) {
     final FrameContext.Context context = getArgContext();
     expression.tokenDeque.push(new Token<>( (tokenDeque, state) -> {
-      tokenDeque.push(new 
Token<>(state.variableResolver.resolve(ctx.getText()), Object.class, context));
+      String varName = ctx.getText();
+      if(state.context.getActivityType().equals(ActivityType.PARSE_ACTIVITY) 
&& !state.variableResolver.exists(varName)) {
+        // when parsing, missing variables are an error!
+        throw new ParseException(String.format("variable: %s is not 
defined",varName));
+      }
+      tokenDeque.push(new Token<>(state.variableResolver.resolve(varName), 
Object.class, context));
     }, DeferredFunction.class, context));
     expression.variablesUsed.add(ctx.getText());
   }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/StellarProcessorUtils.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/StellarProcessorUtils.java
 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/StellarProcessorUtils.java
index cc19b5f..0fd89e6 100644
--- 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/StellarProcessorUtils.java
+++ 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/StellarProcessorUtils.java
@@ -19,6 +19,7 @@
 package org.apache.metron.stellar.common.utils;
 
 import org.apache.metron.stellar.dsl.Context;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.MapVariableResolver;
 import org.apache.metron.stellar.dsl.StellarFunctions;
 import org.apache.metron.stellar.dsl.VariableResolver;
@@ -57,7 +58,7 @@ public class StellarProcessorUtils {
     public static Object run(String rule, Map<String, Object> variables, 
Context context) {
         StellarProcessor processor = new StellarProcessor();
         Assert.assertTrue(rule + " not valid.", processor.validate(rule, 
context));
-        Object ret = processor.parse(rule, x -> variables.get(x), 
StellarFunctions.FUNCTION_RESOLVER(), context);
+        Object ret = processor.parse(rule, new DefaultVariableResolver(x -> 
variables.get(x),x-> variables.containsKey(x)), 
StellarFunctions.FUNCTION_RESOLVER(), context);
         byte[] raw = SerDeUtils.toBytes(ret);
         Object actual = SerDeUtils.fromBytes(raw, Object.class);
         Assert.assertEquals(ret, actual);
@@ -68,6 +69,15 @@ public class StellarProcessorUtils {
     return run(rule, variables, Context.EMPTY_CONTEXT());
   }
 
+  public static void validate(String rule, Context context) {
+    StellarProcessor processor = new StellarProcessor();
+    Assert.assertTrue(rule + " not valid.", processor.validate(rule, context));
+  }
+
+  public static void validate(String rule) {
+    validate(rule, Context.EMPTY_CONTEXT());
+  }
+
   public static boolean runPredicate(String rule, Map resolver) {
     return runPredicate(rule, resolver, Context.EMPTY_CONTEXT());
   }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/Context.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/Context.java
 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/Context.java
index 26d338b..3dbcc82 100644
--- 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/Context.java
+++ 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/Context.java
@@ -36,6 +36,14 @@ public class Context implements Serializable {
     , STELLAR_CONFIG
   }
 
+  public enum ActivityType {
+    VALIDATION_ACTIVITY,
+    PARSE_ACTIVITY
+  }
+
+  private static ThreadLocal<ActivityType> _activityType = 
ThreadLocal.withInitial(() ->
+      null);
+
   public static class Builder {
 
     private Map<String, Capability> capabilityMap = new HashMap<>();
@@ -73,6 +81,7 @@ public class Context implements Serializable {
             };
   }
 
+
   private Map<String, Capability> capabilities;
 
   private Context( Map<String, Capability> capabilities) {
@@ -110,4 +119,12 @@ public class Context implements Serializable {
   public void addCapability(Enum<?> s, Capability capability) {
     this.capabilities.put(s.toString(), capability);
   }
+
+  public ActivityType getActivityType() {
+    return _activityType.get();
+  }
+
+  public void setActivityType(ActivityType activityType) {
+    _activityType.set(activityType);
+  }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/DefaultVariableResolver.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/DefaultVariableResolver.java
 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/DefaultVariableResolver.java
new file mode 100644
index 0000000..fc2c2b7
--- /dev/null
+++ 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/DefaultVariableResolver.java
@@ -0,0 +1,44 @@
+/**
+ * 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.stellar.dsl;
+
+import java.util.function.Function;
+
+public class DefaultVariableResolver implements VariableResolver{
+  Function<String,Object> resolveFunc;
+  Function<String,Boolean> existsFunc;
+
+  public DefaultVariableResolver(Function<String,Object> resolveFunc, 
Function<String,Boolean> existsFunc){
+    this.resolveFunc = resolveFunc;
+    this.existsFunc = existsFunc;
+  }
+  @Override
+  public Object resolve(String variable) {
+    return resolveFunc.apply(variable);
+  }
+
+  @Override
+  public boolean exists(String variable) {
+    return existsFunc.apply(variable);
+  }
+
+  public static DefaultVariableResolver NULL_RESOLVER() {
+    return new DefaultVariableResolver(x -> null, x -> false);
+  }
+}

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/MapVariableResolver.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/MapVariableResolver.java
 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/MapVariableResolver.java
index fdf740c..4c02d99 100644
--- 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/MapVariableResolver.java
+++ 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/MapVariableResolver.java
@@ -27,14 +27,14 @@ public class MapVariableResolver implements 
VariableResolver {
   List<Map> variableMappings = new ArrayList<>();
 
   public MapVariableResolver(Map variableMappingOne, Map... variableMapping) {
-    if(variableMappingOne != null) {
+    if (variableMappingOne != null) {
       variableMappings.add(variableMappingOne);
     }
     add(variableMapping);
   }
 
   public void add(Map... ms) {
-    if(ms != null) {
+    if (ms != null) {
       for (Map m : ms) {
         if (m != null) {
           this.variableMappings.add(m);
@@ -45,12 +45,17 @@ public class MapVariableResolver implements 
VariableResolver {
 
   @Override
   public Object resolve(String variable) {
-    for(Map variableMapping : variableMappings) {
+    for (Map variableMapping : variableMappings) {
       Object o = variableMapping.get(variable);
-      if(o != null) {
+      if (o != null) {
         return o;
       }
     }
     return null;
   }
+
+  @Override
+  public boolean exists(String variable) {
+    return true;
+  }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/VariableResolver.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/VariableResolver.java
 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/VariableResolver.java
index bbc86a5..f2624e9 100644
--- 
a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/VariableResolver.java
+++ 
b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/VariableResolver.java
@@ -18,6 +18,8 @@
 
 package org.apache.metron.stellar.dsl;
 
+
 public interface VariableResolver {
   Object resolve(String variable);
+  boolean exists(String variable);
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/StellarComparisonExpressionWithOperatorTest.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/StellarComparisonExpressionWithOperatorTest.java
 
b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/StellarComparisonExpressionWithOperatorTest.java
index 44bffbc..e587a1f 100644
--- 
a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/StellarComparisonExpressionWithOperatorTest.java
+++ 
b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/StellarComparisonExpressionWithOperatorTest.java
@@ -19,6 +19,7 @@
 package org.apache.metron.stellar.common;
 
 import com.google.common.collect.ImmutableMap;
+import org.apache.metron.stellar.dsl.DefaultVariableResolver;
 import org.apache.metron.stellar.dsl.ParseException;
 import org.junit.Test;
 
@@ -49,8 +50,21 @@ public class StellarComparisonExpressionWithOperatorTest {
     assertEquals(1L < 3.0f, run("1L < 3.0f", ImmutableMap.of()));
     assertEquals(1 < 3.0f, run("1 < 3.0f", ImmutableMap.of()));
     assertEquals(1.0 < 3.0f, run("1.0 < 3.0f", ImmutableMap.of()));
-    assertEquals(false, run("foo < 3.0f", ImmutableMap.of()));
-    assertEquals(false, run("foo < foo", ImmutableMap.of()));
+    boolean thrown = false;
+    try {
+      run("foo < 3.0f", ImmutableMap.of());
+    }catch(ParseException pe){
+      thrown = true;
+    }
+    assertTrue(thrown);
+    thrown = false;
+    try {
+      run("foo < foo", ImmutableMap.of());
+    }catch(ParseException pe){
+      thrown = true;
+    }
+    assertTrue(thrown);
+
     assertEquals(1L < 3.0f ? true : false, run("if 1L < 3.0f then true else 
false", ImmutableMap.of()));
   }
 
@@ -72,43 +86,47 @@ public class StellarComparisonExpressionWithOperatorTest {
       put("foo.bar", "casey");
     }};
 
-    assertTrue(runPredicate("'casey' == foo.bar", variableMap::get));
-    assertTrue(runPredicate("'casey' == foo", variableMap::get));
-    assertFalse(runPredicate("'casey' != foo", variableMap::get));
-    assertTrue(runPredicate("'stella' == 'stella'", variableMap::get));
-    assertFalse(runPredicate("'stella' == foo", variableMap::get));
-    assertTrue(runPredicate("foo== foo", variableMap::get));
-    assertTrue(runPredicate("empty== ''", variableMap::get));
-    assertTrue(runPredicate("spaced == 'metron is great'", variableMap::get));
-    assertTrue(runPredicate(null, variableMap::get));
-    assertTrue(runPredicate("", variableMap::get));
-    assertTrue(runPredicate(" ", variableMap::get));
+    assertTrue(runPredicate("'casey' == foo.bar", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("'casey' == foo", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("'casey' != foo",new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("'stella' == 'stella'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("'stella' == foo", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("foo== foo", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("empty== ''", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("spaced == 'metron is great'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate(null, new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate(" ",(new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey))));
   }
 
   @Test
   public void compareNumberAndStringWithSameValueShouldBeFalse() throws 
Exception {
-    assertFalse(runPredicate("1 == '1'", new HashMap<>()::get));
-    assertFalse(runPredicate("'1' == 1", new HashMap<>()::get));
+    Map<String,String> variableMap = new HashMap<>();
+    assertFalse(runPredicate("1 == '1'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("'1' == 1", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
   }
 
   @Test
   public void comparingNullShouldNotCauseNullPointer() throws Exception {
-    assertFalse(runPredicate("null == '1'", new HashMap<>()::get));
-    assertFalse(runPredicate("\"1\" == null", new HashMap<>()::get));
-    assertTrue(runPredicate("null == null", new HashMap<>()::get));
+    Map<String,String> variableMap = new HashMap<>();
+    assertFalse(runPredicate("null == '1'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("\"1\" == null", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("null == null", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
   }
 
   @Test
   public void makeSureSingleQuotesAndDoubleQuotesAreEqual() throws Exception {
-    assertTrue(runPredicate("\"1\" == '1'", new HashMap<>()::get));
-    assertTrue(runPredicate("'1' == \"1\"", new HashMap<>()::get));
-    assertTrue(runPredicate("'1' == \"1\"", new HashMap<>()::get));
+    Map<String,String> variableMap = new HashMap<>();
+    assertTrue(runPredicate("\"1\" == '1'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("'1' == \"1\"", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("'1' == \"1\"", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
   }
 
   @Test
   public void makeSureSingleQuoteStringsAreEvaluatedAsStrings() throws 
Exception {
-    assertFalse(runPredicate("55 == '7'", new HashMap<>()::get));
-    assertFalse(runPredicate("97 == 'a'", new HashMap<>()::get));
+    Map<String,String> variableMap = new HashMap<>();
+    assertFalse(runPredicate("55 == '7'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("97 == 'a'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
   }
 
   @Test
@@ -124,16 +142,16 @@ public class StellarComparisonExpressionWithOperatorTest {
       put("empty", "");
       put("spaced", "metron is great");
     }};
-    assertTrue(runPredicate("num == 7", variableMap::get));
-    assertTrue(runPredicate("num < num2", variableMap::get));
-    assertTrue(runPredicate("num < TO_DOUBLE(num2)", variableMap::get));
-    assertTrue(runPredicate("num < TO_DOUBLE(num4)", variableMap::get));
-    assertTrue(runPredicate("num < 100", variableMap::get));
-    assertTrue(runPredicate("num == num3", variableMap::get));
-    assertFalse(runPredicate("num == num2", variableMap::get));
-    assertTrue(runPredicate("num == num2 || true", variableMap::get));
-    assertFalse(runPredicate("num > num2", variableMap::get));
-    assertTrue(runPredicate("num == 7 && num > 2", variableMap::get));
+    assertTrue(runPredicate("num == 7", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("num < num2", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("num < TO_DOUBLE(num2)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("num < TO_DOUBLE(num4)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("num < 100", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("num == num3", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("num == num2", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("num == num2 || true", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("num > num2", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("num == 7 && num > 2", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
   }
 
   @Test
@@ -143,14 +161,14 @@ public class StellarComparisonExpressionWithOperatorTest {
     }};
 
     Arrays.asList("!=", "==").forEach(op -> {
-      assertEquals("==".equals(op), runPredicate("num " + op + " 0", 
variableMap::get));
-      assertEquals("==".equals(op), runPredicate("0 " + op + " -0", 
variableMap::get));
-      assertEquals("==".equals(op), runPredicate("0 " + op + " -0d", 
variableMap::get));
-      assertEquals("==".equals(op), runPredicate("-0 " + op + " 0", 
variableMap::get));
-      assertEquals("==".equals(op), runPredicate("-0F " + op + " 0D", 
variableMap::get));
-      assertEquals("==".equals(op), runPredicate("-0.F " + op + " 0", 
variableMap::get));
-      assertEquals("==".equals(op), runPredicate("-0.F " + op + " 0F", 
variableMap::get));
-      assertEquals("==".equals(op), runPredicate("-0.D " + op + " 0D", 
variableMap::get));
+      assertEquals("==".equals(op), runPredicate("num " + op + " 0", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("==".equals(op), runPredicate("0 " + op + " -0", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("==".equals(op), runPredicate("0 " + op + " -0d", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("==".equals(op), runPredicate("-0 " + op + " 0", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("==".equals(op), runPredicate("-0F " + op + " 0D", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("==".equals(op), runPredicate("-0.F " + op + " 0", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("==".equals(op), runPredicate("-0.F " + op + " 0F", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("==".equals(op), runPredicate("-0.D " + op + " 0D", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
     });
   }
 
@@ -158,20 +176,20 @@ public class StellarComparisonExpressionWithOperatorTest {
   public void naNIsNotEqualToNaN() throws Exception {
     final Map<String, Object> variableMap = new HashMap<>();
     Arrays.asList("!=", "==").forEach(op -> {
-      assertEquals("!=".equals(op), runPredicate("(0f/0f) " + op + " (0f/0f)", 
variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(-0f/0f) " + op + " 
(0f/0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(-0f/-0f) " + op + " 
(0f/0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(-0f/-0f) " + op + " 
(-0f/0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(-0f/-0f) " + op + " 
(-0f/-0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(0f/-0f) " + op + " 
(0f/0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(0f/-0f) " + op + " 
(-0f/0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(0f/-0f) " + op + " 
(-0f/-0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(0f/0f) " + op + " 
(-0f/0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(0f/0d) " + op + " 
(-0f/-0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(0d/-0f) " + op + " 
(0f/-0f)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(-0f/0f) " + op + " 
(0f/-0d)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(-0d/-0d) " + op + " 
(0d/-0d)", variableMap::get));
-      assertEquals("!=".equals(op), runPredicate("(0d/0d) " + op + " (0d/0d)", 
variableMap::get));
+      assertEquals("!=".equals(op), runPredicate("(0f/0f) " + op + " (0f/0f)", 
new DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(-0f/0f) " + op + " 
(0f/0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(-0f/-0f) " + op + " 
(0f/0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(-0f/-0f) " + op + " 
(-0f/0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(-0f/-0f) " + op + " 
(-0f/-0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(0f/-0f) " + op + " 
(0f/0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(0f/-0f) " + op + " 
(-0f/0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(0f/-0f) " + op + " 
(-0f/-0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(0f/0f) " + op + " 
(-0f/0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(0f/0d) " + op + " 
(-0f/-0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(0d/-0f) " + op + " 
(0f/-0f)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(-0f/0f) " + op + " 
(0f/-0d)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(-0d/-0d) " + op + " 
(0d/-0d)", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals("!=".equals(op), runPredicate("(0d/0d) " + op + " (0d/0d)", 
new DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
     });
   }
 
@@ -182,70 +200,70 @@ public class StellarComparisonExpressionWithOperatorTest {
       put("f", false);
     }};
 
-    assertTrue(runPredicate("t != f", variableMap::get));
-    assertTrue(runPredicate("f != t", variableMap::get));
-    assertTrue(runPredicate("true != false", variableMap::get));
-    assertFalse(runPredicate("true != true", variableMap::get));
-    assertTrue(runPredicate("false != true", variableMap::get));
-    assertFalse(runPredicate("false != false", variableMap::get));
-
-    assertFalse(runPredicate("t == f", variableMap::get));
-    assertFalse(runPredicate("f == t", variableMap::get));
-    assertFalse(runPredicate("true == false", variableMap::get));
-    assertTrue(runPredicate("true == true", variableMap::get));
-    assertFalse(runPredicate("false == true", variableMap::get));
-    assertTrue(runPredicate("false == false", variableMap::get));
-
-    assertFalse(runPredicate("null == false", variableMap::get));
-    assertFalse(runPredicate("null == true", variableMap::get));
-    assertFalse(runPredicate("true == NULL", variableMap::get));
-    assertFalse(runPredicate("false == NULL", variableMap::get));
+    assertTrue(runPredicate("t != f", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("f != t", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("true != false", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("true != true", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("false != true", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("false != false", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+
+    assertFalse(runPredicate("t == f", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("f == t", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("true == false", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("true == true", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("false == true", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertTrue(runPredicate("false == false", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+
+    assertFalse(runPredicate("null == false", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("null == true", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("true == NULL", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("false == NULL", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
   }
 
   @Test
   public void nullComparisonTests() throws Exception {
     final Map<String, Object> variableMap = new HashMap<>();
 
-    assertFalse(runPredicate("null == false", variableMap::get));
-    assertFalse(runPredicate("null == true", variableMap::get));
-    assertFalse(runPredicate("true == NULL", variableMap::get));
-    assertFalse(runPredicate("false == NULL", variableMap::get));
-    assertFalse(runPredicate("1 == NULL", variableMap::get));
-    assertFalse(runPredicate("'null' == NULL", variableMap::get));
-    assertFalse(runPredicate("'' == NULL", variableMap::get));
-    assertFalse(runPredicate("null == ''", variableMap::get));
+    assertFalse(runPredicate("null == false", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("null == true", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("true == NULL", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("false == NULL", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("1 == NULL", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("'null' == NULL", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("'' == NULL", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+    assertFalse(runPredicate("null == ''", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
 
-    assertTrue(runPredicate("NULL == null", variableMap::get));
+    assertTrue(runPredicate("NULL == null", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
   }
 
   @Test
   public void precisionEqualityTests() throws Exception {
     final Map<String, Object> variableMap = new HashMap<>();
-    assertEquals(0.1 + 0.2 == 0.3, runPredicate("0.1 + 0.2 == 0.3", 
variableMap::get));
+    assertEquals(0.1 + 0.2 == 0.3, runPredicate("0.1 + 0.2 == 0.3", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
   }
 
   @Test(expected = ParseException.class)
   public void differentTypesShouldThrowErrorWhenUsingLT() throws Exception {
     final Map<String, Object> variableMap = new HashMap<>();
-    runPredicate("1 < '1'", variableMap::get);
+    runPredicate("1 < '1'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey));
   }
 
   @Test(expected = ParseException.class)
   public void differentTypesShouldThrowErrorWhenUsingLTE() throws Exception {
     final Map<String, Object> variableMap = new HashMap<>();
-    runPredicate("'1' <= 1", variableMap::get);
+    runPredicate("'1' <= 1", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey));
   }
 
   @Test(expected = ParseException.class)
   public void differentTypesShouldThrowErrorWhenUsingGT() throws Exception {
     final Map<String, Object> variableMap = new HashMap<>();
-    runPredicate("1 > '1'", variableMap::get);
+    runPredicate("1 > '1'", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey));
   }
 
   @Test(expected = ParseException.class)
   public void differentTypesShouldThrowErrorWhenUsingGTE() throws Exception {
     final Map<String, Object> variableMap = new HashMap<>();
-    runPredicate("'1' >= 1", variableMap::get);
+    runPredicate("'1' >= 1", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey));
   }
 
   @Test
@@ -254,7 +272,7 @@ public class StellarComparisonExpressionWithOperatorTest {
     final Integer[] result = {0};
 
     Stream.of("<", "<=", ">", ">=").forEach(op -> {
-      assertFalse(runPredicate("'1' " + op + " null", variableMap::get));
+      assertFalse(runPredicate("'1' " + op + " null", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
     });
   }
 
@@ -262,32 +280,32 @@ public class StellarComparisonExpressionWithOperatorTest {
   public void makeSurePrecisionIsProperlyHandled() throws Exception {
     final Map<String, Object> variableMap = new HashMap<>();
     {
-      assertEquals(1 == 1.00000001, runPredicate("1 == 1.00000001", 
variableMap::get));
-      assertEquals(1 < 1.00000001, runPredicate("1 < 1.00000001", 
variableMap::get));
-      assertEquals(1 <= 1.00000001, runPredicate("1 <= 1.00000001", 
variableMap::get));
-      assertEquals(1 > 1.00000001, runPredicate("1 > 1.00000001", 
variableMap::get));
-      assertEquals(1 >= 1.00000001, runPredicate("1 >= 1.00000001", 
variableMap::get));
+      assertEquals(1 == 1.00000001, runPredicate("1 == 1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1 < 1.00000001, runPredicate("1 < 1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1 <= 1.00000001, runPredicate("1 <= 1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1 > 1.00000001, runPredicate("1 > 1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1 >= 1.00000001, runPredicate("1 >= 1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
     }
     {
-      assertEquals(1 == 1.00000001F, runPredicate("1 == 1.00000001F", 
variableMap::get));
-      assertEquals(1 < 1.00000001F, runPredicate("1 < 1.00000001F", 
variableMap::get));
-      assertEquals(1 <= 1.00000001F, runPredicate("1 <= 1.00000001F", 
variableMap::get));
-      assertEquals(1 > 1.00000001F, runPredicate("1 > 1.00000001F", 
variableMap::get));
-      assertEquals(1 >= 1.00000001F, runPredicate("1 >= 1.00000001F", 
variableMap::get));
+      assertEquals(1 == 1.00000001F, runPredicate("1 == 1.00000001F", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1 < 1.00000001F, runPredicate("1 < 1.00000001F", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1 <= 1.00000001F, runPredicate("1 <= 1.00000001F", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1 > 1.00000001F, runPredicate("1 > 1.00000001F", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1 >= 1.00000001F, runPredicate("1 >= 1.00000001F", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
     }
     {
-      assertEquals(1.00000001F == 1.00000001, runPredicate("1.00000001F == 
1.00000001", variableMap::get));
-      assertEquals(1.00000001F < 1.00000001, runPredicate("1.00000001F < 
1.00000001", variableMap::get));
-      assertEquals(1.00000001F <= 1.00000001, runPredicate("1.00000001F <= 
1.00000001", variableMap::get));
-      assertEquals(1.00000001F > 1.00000001, runPredicate("1.00000001F > 
1.00000001", variableMap::get));
-      assertEquals(1.00000001F >= 1.00000001, runPredicate("1.00000001F >= 
1.00000001", variableMap::get));
+      assertEquals(1.00000001F == 1.00000001, runPredicate("1.00000001F == 
1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1.00000001F < 1.00000001, runPredicate("1.00000001F < 
1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1.00000001F <= 1.00000001, runPredicate("1.00000001F <= 
1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1.00000001F > 1.00000001, runPredicate("1.00000001F > 
1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(1.00000001F >= 1.00000001, runPredicate("1.00000001F >= 
1.00000001", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
     }
     {
-      assertEquals(-1L == -1.00000001F, runPredicate("-1L == -1.00000001F", 
variableMap::get));
-      assertEquals(-1L < -1.00000001F, runPredicate("-1L < -1.00000001F", 
variableMap::get));
-      assertEquals(-1L <= -1.00000001F, runPredicate("-1L <= -1.00000001F", 
variableMap::get));
-      assertEquals(-1L > -1.00000001F, runPredicate("-1L > -1.00000001F", 
variableMap::get));
-      assertEquals(-1L >= -1.00000001F, runPredicate("-1L >= -1.00000001F", 
variableMap::get));
+      assertEquals(-1L == -1.00000001F, runPredicate("-1L == -1.00000001F", 
new DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(-1L < -1.00000001F, runPredicate("-1L < -1.00000001F", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(-1L <= -1.00000001F, runPredicate("-1L <= -1.00000001F", 
new DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(-1L > -1.00000001F, runPredicate("-1L > -1.00000001F", new 
DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
+      assertEquals(-1L >= -1.00000001F, runPredicate("-1L >= -1.00000001F", 
new DefaultVariableResolver(variableMap::get,variableMap::containsKey)));
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/shell/StellarShellOptionsValidatorTest.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/shell/StellarShellOptionsValidatorTest.java
 
b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/shell/StellarShellOptionsValidatorTest.java
index 8fb1873..4f74308 100644
--- 
a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/shell/StellarShellOptionsValidatorTest.java
+++ 
b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/shell/StellarShellOptionsValidatorTest.java
@@ -89,106 +89,106 @@ public class StellarShellOptionsValidatorTest {
 
     // these should not
 
-    boolean caught = false;
+    boolean thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidZNoPortArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for not providing port with host 
name ", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for not providing port with host 
name ", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidZIPNoPortArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for not providing port with ip 
address ", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for not providing port with ip 
address ", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidZNameArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for providing invalid host name 
", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for providing invalid host name 
", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidZIPArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for providing invalid ip address 
", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for providing invalid ip address 
", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidZMissingNameArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for only providing port ", 
caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for only providing port ", 
thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidZZeroPortArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for 0 port ", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for 0 port ", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidZHugePortArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for port out of range ", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for port out of range ", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidVFileArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for passing non-existant file to 
-v ", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for passing non-existant file to 
-v ", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidVFileArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for passing non-existant file to 
-v ", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for passing non-existant file to 
-v ", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidIrcFileArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for passing non-existant file to 
-irc ", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for passing non-existant file to 
-irc ", thrown);
+    thrown = false;
 
     try {
       commandLine = parser.parse(options, invalidPFileArg);
       StellarShellOptionsValidator.validateOptions(commandLine);
     } catch (IllegalArgumentException e) {
-      caught = true;
+      thrown = true;
     }
-    Assert.assertTrue("Did not catch failure for passing non-existant file to 
-p ", caught);
-    caught = false;
+    Assert.assertTrue("Did not catch failure for passing non-existant file to 
-p ", thrown);
+    thrown = false;
   }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/BloomFilterTest.java
----------------------------------------------------------------------
diff --git 
a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/BloomFilterTest.java
 
b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/BloomFilterTest.java
index c3926fe..f8636d7 100644
--- 
a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/BloomFilterTest.java
+++ 
b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/BloomFilterTest.java
@@ -20,6 +20,7 @@
 package org.apache.metron.stellar.common.utils;
 
 import com.google.common.collect.ImmutableMap;
+import org.apache.metron.stellar.dsl.ParseException;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -88,8 +89,13 @@ public class BloomFilterTest {
       Assert.assertFalse(result);
     }
     {
-      Boolean result = (Boolean) run("BLOOM_EXISTS(BLOOM_ADD(BLOOM_INIT(), 
string, double, integer, map), sam)", variables);
-      Assert.assertFalse(result);
+      boolean thrown = false;
+      try{
+        run("BLOOM_EXISTS(BLOOM_ADD(BLOOM_INIT(), string, double, integer, 
map), sam)", variables);
+      }catch(ParseException pe){
+        thrown = true;
+      }
+      Assert.assertTrue(thrown);
     }
   }
 }

Reply via email to