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 043cb184445a9210de5f0117041defa38cabcb99
Author: Alex Heneveld <[email protected]>
AuthorDate: Thu Jun 15 11:12:49 2023 +0100

    tidy up tests, add some notes on gaps
---
 .../core/workflow/WorkflowTransformTest.java       | 345 ++++++++-------------
 1 file changed, 122 insertions(+), 223 deletions(-)

diff --git 
a/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowTransformTest.java
 
b/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowTransformTest.java
index 4460761ca6..457030d84e 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowTransformTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowTransformTest.java
@@ -18,9 +18,12 @@
  */
 package org.apache.brooklyn.core.workflow;
 
+import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.test.BrooklynMgmtUnitTestSupport;
 import org.apache.brooklyn.entity.stock.BasicApplication;
 import org.apache.brooklyn.test.Asserts;
@@ -28,10 +31,14 @@ import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.text.Strings;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import java.util.Arrays;
 import java.util.Map;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 
 public class WorkflowTransformTest extends BrooklynMgmtUnitTestSupport {
 
@@ -39,278 +46,170 @@ public class WorkflowTransformTest extends 
BrooklynMgmtUnitTestSupport {
         WorkflowBasicTest.addWorkflowStepTypes(mgmt);
     }
 
-    @Test
-    public void testTransformTrim() throws Exception {
-        loadTypes();
-
-        String untrimmed = "Hello, World!   ";
-        String trimmed = untrimmed.trim();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
+    BasicApplication app;
 
-        WorkflowEffector eff = new WorkflowEffector(ConfigBag.newInstance()
-                .configure(WorkflowEffector.EFFECTOR_NAME, "myWorkflow")
-                .configure(WorkflowEffector.EFFECTOR_PARAMETER_DEFS, 
MutableMap.of("p1", MutableMap.of("defaultValue", "p1v")))
-                .configure(WorkflowEffector.STEPS, MutableList.<Object>of()
-                        .append("let mystring = '"+untrimmed+"'")
-                        .append("transform mytrimmedstring = ${mystring} | 
trim")
-                        .append("return ${mytrimmedstring}")
-                )
-        );
-        eff.apply((EntityLocal)app);
-
-        Task<?> invocation = 
app.invoke(app.getEntityType().getEffectorByName("myWorkflow").get(), null);
-        Object result = invocation.getUnchecked();
-        Asserts.assertNotNull(result);
-        Asserts.assertEquals(result, trimmed);
-    }
-
-    @Test
-    public void testTransformRegex() throws Exception {
+    @BeforeMethod(alwaysRun = true)
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
         loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-
-        WorkflowEffector eff = new WorkflowEffector(ConfigBag.newInstance()
-                .configure(WorkflowEffector.EFFECTOR_NAME, "myWorkflow")
-                .configure(WorkflowEffector.EFFECTOR_PARAMETER_DEFS, 
MutableMap.of("p1", MutableMap.of("defaultValue", "p1v")))
-                .configure(WorkflowEffector.STEPS, MutableList.<Object>of()
-                        .append("transform x = 'silly world' | replace regex 
l. k")
-                        .append("return ${x}")
-                )
-        );
-        eff.apply((EntityLocal)app);
-
-        Task<?> invocation = 
app.invoke(app.getEntityType().getEffectorByName("myWorkflow").get(), null);
-        Object result = invocation.getUnchecked();
-        Asserts.assertNotNull(result);
-        Asserts.assertEquals(result, "siky world");
+        app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
     }
 
-    @Test
-    public void testTransformAllRegex() throws Exception {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
+    @AfterMethod(alwaysRun = true, timeOut = Asserts.THIRTY_SECONDS_TIMEOUT_MS)
+    @Override
+    public void tearDown() throws Exception {
+        if (app!=null) Entities.unmanage(app);
+        super.tearDown();
+    }
 
-        WorkflowEffector eff = new WorkflowEffector(ConfigBag.newInstance()
-                .configure(WorkflowEffector.EFFECTOR_NAME, "myWorkflow")
-                .configure(WorkflowEffector.EFFECTOR_PARAMETER_DEFS, 
MutableMap.of("p1", MutableMap.of("defaultValue", "p1v")))
-                .configure(WorkflowEffector.STEPS, MutableList.<Object>of()
-                        .append("transform x = 'silly world' | replace all 
regex l. k")
-                        .append("return ${x}")
-                )
-        );
-        eff.apply((EntityLocal)app);
+    static Object runWorkflowSteps(Entity entity, String ...steps) {
+        return WorkflowBasicTest.runWorkflow(entity, 
Arrays.asList(steps).stream().map(s -> "- "+Strings.indent(2, 
s).trim()).collect(Collectors.joining("\n")), 
"test").getTask(false).get().getUnchecked();
+    }
+    Object runWorkflowSteps(String ...steps) {
+        return runWorkflowSteps(app, steps);
+    }
 
-        Task<?> invocation = 
app.invoke(app.getEntityType().getEffectorByName("myWorkflow").get(), null);
-        Object result = invocation.getUnchecked();
-        Asserts.assertNotNull(result);
-        Asserts.assertEquals(result, "siky work");
+    Object transform(String args) {
+        return runWorkflowSteps(app, "transform "+args);
     }
 
     @Test
-    public void testTransformRegexWithBackslash() throws Exception {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-
-        WorkflowEffector eff = new WorkflowEffector(ConfigBag.newInstance()
-                .configure(WorkflowEffector.EFFECTOR_NAME, "myWorkflow")
-                .configure(WorkflowEffector.EFFECTOR_PARAMETER_DEFS, 
MutableMap.of("p1", MutableMap.of("defaultValue", "p1v")))
-                .configure(WorkflowEffector.STEPS, MutableList.<Object>of()
-                        .append("transform x = 'abc/def/ghi' | replace regex 
'c/d' XXX")
-                        .append("return ${x}")
-                )
-        );
-        eff.apply((EntityLocal)app);
+    public void testTransformTrim() throws Exception {
+        String untrimmed = "Hello, World!   ";
+        String trimmed = untrimmed.trim();
 
-        Task<?> invocation = 
app.invoke(app.getEntityType().getEffectorByName("myWorkflow").get(), null);
-        Object result = invocation.getUnchecked();
-        Asserts.assertNotNull(result);
-        Asserts.assertEquals(result, "abXXXef/ghi");
+        Asserts.assertEquals(
+                runWorkflowSteps(
+                    "let mystring = '"+untrimmed+"'",
+                    "transform mytrimmedstring = ${mystring} | trim",
+                    "return ${mytrimmedstring}"),
+                trimmed);
     }
 
     @Test
-    public void testTransformRegexWithSpace() throws Exception {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-
-        WorkflowEffector eff = new WorkflowEffector(ConfigBag.newInstance()
-                .configure(WorkflowEffector.EFFECTOR_NAME, "myWorkflow")
-                .configure(WorkflowEffector.EFFECTOR_PARAMETER_DEFS, 
MutableMap.of("p1", MutableMap.of("defaultValue", "p1v")))
-                .configure(WorkflowEffector.STEPS, MutableList.<Object>of()
-                        .append("transform x = 'abc def ghi' | replace regex 
'c d' XXX")
-                        .append("return ${x}")
-                )
-        );
-        eff.apply((EntityLocal)app);
-
-        Task<?> invocation = 
app.invoke(app.getEntityType().getEffectorByName("myWorkflow").get(), null);
-        Object result = invocation.getUnchecked();
-        Asserts.assertNotNull(result);
-        Asserts.assertEquals(result, "abXXXef ghi");
+    public void testTransformRegex() throws Exception {
+        Asserts.assertEquals(transform("value 'silly world' | replace regex l. 
k"), "siky world");
+        Asserts.assertEquals(transform("value 'silly world' | replace all 
regex l. k"), "siky work");
+        // with slash
+        Asserts.assertEquals(transform("value 'abc/def/ghi' | replace regex 
'c/d' XXX"), "abXXXef/ghi");
+        // with space
+        Asserts.assertEquals(transform("value 'abc def ghi' | replace regex 'c 
d' XXX"), "abXXXef ghi");
+
+        // greedy
+        Asserts.assertEquals(transform("value 'abc def ghi c2d' | replace 
regex 'c.*d' XXX"), "abXXX");
+        Asserts.assertEquals(transform("value 'abc def ghi c2d' | replace all 
regex 'c.*d' XXX"), "abXXX");
+        // TODO this fails
+//        Asserts.assertEquals(transform("value 'abc def ghi' | replace regex 
'c d' ''"), "abef ghi");
     }
 
     @Test
     public void testTransformLiteral() throws Exception {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-
-        WorkflowEffector eff = new WorkflowEffector(ConfigBag.newInstance()
-                .configure(WorkflowEffector.EFFECTOR_NAME, "myWorkflow")
-                .configure(WorkflowEffector.EFFECTOR_PARAMETER_DEFS, 
MutableMap.of("p1", MutableMap.of("defaultValue", "p1v")))
-                .configure(WorkflowEffector.STEPS, MutableList.<Object>of()
-                        .append("transform x = 'abc.*def ghi' | replace 
literal c.*d XXX")
-                        .append("return ${x}")
-                )
-        );
-        eff.apply((EntityLocal)app);
-
-        Task<?> invocation = 
app.invoke(app.getEntityType().getEffectorByName("myWorkflow").get(), null);
-        Object result = invocation.getUnchecked();
-        Asserts.assertNotNull(result);
-        Asserts.assertEquals(result, "abXXXef ghi");
+        Asserts.assertEquals(transform("value 'abc def ghi' | replace literal 
c.*d XXX"), "abc def ghi");
+        Asserts.assertEquals(transform("value 'abc.*def ghi c.*d' | replace 
literal c.*d XXX"), "abXXXef ghi c.*d");
+        Asserts.assertEquals(transform("value 'abc.*def ghi c.*d' | replace 
all literal c.*d XXX"), "abXXXef ghi XXX");
     }
 
     @Test
     public void testTransformGlob() throws Exception {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-
-        WorkflowEffector eff = new WorkflowEffector(ConfigBag.newInstance()
-                .configure(WorkflowEffector.EFFECTOR_NAME, "myWorkflow")
-                .configure(WorkflowEffector.EFFECTOR_PARAMETER_DEFS, 
MutableMap.of("p1", MutableMap.of("defaultValue", "p1v")))
-                .configure(WorkflowEffector.STEPS, MutableList.<Object>of()
-                        .append("transform x = 'abc.*def ghi' | replace glob 
c*e XXX")
-                        .append("return ${x}")
-                )
-        );
-        eff.apply((EntityLocal)app);
-
-        Task<?> invocation = 
app.invoke(app.getEntityType().getEffectorByName("myWorkflow").get(), null);
-        Object result = invocation.getUnchecked();
-        Asserts.assertNotNull(result);
-        Asserts.assertEquals(result, "abXXXf ghi");
+        Asserts.assertEquals(transform("value 'abc def ghi' | replace glob c*e 
XXX"), "abXXXf ghi");
+        // TODO glob is greedy, so all has no effect
+        Asserts.assertEquals(transform("value 'abc def ghi c2e' | replace glob 
c*e XXX"), "abXXX");
+        Asserts.assertEquals(transform("value 'abc def ghi c2e' | replace all 
glob c*e XXX"), "abXXX");
     }
 
     @Test
     public void testMapDirect() {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-
-        WorkflowEffector eff = new WorkflowEffector(ConfigBag.newInstance()
-                .configure(WorkflowEffector.EFFECTOR_NAME, "myWorkflow")
-                .configure(WorkflowEffector.EFFECTOR_PARAMETER_DEFS, 
MutableMap.of("p1", MutableMap.of("defaultValue", "p1v")))
-                .configure(WorkflowEffector.STEPS, MutableList.<Object>of()
-                        .append("let map myMap = {a: 1}")
-                        .append("let myMap.a = 2")
-                        .append("return ${myMap.a}")
-                )
-        );
-        eff.apply((EntityLocal)app);
-
-        Task<?> invocation = 
app.invoke(app.getEntityType().getEffectorByName("myWorkflow").get(), null);
-        Object result = invocation.getUnchecked();
-        Asserts.assertNotNull(result);
-        Asserts.assertEquals(result, "2");
+        Asserts.assertEquals(runWorkflowSteps(
+                "let map myMap = {a: 1}",
+                "let myMap.a = 2",
+                "return ${myMap.a}"),
+            "2");
     }
 
     @Test
     public void testReturnTransformWithMapYaml() {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-        Object result = WorkflowBasicTest.runWorkflow(app, Strings.lines(
-                "- step: let s",
-                "  value: |",
-                "    bogus",
-                "    - not valid: yaml: here",
-                "    that's: okay",
-                "    ---",
-                "     key: value",
-                "- transform s | yaml | return",
-                "- return should not come here",
-        ""), "test").getTask(false).get().getUnchecked();
-        Asserts.assertInstanceOf(result, Map.class);
-        Asserts.assertEquals(result, MutableMap.of("key", "value"));
+        Asserts.assertEquals(WorkflowBasicTest.runWorkflow(app, Strings.lines(
+                    "- step: let s",
+                    "  value: |",
+                    "    bogus",
+                    "    - not valid: yaml: here",
+                    "    that's: okay",
+                    "    ---",
+                    "     key: value",
+                    "- transform s | yaml | return",
+                    "- return should not come here",
+                ""), "test").getTask(false).get().getUnchecked(),
+                MutableMap.of("key", "value"));
     }
 
     @Test
     public void testSetVarTransform() {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-        Object result = WorkflowBasicTest.runWorkflow(app, Strings.lines(
-                "- step: let s",
-                "  value: \"key: Value\"",
-                "- transform s | yaml | set y",
-                "- transform y.key2 = ${output.key} | to_upper_case",
-                "- transform output.key | to_lower_case",  // output should 
still be the yaml map transformed from ${s}
-                "- transform output | set y.key3",   // output passed in here 
will be 'value' from previous step
-                "- transform value true | set y.key4",
-                "- transform boolean value true | set y.key5",
-                "- return ${y}",
-                ""), "test").getTask(false).get().getUnchecked();
-        Asserts.assertInstanceOf(result, Map.class);
-        Asserts.assertEquals(result, MutableMap.of("key", "Value", "key2", 
"VALUE", "key3", "value", "key4", "true", "key5", true));
+        Asserts.assertEquals(WorkflowBasicTest.runWorkflow(app, Strings.lines(
+                    "- step: let s",
+                    "  value: \"key: Value\"",
+                    "- transform s | yaml | set y",
+                    "- transform y.key2 = ${output.key} | to_upper_case",
+                    "- transform output.key | to_lower_case",  // output 
should still be the yaml map transformed from ${s}
+                    "- transform output | set y.key3",   // output passed in 
here will be 'value' from previous step
+                    "- transform value true | set y.key4",
+                    "- transform boolean value true | set y.key5",
+                    "- return ${y}",
+                ""), "test").getTask(false).get().getUnchecked(),
+                MutableMap.of("key", "Value", "key2", "VALUE", "key3", 
"value", "key4", "true", "key5", true));
     }
 
     @Test
     public void testResolveTransform() {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-        Object result = WorkflowBasicTest.runWorkflow(app, Strings.lines(
-                "- let a = b",
-                "- let b = c",
-                "- let x = \"${\" ${a} \"}\"",
-                "- transform x | resolve_expression | return",
-                ""), "test").getTask(false).get().getUnchecked();
-        Asserts.assertEquals(result, "c");
-
-        result = WorkflowBasicTest.runWorkflow(app, Strings.lines(
-                "- let a = b",
-                "- let b = c",
-                "- transform value {${a}} | prepend $ | resolve_expression | 
return",
-                ""), "test").getTask(false).get().getUnchecked();
-        Asserts.assertEquals(result, "c");
+        Asserts.assertEquals(runWorkflowSteps(
+                    "let a = b",
+                    "let b = c",
+                    "let x = \"${\" ${a} \"}\"",
+                    "transform x | resolve_expression | return"
+                ), "c");
+
+        Asserts.assertEquals(runWorkflowSteps(
+                    "let a = b",
+                    "let b = c",
+                    "transform value {${a}} | prepend $ | resolve_expression | 
return"
+                ), "c");
     }
 
     @Test
     public void testSliceRemoveAndAppendTransform() {
-        loadTypes();
-
-        BasicApplication app = 
mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class));
-
-        Function<String,Object> transform = tx -> 
WorkflowBasicTest.runWorkflow(app, Strings.lines("- "+tx), 
"test").getTask(false).get().getUnchecked();
-
         // slice list
-        Asserts.assertEquals(transform.apply("transform value ['a','bb','ccc'] 
| type list | slice 1"), MutableList.of("bb", "ccc"));
-        Asserts.assertEquals(transform.apply("transform value ['a','bb','ccc'] 
| type list | slice 1 -1"), MutableList.of("bb"));
-        Asserts.assertEquals(transform.apply("transform value ['a','bb','ccc'] 
| type list | slice -1"), MutableList.of("ccc"));
+        Asserts.assertEquals(transform("value ['a','bb','ccc'] | type list | 
slice 1"), MutableList.of("bb", "ccc"));
+        Asserts.assertEquals(transform("value ['a','bb','ccc'] | type list | 
slice 1 -1"), MutableList.of("bb"));
+        Asserts.assertEquals(transform("value ['a','bb','ccc'] | type list | 
slice -1"), MutableList.of("ccc"));
 
         // slice string
-        Asserts.assertEquals(transform.apply("transform value abc | slice 1"), 
"bc");
+        Asserts.assertEquals(transform("value abc | slice 1"), "bc");
+
+        // append and prepend list
+        Asserts.assertEquals(transform("value ['a','bb'] | type list | append 
ccc"), MutableList.of("a", "bb", "ccc"));
+        Asserts.assertEquals(runWorkflowSteps(
+                "transform value ['ccc'] | type list | set c",
+                "transform value ['a','bb'] | type list | append ${c}"
+            ), MutableList.of("a", "bb", MutableList.of("ccc")));
+        Asserts.assertEquals(transform("value ['a','bb'] | type list | prepend 
ccc"), MutableList.of("ccc", "a", "bb"));
 
-        // append list
-        Asserts.assertEquals(transform.apply("transform value ['a','bb'] | 
type list | append ccc"), MutableList.of("a", "bb", "ccc"));
-        Asserts.assertEquals(transform.apply("transform value ['ccc'] | type 
list | set c\n" +
-                "- transform value ['a','bb'] | type list | append ${c}"), 
MutableList.of("a", "bb", MutableList.of("ccc")));
+        // append and prepend string
+        Asserts.assertEquals(transform("value hello | append _world"), 
"hello_world");
+        // TODO this fails
+//        Asserts.assertEquals(transform("value hello | append \" world\""), 
"hello world");
 
         // remove list
-        Asserts.assertEquals(transform.apply("transform value ['a','bb','ccc'] 
| type list | remove 1"), MutableList.of("a", "ccc"));
+        Asserts.assertEquals(transform("value ['a','bb','ccc'] | type list | 
remove 1"), MutableList.of("a", "ccc"));
 
         // remove map
-        Asserts.assertEquals(transform.apply("step: transform\n" +
-                "  transform: type map | remove b\n" +
-                "  value:\n" +
-                "    a: 1\n" +
-                "    b: 2"), MutableMap.of("a", 1));
+        Asserts.assertEquals(
+                runWorkflowSteps(
+                    "step: transform\n" +
+                    "transform: type map | remove b\n" +
+                    "value:\n" +
+                    "  a: 1\n" +
+                    "  b: 2"),
+                MutableMap.of("a", 1));
     }
 
 }

Reply via email to