You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2022/10/24 00:18:52 UTC

[brooklyn-server] 01/04: make regex condition use DOTALL mode

This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit abcd84791c1824f36464423d60ab8f5745c88a60
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Sun Oct 23 20:06:43 2022 +0100

    make regex condition use DOTALL mode
---
 .../apache/brooklyn/util/core/predicates/DslPredicates.java |  3 ++-
 .../core/workflow/WorkflowPersistReplayErrorsTest.java      | 12 ++++++++++++
 .../brooklyn/util/core/predicates/DslPredicateTest.java     | 13 +++++++++++--
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/core/src/main/java/org/apache/brooklyn/util/core/predicates/DslPredicates.java b/core/src/main/java/org/apache/brooklyn/util/core/predicates/DslPredicates.java
index 32a2003c4e..f8558254ca 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/predicates/DslPredicates.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/predicates/DslPredicates.java
@@ -73,6 +73,7 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.BiFunction;
 import java.util.function.Function;
+import java.util.regex.Pattern;
 
 public class DslPredicates {
 
@@ -416,7 +417,7 @@ public class DslPredicates {
                 return DslPredicates.coercedEqual(test, value);
             });
             checker.check(equals, result, DslPredicates::coercedEqual);
-            checker.check(regex, result, (test, value) -> asStringTestOrFalse(value, v -> v.matches(test)));
+            checker.check(regex, result, (test, value) -> asStringTestOrFalse(value, v -> Pattern.compile(test, Pattern.DOTALL).matcher(v).matches()));
             checker.check(glob, result, (test, value) -> asStringTestOrFalse(value, v -> WildcardGlobs.isGlobMatched(test, v)));
 
             checker.check(inRange, result, (test,value) ->
diff --git a/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowPersistReplayErrorsTest.java b/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowPersistReplayErrorsTest.java
index 24e08ccf5b..c0a93ee04b 100644
--- a/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowPersistReplayErrorsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowPersistReplayErrorsTest.java
@@ -602,6 +602,18 @@ public class WorkflowPersistReplayErrorsTest extends RebindTestFixture<BasicAppl
         Asserts.assertEquals(lastWorkflowContext.currentStepIndex, (Integer) 0);
     }
 
+    @Test
+    public void testMultilineErrorRegex() throws IOException {
+        lastInvocation = runSteps(MutableList.of(
+                        MutableMap.of("step", "log ${var_does_not_exist}",
+                                "output", "should have failed",
+                                "on-error", MutableList.of(
+                                        MutableMap.of("step", "return error handled",
+                                                "condition", MutableMap.of("regex", ".*InvalidReference.*var_does_not_exist.*"))))),
+                null);
+        Asserts.assertEquals(lastInvocation.getUnchecked(), "error handled");
+    }
+
     @Test
     public void testTimeoutOnStep() throws Exception {
         doTestTimeout(false, true);
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/predicates/DslPredicateTest.java b/core/src/test/java/org/apache/brooklyn/util/core/predicates/DslPredicateTest.java
index a413c72591..ca605756fe 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/predicates/DslPredicateTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/predicates/DslPredicateTest.java
@@ -75,6 +75,11 @@ public class DslPredicateTest extends BrooklynMgmtUnitTestSupport {
         });
     }
 
+    DslPredicates.DslPredicate predicate(String key, Object value) {
+        return TypeCoercions.coerce(MutableMap.of(
+               key, value), DslPredicates.DslPredicate.class);
+    }
+
     @Test
     public void testGlob() {
         DslPredicates.DslPredicate p = TypeCoercions.coerce(MutableMap.of(
@@ -86,11 +91,15 @@ public class DslPredicateTest extends BrooklynMgmtUnitTestSupport {
 
     @Test
     public void testRegex() {
-        DslPredicates.DslPredicate p = TypeCoercions.coerce(MutableMap.of(
-                "regex", "x.*z"), DslPredicates.DslPredicate.class);
+        DslPredicates.DslPredicate p = predicate("regex", "x.*z");
         Asserts.assertTrue(p.test("xz"));
         Asserts.assertTrue(p.test("xaz"));
         Asserts.assertFalse(p.test("yxaz"));
+
+        Asserts.assertFalse(predicate("regex", "y").test("xyz"));
+        Asserts.assertFalse(predicate("regex", "y").test("y\nx"));
+        Asserts.assertTrue(predicate("regex", "y\\s+x").test("y\nx"));
+        Asserts.assertTrue(predicate("regex", ".*y.*").test("y\nx"));
     }
 
     @Test