Repository: metron Updated Branches: refs/heads/master b2375a1f1 -> c08cd07f3
http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/BasicStellarTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/BasicStellarTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/BasicStellarTest.java index 06edb12..d6c3713 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/BasicStellarTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/BasicStellarTest.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableSet; import org.apache.commons.lang3.StringUtils; import org.apache.metron.stellar.common.StellarProcessor; 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.Stellar; import org.apache.metron.stellar.dsl.StellarFunction; @@ -37,6 +38,7 @@ import org.junit.rules.ExpectedException; import java.util.*; import static org.apache.metron.stellar.common.utils.StellarProcessorUtils.run; +import static org.apache.metron.stellar.common.utils.StellarProcessorUtils.validate; import static org.apache.metron.stellar.common.utils.StellarProcessorUtils.runPredicate; @SuppressWarnings("ALL") @@ -146,6 +148,32 @@ public class BasicStellarTest { } } + @Test(expected = ParseException.class) + public void testMissingVariablesWithParse() { + String query = "someVar"; + run(query,new HashMap<>()); + } + + @Test + public void testValidateDoesNotThrow(){ + String query = "someVar"; + validate(query); + } + + @Test + public void testContextActivityTypeReset(){ + String query = "someVar"; + Context context = Context.EMPTY_CONTEXT(); + + validate(query,context); + Assert.assertNull(context.getActivityType()); + + run(query,ImmutableMap.of("someVar","someValue"),context); + Assert.assertNull(context.getActivityType()); + + + } + @Test public void testIfThenElseBug1() { String query = "50 + (true == true ? 10 : 20)"; @@ -411,10 +439,10 @@ public class BasicStellarTest { Collection c = new ArrayList(); Assert.assertEquals(0,run(query,ImmutableMap.of("foo",c))); } - @Test + @Test(expected = ParseException.class) public void testNoVarLength(){ String query = "LENGTH(foo)"; - Assert.assertEquals(0,run(query,ImmutableMap.of())); + run(query,ImmutableMap.of()); } @Test @@ -547,14 +575,14 @@ public class BasicStellarTest { put("empty", ""); put("spaced", "metron is great"); }}; - Assert.assertFalse(runPredicate("not('casey' == foo and true)", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("not(not('casey' == foo and true))", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("('casey' == foo) && ( false != true )", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("('casey' == foo) and (FALSE == TRUE)", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("'casey' == foo and FALSE", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("'casey' == foo and true", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("true", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("TRUE", v -> variableMap.get(v))); + Assert.assertFalse(runPredicate("not('casey' == foo and true)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("not(not('casey' == foo and true))", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("('casey' == foo) && ( false != true )", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("('casey' == foo) and (FALSE == TRUE)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("'casey' == foo and FALSE", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("'casey' == foo and true", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("true", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("TRUE", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -563,16 +591,16 @@ public class BasicStellarTest { put("foo", "casey"); put("empty", ""); }}; - Assert.assertTrue(runPredicate("foo in [ 'casey', 'david' ]", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("foo in [ ]", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("foo in [ foo, 'david' ]", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("foo in [ 'casey', 'david' ] and 'casey' == foo", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("foo in [ 'casey', 'david' ] and foo == 'casey'", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("foo in [ 'casey' ]", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("foo not in [ 'casey', 'david' ]", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("foo not in [ 'casey', 'david' ] and 'casey' == foo", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("null in [ null, 'something' ]", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("null not in [ null, 'something' ]", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("foo in [ 'casey', 'david' ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("foo in [ ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("foo in [ foo, 'david' ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("foo in [ 'casey', 'david' ] and 'casey' == foo", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("foo in [ 'casey', 'david' ] and foo == 'casey'", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("foo in [ 'casey' ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("foo not in [ 'casey', 'david' ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("foo not in [ 'casey', 'david' ] and 'casey' == foo", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("null in [ null, 'something' ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("null not in [ null, 'something' ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -581,19 +609,19 @@ public class BasicStellarTest { put("foo", "casey"); put("empty", ""); }}; - Assert.assertTrue(runPredicate("'casey' in { foo : 5 }", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("'casey' not in { foo : 5 }", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("foo in { foo : 5 }", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("foo not in { foo : 5 }", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("'foo' in { 'foo' : 5 }", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("'foo' not in { 'foo' : 5 }", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("foo in { 'casey' : 5 }", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("foo not in { 'casey' : 5 }", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("empty in { foo : 5 }", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("empty not in { foo : 5 }", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("'foo' in { }", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("null in { 'foo' : 5 }", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("null not in { 'foo' : 5 }", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("'casey' in { foo : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("'casey' not in { foo : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("foo in { foo : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("foo not in { foo : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("'foo' in { 'foo' : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("'foo' not in { 'foo' : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("foo in { 'casey' : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("foo not in { 'casey' : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("empty in { foo : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("empty not in { foo : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("'foo' in { }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("null in { 'foo' : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("null not in { 'foo' : 5 }", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -602,34 +630,34 @@ public class BasicStellarTest { put("foo", "casey"); put("empty", ""); }}; - Assert.assertTrue(runPredicate("'case' in foo", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("'case' not in foo", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("'case' in empty", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("'case' not in empty", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("'case' in [ foo ]", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("'case' not in [ foo ]", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("null in foo", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("null not in foo", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("'case' in foo", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("'case' not in foo", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("'case' in empty", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("'case' not in empty", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("'case' in [ foo ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("'case' not in [ foo ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("null in foo", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("null not in foo", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test public void inNestedInStatement() throws Exception { final Map<String, String> variableMap = new HashMap<>(); - Assert.assertTrue(runPredicate("('grok' not in 'foobar') == true", variableMap::get)); - Assert.assertTrue(runPredicate("'grok' not in ('foobar' == true)", variableMap::get)); - Assert.assertFalse(runPredicate("'grok' in 'grokbar' == true", variableMap::get)); - Assert.assertTrue(runPredicate("false in 'grokbar' == true", variableMap::get)); + Assert.assertTrue(runPredicate("('grok' not in 'foobar') == true", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("'grok' not in ('foobar' == true)", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertFalse(runPredicate("'grok' in 'grokbar' == true", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("false in 'grokbar' == true", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); - Assert.assertTrue(runPredicate("('foo' in 'foobar') == true", variableMap::get)); - Assert.assertFalse(runPredicate("'foo' in ('foobar' == true)", variableMap::get)); - Assert.assertTrue(runPredicate("'grok' not in 'grokbar' == true", variableMap::get)); - Assert.assertTrue(runPredicate("false in 'grokbar' == true", variableMap::get)); - Assert.assertTrue(runPredicate("'foo' in ['foo'] AND 'bar' in ['bar']", variableMap::get)); - Assert.assertTrue(runPredicate("('foo' in ['foo']) AND 'bar' in ['bar']", variableMap::get)); - Assert.assertTrue(runPredicate("'foo' in ['foo'] AND ('bar' in ['bar'])", variableMap::get)); - Assert.assertTrue(runPredicate("('foo' in ['foo']) AND ('bar' in ['bar'])", variableMap::get)); - Assert.assertTrue(runPredicate("('foo' in ['foo'] AND 'bar' in ['bar'])", variableMap::get)); + Assert.assertTrue(runPredicate("('foo' in 'foobar') == true", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertFalse(runPredicate("'foo' in ('foobar' == true)", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("'grok' not in 'grokbar' == true", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("false in 'grokbar' == true", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("'foo' in ['foo'] AND 'bar' in ['bar']", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("('foo' in ['foo']) AND 'bar' in ['bar']", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("'foo' in ['foo'] AND ('bar' in ['bar'])", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("('foo' in ['foo']) AND ('bar' in ['bar'])", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); + Assert.assertTrue(runPredicate("('foo' in ['foo'] AND 'bar' in ['bar'])", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); } @Test @@ -639,9 +667,9 @@ public class BasicStellarTest { put("empty", ""); put("spaced", "metron is great"); }}; - Assert.assertTrue(runPredicate("exists(foo)", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("exists(bar)", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("exists(bar) or true", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("exists(foo)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("exists(bar)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("exists(bar) or true", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -654,7 +682,7 @@ public class BasicStellarTest { put("spaced", "metron is great"); put("myMap", ImmutableMap.of("casey", "apple")); }}; - Assert.assertTrue(runPredicate("MAP_EXISTS(foo, myMap)", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("MAP_EXISTS(foo, myMap)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -668,22 +696,28 @@ public class BasicStellarTest { put("empty", ""); put("spaced", "metron is great"); }}; - Assert.assertTrue(runPredicate("IN_SUBNET(ip, '192.168.0.0/24')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("IN_SUBNET(ip, '192.168.0.0/24', '11.0.0.0/24')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("IN_SUBNET(ip, '192.168.0.0/24', '11.0.0.0/24') in [true]", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("true in IN_SUBNET(ip, '192.168.0.0/24', '11.0.0.0/24')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("IN_SUBNET(ip_dst_addr, '192.168.0.0/24', '11.0.0.0/24')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("IN_SUBNET(other_ip, '192.168.0.0/24')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("IN_SUBNET(blah, '192.168.0.0/24')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("true and STARTS_WITH(foo, 'ca')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("true and STARTS_WITH(TO_UPPER(foo), 'CA')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("(true and STARTS_WITH(TO_UPPER(foo), 'CA')) || true", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("true and ENDS_WITH(foo, 'sey')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("not(IN_SUBNET(ip_src_addr, '192.168.0.0/24') and IN_SUBNET(ip_dst_addr, '192.168.0.0/24'))", v-> variableMap.get(v))); - Assert.assertTrue(runPredicate("IN_SUBNET(ip_src_addr, '192.168.0.0/24')", v-> variableMap.get(v))); - Assert.assertFalse(runPredicate("not(IN_SUBNET(ip_src_addr, '192.168.0.0/24'))", v-> variableMap.get(v))); - Assert.assertFalse(runPredicate("IN_SUBNET(ip_dst_addr, '192.168.0.0/24')", v-> variableMap.get(v))); - Assert.assertTrue(runPredicate("not(IN_SUBNET(ip_dst_addr, '192.168.0.0/24'))", v-> variableMap.get(v))); + Assert.assertTrue(runPredicate("IN_SUBNET(ip, '192.168.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("IN_SUBNET(ip, '192.168.0.0/24', '11.0.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("IN_SUBNET(ip, '192.168.0.0/24', '11.0.0.0/24') in [true]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("true in IN_SUBNET(ip, '192.168.0.0/24', '11.0.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("IN_SUBNET(ip_dst_addr, '192.168.0.0/24', '11.0.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("IN_SUBNET(other_ip, '192.168.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + boolean thrown = false; + try{ + runPredicate("IN_SUBNET(blah, '192.168.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))); + }catch(ParseException pe){ + thrown = true; + } + Assert.assertTrue(thrown); + Assert.assertTrue(runPredicate("true and STARTS_WITH(foo, 'ca')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("true and STARTS_WITH(TO_UPPER(foo), 'CA')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("(true and STARTS_WITH(TO_UPPER(foo), 'CA')) || true", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("true and ENDS_WITH(foo, 'sey')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("not(IN_SUBNET(ip_src_addr, '192.168.0.0/24') and IN_SUBNET(ip_dst_addr, '192.168.0.0/24'))", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("IN_SUBNET(ip_src_addr, '192.168.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("not(IN_SUBNET(ip_src_addr, '192.168.0.0/24'))", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("IN_SUBNET(ip_dst_addr, '192.168.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("not(IN_SUBNET(ip_dst_addr, '192.168.0.0/24'))", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -703,23 +737,40 @@ public class BasicStellarTest { @Test public void testShortCircuit_boolean() throws Exception { - Assert.assertTrue(runPredicate("'metron' in ['metron', 'metronicus', 'mortron'] or (true or THROW('exception'))", x -> null)); - Assert.assertTrue(runPredicate("true or (true or THROW('exception'))", x -> null)); - Assert.assertTrue(runPredicate("true or (false or THROW('exception'))", x -> null)); - Assert.assertTrue(runPredicate("TO_UPPER('foo') == 'FOO' or (true or THROW('exception'))", x -> null)); - Assert.assertFalse(runPredicate("false and (true or THROW('exception'))", x -> null)); - Assert.assertTrue(runPredicate("true or false or false or true", x -> null)); - Assert.assertFalse(runPredicate("false or (false and THROW('exception'))", x -> null)); - Assert.assertTrue(runPredicate("'casey' == 'casey' or THROW('exception')", x -> null)); - Assert.assertTrue(runPredicate("TO_UPPER('casey') == 'CASEY' or THROW('exception')", x -> null)); - Assert.assertTrue(runPredicate("NOT(TO_UPPER('casey') != 'CASEY') or THROW('exception')", x -> null)); - Assert.assertTrue(runPredicate("(TO_UPPER('casey') == 'CASEY') or THROW('exception')", x -> null)); - Assert.assertFalse(runPredicate("NOT(NOT(TO_UPPER('casey') != 'CASEY') or THROW('exception'))", x -> null)); - Assert.assertFalse(runPredicate("NOT(NOT(TO_UPPER('casey') != 'CASEY')) and THROW('exception')", x -> null)); - Assert.assertTrue(runPredicate("RET_TRUE('foo') or THROW('exception')", x -> null)); - Assert.assertFalse(runPredicate("NOT(foo == null or THROW('exception')) and THROW('and exception')", x -> null)); - Assert.assertTrue(runPredicate("(foo == null or THROW('exception') ) or THROW('and exception')", x -> null)); - Assert.assertTrue(runPredicate("( RET_TRUE('foo', true, false) or ( foo == null or THROW('exception') ) or THROW('and exception')) or THROW('or exception')", x -> null)); + Assert.assertTrue(runPredicate("'metron' in ['metron', 'metronicus', 'mortron'] or (true or THROW('exception'))", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("true or (true or THROW('exception'))", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("true or (false or THROW('exception'))", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("TO_UPPER('foo') == 'FOO' or (true or THROW('exception'))", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertFalse(runPredicate("false and (true or THROW('exception'))", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("true or false or false or true", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertFalse(runPredicate("false or (false and THROW('exception'))", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("'casey' == 'casey' or THROW('exception')", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("TO_UPPER('casey') == 'CASEY' or THROW('exception')", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("NOT(TO_UPPER('casey') != 'CASEY') or THROW('exception')", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("(TO_UPPER('casey') == 'CASEY') or THROW('exception')", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertFalse(runPredicate("NOT(NOT(TO_UPPER('casey') != 'CASEY') or THROW('exception'))", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertFalse(runPredicate("NOT(NOT(TO_UPPER('casey') != 'CASEY')) and THROW('exception')", new DefaultVariableResolver(x -> null,x -> false))); + Assert.assertTrue(runPredicate("RET_TRUE('foo') or THROW('exception')", new DefaultVariableResolver(x -> null,x -> false))); + boolean thrown = false; + try { + runPredicate("NOT(foo == null or THROW('exception')) and THROW('and exception')", + new DefaultVariableResolver(x -> null, x -> false)); + }catch(ParseException pe) { + thrown = true; + } + Assert.assertTrue(thrown); + thrown = false; + try { + runPredicate("(foo == null or THROW('exception') ) or THROW('and exception')", + new DefaultVariableResolver(x -> null, x -> false)); + }catch(ParseException pe){ + thrown = true; + } + + Assert.assertTrue(thrown); + + + Assert.assertTrue(runPredicate("( RET_TRUE('foo', true, false) or ( foo == null or THROW('exception') ) or THROW('and exception')) or THROW('or exception')", new DefaultVariableResolver(x -> null,x -> false))); } @Rule @@ -732,6 +783,6 @@ public class BasicStellarTest { }}; thrown.expect(IllegalArgumentException.class); thrown.expectMessage("The rule 'TO_UPPER(protocol)' does not return a boolean value."); - runPredicate("TO_UPPER(protocol)", v -> variableMap.get(v)); + runPredicate("TO_UPPER(protocol)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))); } } http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/DateFunctionsTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/DateFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/DateFunctionsTest.java index a36f8ff..0060694 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/DateFunctionsTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/DateFunctionsTest.java @@ -22,6 +22,8 @@ package org.apache.metron.stellar.dsl.functions; import org.apache.metron.stellar.common.StellarProcessor; 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.junit.Before; import org.junit.Test; @@ -48,7 +50,7 @@ public class DateFunctionsTest { private Object run(String expr) { StellarProcessor processor = new StellarProcessor(); assertTrue(processor.validate(expr)); - return processor.parse(expr, x -> variables.get(x), StellarFunctions.FUNCTION_RESOLVER(), Context.EMPTY_CONTEXT()); + return processor.parse(expr, new DefaultVariableResolver( x -> variables.get(x), x -> variables.containsKey(x)), StellarFunctions.FUNCTION_RESOLVER(), Context.EMPTY_CONTEXT()); } /** @@ -78,12 +80,11 @@ public class DateFunctionsTest { } /** - * If refer to variable that does not exist, expect null returned. + * If refer to variable that does not exist, expect ParseException. */ - @Test + @Test(expected = ParseException.class) public void testDayOfWeekNull() { Object result = run("DAY_OF_WEEK(nada)"); - assertEquals(null, result); } @Test @@ -102,12 +103,11 @@ public class DateFunctionsTest { } /** - * If refer to variable that does not exist, expect null returned. + * If refer to variable that does not exist, expect ParseException. */ - @Test + @Test(expected = ParseException.class) public void testWeekOfMonthNull() { Object result = run("WEEK_OF_MONTH(nada)"); - assertEquals(null, result); } @Test @@ -126,12 +126,11 @@ public class DateFunctionsTest { } /** - * If refer to variable that does not exist, expect null returned. + * If refer to variable that does not exist, expect ParseException. */ - @Test + @Test(expected = ParseException.class) public void testMonthNull() { Object result = run("MONTH(nada)"); - assertEquals(null, result); } @Test @@ -150,12 +149,11 @@ public class DateFunctionsTest { } /** - * If refer to variable that does not exist, expect null returned. + * If refer to variable that does not exist, expect ParseException. */ - @Test + @Test(expected = ParseException.class) public void testYearNull() { Object result = run("YEAR(nada)"); - assertEquals(null, result); } @Test @@ -174,12 +172,11 @@ public class DateFunctionsTest { } /** - * If refer to variable that does not exist, expect null returned. + * If refer to variable that does not exist, expect ParseException. */ - @Test + @Test(expected = ParseException.class) public void testDayOfMonthNull() { Object result = run("DAY_OF_MONTH(nada)"); - assertEquals(null, result); } @Test @@ -198,12 +195,11 @@ public class DateFunctionsTest { } /** - * If refer to variable that does not exist, expect null returned. + * If refer to variable that does not exist, expect ParseException. */ - @Test + @Test(expected = ParseException.class) public void testWeekOfYearNull() { Object result = run("WEEK_OF_YEAR(nada)"); - assertEquals(null, result); } @Test @@ -222,11 +218,10 @@ public class DateFunctionsTest { } /** - * If refer to variable that does not exist, expect null returned. + * If refer to variable that does not exist, expect ParseException. */ - @Test + @Test(expected = ParseException.class) public void testDayOfYearNull() { Object result = run("DAY_OF_YEAR(nada)"); - assertEquals(null, result); } } http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/EncodingFunctionsTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/EncodingFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/EncodingFunctionsTest.java index ca544aa..6dc4c39 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/EncodingFunctionsTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/EncodingFunctionsTest.java @@ -35,6 +35,7 @@ import java.util.List; import java.util.Map; import org.apache.commons.collections4.ListUtils; import org.apache.metron.stellar.common.encoding.Encodings; +import org.apache.metron.stellar.dsl.DefaultVariableResolver; import org.junit.Assert; import org.junit.Test; @@ -62,16 +63,16 @@ public class EncodingFunctionsTest { @Test public void testEncodingIs() throws Exception{ - Assert.assertTrue(runPredicate("IS_ENCODING(BASE32_FIXTURE,'BASE32')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE,'BASE32')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("IS_ENCODING(BASE32HEX_FIXTURE,'BASE32HEX')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE,'BASE32HEX')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("IS_ENCODING(BASE64_FIXTURE,'BASE64')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE_PLUS_NULL,'BASE64')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("IS_ENCODING(BINARY_FIXTURE,'BINARY')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE,'BINARY')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("IS_ENCODING(HEX_FIXTURE,'HEX')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE,'HEX')", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("IS_ENCODING(BASE32_FIXTURE,'BASE32')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE,'BASE32')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("IS_ENCODING(BASE32HEX_FIXTURE,'BASE32HEX')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE,'BASE32HEX')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("IS_ENCODING(BASE64_FIXTURE,'BASE64')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE_PLUS_NULL,'BASE64')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("IS_ENCODING(BINARY_FIXTURE,'BINARY')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE,'BINARY')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("IS_ENCODING(HEX_FIXTURE,'HEX')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("IS_ENCODING(STRING_FIXTURE,'HEX')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/FunctionalFunctionsTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/FunctionalFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/FunctionalFunctionsTest.java index 32e863b..c93e4a1 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/FunctionalFunctionsTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/FunctionalFunctionsTest.java @@ -195,7 +195,12 @@ public class FunctionalFunctionsTest { ) ) { - Object o = run(expr, ImmutableMap.of("foo", 2, "bar", 3)); + Map<String,Object> variableMap = new HashMap<String,Object>(){{ + put("foo",2); + put("bar", 3); + put("baz",null); + }}; + Object o = run(expr,variableMap); Assert.assertTrue(o instanceof List); List<String> result = (List<String>) o; Assert.assertEquals(3, result.size()); @@ -287,7 +292,12 @@ public class FunctionalFunctionsTest { ) ) { - Object o = run(expr, ImmutableMap.of("foo", "foo", "bar", "bar")); + Map<String,Object> variableMap = new HashMap<String,Object>(){{ + put("foo","foo"); + put("bar","bar"); + put("baz",null); + }}; + Object o = run(expr,variableMap); Assert.assertTrue(o instanceof List); List<String> result = (List<String>) o; Assert.assertEquals(1, result.size()); @@ -303,7 +313,12 @@ public class FunctionalFunctionsTest { ) ) { - Object o = run(expr, ImmutableMap.of("foo", "foo", "bar", "bar")); + Map<String,Object> variableMap = new HashMap<String,Object>(){{ + put("foo","foo"); + put("bar","bar"); + put("baz",null); + }}; + Object o = run(expr,variableMap); Assert.assertTrue(o instanceof List); List<String> result = (List<String>) o; Assert.assertEquals(1, result.size()); @@ -355,7 +370,12 @@ public class FunctionalFunctionsTest { ) ) { - Object o = run(expr, ImmutableMap.of("foo", 1, "bar", 2)); + Map<String,Object> variableMap = new HashMap<String,Object>(){{ + put("foo",1); + put("bar", 2); + put("baz",null); + }}; + Object o = run(expr,variableMap); Assert.assertTrue(o instanceof Number); Number result = (Number) o; Assert.assertEquals(6, result.intValue()); @@ -407,7 +427,7 @@ public class FunctionalFunctionsTest { ) ) { - Object o = run(expr, ImmutableMap.of("foo", 1, "bar", 2)); + Object o = run(expr, ImmutableMap.of("foo", 1, "bar", 2,"x",0,"y",0)); Assert.assertTrue(o instanceof List); List<String> result = (List<String>) o; Assert.assertEquals(3, result.size()); http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/MathFunctionsTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/MathFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/MathFunctionsTest.java index cdb1c42..3f0886c 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/MathFunctionsTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/MathFunctionsTest.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.apache.metron.stellar.common.StellarProcessor; 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.Test; @@ -41,7 +42,7 @@ public class MathFunctionsTest { 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(v -> variables.get(v),v -> variables.containsKey(v)), StellarFunctions.FUNCTION_RESOLVER(), context); } @Test @@ -175,7 +176,7 @@ public class MathFunctionsTest { ) { if (Double.isNaN(test.getValue())) { - Assert.assertTrue(expr + " != NaN, where value == " + test.getKey(), Double.isNaN(toDouble(run(expr, ImmutableMap.of("value", test.getKey()))))); + Assert.assertTrue(expr + " != NaN, where value == " + test.getKey(), Double.isNaN(toDouble(run(expr, ImmutableMap.of("value", test.getKey(),"NaN",Double.NaN))))); } else { Assert.assertEquals(expr + " != " + test.getValue() + " (where value == " + test.getKey() + ")", test.getValue(), toDouble(run(expr, ImmutableMap.of("value", test.getKey()))), EPSILON); } http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java index 9728bd2..2aefb67 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java @@ -18,6 +18,7 @@ package org.apache.metron.stellar.dsl.functions; +import org.apache.metron.stellar.dsl.DefaultVariableResolver; import org.apache.metron.stellar.dsl.ParseException; import org.junit.Assert; import org.junit.Test; @@ -39,8 +40,8 @@ public class RegExFunctionsTest { put("empty", ""); }}; - Assert.assertTrue(runPredicate("REGEXP_MATCH(numbers,numberPattern)", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("REGEXP_MATCH(letters,numberPattern)", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("REGEXP_MATCH(numbers,numberPattern)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("REGEXP_MATCH(letters,numberPattern)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -52,18 +53,18 @@ public class RegExFunctionsTest { put("letters", "abcde"); put("empty", ""); }}; - Assert.assertTrue(runPredicate("REGEXP_GROUP_VAL(numbers,numberPattern,2) == '3'", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("REGEXP_GROUP_VAL(letters,numberPattern,2) == null", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("REGEXP_GROUP_VAL(empty,numberPattern,2) == null", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("REGEXP_GROUP_VAL(numbers,numberPatternNoCaptures,2) == null", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("REGEXP_GROUP_VAL(numbers,numberPattern,2) == '3'", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("REGEXP_GROUP_VAL(letters,numberPattern,2) == null", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("REGEXP_GROUP_VAL(empty,numberPattern,2) == null", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("REGEXP_GROUP_VAL(numbers,numberPatternNoCaptures,2) == null", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); - boolean caught = false; + boolean thrown = false; try{ - runPredicate("REGEXP_GROUP_VAL(2) == null", v -> variableMap.get(v)); + runPredicate("REGEXP_GROUP_VAL(2) == null", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))); }catch(ParseException | IllegalStateException ise){ - caught = true; + thrown = true; } - if(!caught){ + if(!thrown){ Assert.assertTrue("Did not fail on wrong number of parameters",false); } } http://git-wip-us.apache.org/repos/asf/metron/blob/c08cd07f/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java index ab6ca82..858a043 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java @@ -21,6 +21,7 @@ package org.apache.metron.stellar.dsl.functions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.apache.commons.collections4.map.HashedMap; +import org.apache.metron.stellar.dsl.DefaultVariableResolver; import org.apache.metron.stellar.dsl.ParseException; import org.junit.Assert; import org.junit.Test; @@ -43,10 +44,10 @@ public class StringFunctionsTest { put("empty", ""); put("spaced", "metron is great"); }}; - Assert.assertTrue(runPredicate("true and TO_UPPER(foo) == 'CASEY'", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("foo in [ TO_LOWER('CASEY'), 'david' ]", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("TO_UPPER(foo) in [ TO_UPPER('casey'), 'david' ] and IN_SUBNET(ip, '192.168.0.0/24')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("TO_LOWER(foo) in [ TO_UPPER('casey'), 'david' ]", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("true and TO_UPPER(foo) == 'CASEY'", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("foo in [ TO_LOWER('CASEY'), 'david' ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("TO_UPPER(foo) in [ TO_UPPER('casey'), 'david' ] and IN_SUBNET(ip, '192.168.0.0/24')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("TO_LOWER(foo) in [ TO_UPPER('casey'), 'david' ]", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -59,10 +60,10 @@ public class StringFunctionsTest { put("spaced", "metron is great"); put("myList", ImmutableList.of("casey", "apple", "orange")); }}; - Assert.assertTrue(runPredicate("foo in SPLIT(bar, '.')", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("foo in SPLIT(ip, '.')", v -> variableMap.get(v))); - Assert.assertTrue(runPredicate("foo in myList", v -> variableMap.get(v))); - Assert.assertFalse(runPredicate("foo not in myList", v -> variableMap.get(v))); + Assert.assertTrue(runPredicate("foo in SPLIT(bar, '.')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("foo in SPLIT(ip, '.')", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertTrue(runPredicate("foo in myList", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); + Assert.assertFalse(runPredicate("foo not in myList", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v)))); } @Test @@ -188,7 +189,14 @@ public class StringFunctionsTest { Assert.assertEquals("000234", run("FORMAT('%06d', 234)", vars)); Assert.assertEquals("03 2,2017", run("FORMAT('%1$tm %1$te,%1$tY', cal)", vars)); Assert.assertEquals("234 > 3", run("FORMAT('%d > %d', x, y)", vars)); - Assert.assertEquals("missing: null", run("FORMAT('missing: %d', missing)", vars)); + + boolean thrown = false; + try { + run("FORMAT('missing: %d', missing)", vars); + } catch (ParseException pe) { + thrown = true; + } + Assert.assertTrue(thrown); } /** @@ -219,7 +227,6 @@ public class StringFunctionsTest { Assert.assertEquals("abc", run("CHOMP(msg)", ImmutableMap.of("msg", "abc\r\n"))); Assert.assertEquals("", run("CHOMP(msg)", ImmutableMap.of("msg", "\n"))); Assert.assertEquals("", run("CHOMP('')", new HashedMap())); - Assert.assertEquals(null, run("CHOMP(msg)", new HashedMap())); Assert.assertEquals(null, run("CHOMP(null)", new HashedMap())); // No input @@ -233,6 +240,14 @@ public class StringFunctionsTest { Assert.assertTrue(thrown); thrown = false; + // Variable missing + try{ + run("CHOMP(msg)", new HashedMap()); + } catch (ParseException pe) { + thrown = true; + } + thrown = false; + // Integer input try { run("CHOMP(123)", Collections.emptyMap()); @@ -253,7 +268,6 @@ public class StringFunctionsTest { public void testChop() throws Exception { Assert.assertEquals("ab", run("CHOP('abc')", new HashedMap())); Assert.assertEquals(null, run("CHOP(null)", new HashedMap())); - Assert.assertEquals(null, run("CHOP(msg)", new HashedMap())); Assert.assertEquals("abc", run("CHOP(msg)", ImmutableMap.of("msg", "abc\r\n"))); Assert.assertEquals("", run("CHOP(msg)", ImmutableMap.of("msg", ""))); Assert.assertEquals("", run("CHOP(msg)", ImmutableMap.of("msg", "\n"))); @@ -270,6 +284,14 @@ public class StringFunctionsTest { Assert.assertTrue(thrown); thrown = false; + // Variable missing + try{ + run("CHOMP(msg)", new HashedMap()); + } catch (ParseException pe) { + thrown = true; + } + thrown = false; + // Integer input try { run("CHOP(123)", Collections.emptyMap());