You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by ma...@apache.org on 2017/09/08 20:25:39 UTC
[5/5] metron git commit: METRON-1166: Stellar short circuiting fails
when a complex condition using a boolean op is followed by the opposite
boolean op this closes apache/incubator-metron#738
METRON-1166: Stellar short circuiting fails when a complex condition using a boolean op is followed by the opposite boolean op this closes apache/incubator-metron#738
Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/f0ae85fb
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/f0ae85fb
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/f0ae85fb
Branch: refs/heads/Metron_0.4.1
Commit: f0ae85fb71bf1d102d9b72f6b413a89abe8b4bd4
Parents: 224d3d5
Author: cstella <ce...@gmail.com>
Authored: Fri Sep 8 15:04:44 2017 -0400
Committer: cstella <ce...@gmail.com>
Committed: Fri Sep 8 15:04:44 2017 -0400
----------------------------------------------------------------------
.../apache/metron/stellar/common/StellarCompiler.java | 8 ++++----
.../metron/stellar/dsl/functions/BasicStellarTest.java | 12 ++++++++++++
2 files changed, 16 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metron/blob/f0ae85fb/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 a8bc773..b669bc7 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
@@ -121,15 +121,15 @@ public class StellarCompiler extends StellarBaseListener {
//if we have a boolean as the current value and the next non-contextual token is a short circuit op
//then we need to short circuit possibly
if(token.getUnderlyingType() == BooleanArg.class) {
- if (curr.getMultiArgContext() != null
- && curr.getMultiArgContext().getVariety() == FrameContext.BOOLEAN_OR
+ if (token.getMultiArgContext() != null
+ && token.getMultiArgContext().getVariety() == FrameContext.BOOLEAN_OR
&& (Boolean) (curr.getValue())
) {
//short circuit the or
FrameContext.Context context = curr.getMultiArgContext();
shortCircuit(it, context);
- } else if (curr.getMultiArgContext() != null
- && curr.getMultiArgContext().getVariety() == FrameContext.BOOLEAN_AND
+ } else if (token.getMultiArgContext() != null
+ && token.getMultiArgContext().getVariety() == FrameContext.BOOLEAN_AND
&& !(Boolean) (curr.getValue())
) {
//short circuit the and
http://git-wip-us.apache.org/repos/asf/metron/blob/f0ae85fb/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 d6c3713..af86902 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
@@ -625,6 +625,18 @@ public class BasicStellarTest {
}
@Test
+
+ public void testShortCircuit_mixedBoolOps() throws Exception {
+ final Map<String, String> variableMap = new HashMap<String, String>();
+ Assert.assertTrue(runPredicate("(false && true) || true"
+ , new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ Assert.assertTrue(runPredicate("(false && false) || true"
+ , new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ Assert.assertFalse(runPredicate("(true || true) && false"
+ , new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ }
+
+ @Test
public void testInString() throws Exception {
final Map<String, String> variableMap = new HashMap<String, String>() {{
put("foo", "casey");