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 <[email protected]> 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
