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); } } }
