From 8336ab5cae71ef30b2935a858c1a2dacda11f2a6 Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Fri, 24 Jun 2022 19:15:50 +0800 Subject: [PATCH] =?UTF-8?q?feature=20#I5CW7I=20=E3=80=90=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=89=B9=E6=80=A7=E3=80=91=E6=9E=84=E9=80=A0=E5=85=A8=E6=96=B0?= =?UTF-8?q?=E7=9A=84EL=E8=A7=84=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/builder/LiteFlowNodeBuilder.java | 7 - .../builder/el/LiteFlowChainELBuilder.java | 10 +- .../com/yomahub/liteflow/flow/FlowBus.java | 4 + .../liteflow/spring/ComponentScanner.java | 1 + .../AbsoluteConfigPathELSpringbootTest.java | 41 ++++++ .../test/absoluteConfigPath/cmp/ACmp.java | 20 +++ .../test/absoluteConfigPath/cmp/BCmp.java | 21 +++ .../test/absoluteConfigPath/cmp/CCmp.java | 21 +++ .../test/aop/CustomAOPELSpringbootTest.java | 56 +++++++ .../test/aop/GlobalAOPELSpringbootTest.java | 79 ++++++++++ .../liteflow/test/aop/aspect/CmpAspect.java | 20 +++ .../test/aop/aspect/CustomAspect.java | 27 ++++ .../yomahub/liteflow/test/aop/cmp1/ACmp.java | 21 +++ .../yomahub/liteflow/test/aop/cmp1/BCmp.java | 21 +++ .../yomahub/liteflow/test/aop/cmp1/CCmp.java | 21 +++ .../yomahub/liteflow/test/aop/cmp2/DCmp.java | 21 +++ .../yomahub/liteflow/test/aop/cmp2/ECmp.java | 21 +++ .../yomahub/liteflow/test/aop/cmp2/FCmp.java | 21 +++ .../asyncNode/AsyncNodeELSpringbootTest.java | 139 ++++++++++++++++++ .../liteflow/test/asyncNode/cmp/ACmp.java | 24 +++ .../liteflow/test/asyncNode/cmp/BCmp.java | 24 +++ .../liteflow/test/asyncNode/cmp/CCmp.java | 24 +++ .../liteflow/test/asyncNode/cmp/DCmp.java | 25 ++++ .../liteflow/test/asyncNode/cmp/ECmp.java | 15 ++ .../liteflow/test/asyncNode/cmp/FCmp.java | 14 ++ .../liteflow/test/asyncNode/cmp/GCmp.java | 26 ++++ .../liteflow/test/asyncNode/cmp/HCmp.java | 26 ++++ .../liteflow/test/asyncNode/cmp/ICmp.java | 24 +++ .../liteflow/test/asyncNode/cmp/JCmp.java | 15 ++ .../asyncNode/exception/TestException.java | 4 + .../builder/BuilderELSpringbootTest1.java | 138 +++++++++++++++++ .../builder/BuilderELSpringbootTest2.java | 41 ++++++ .../liteflow/test/builder/cmp1/ACmp.java | 18 +++ .../liteflow/test/builder/cmp1/BCmp.java | 19 +++ .../liteflow/test/builder/cmp1/CCmp.java | 19 +++ .../liteflow/test/builder/cmp1/DCmp.java | 19 +++ .../liteflow/test/builder/cmp1/ECmp.java | 20 +++ .../liteflow/test/builder/cmp1/FCmp.java | 19 +++ .../liteflow/test/builder/cmp1/GCmp.java | 19 +++ .../liteflow/test/builder/cmp2/HCmp.java | 21 +++ .../liteflow/test/builder/cmp2/ICmp.java | 21 +++ .../liteflow/test/builder/cmp2/JCmp.java | 21 +++ .../absoluteConfigPath/application.properties | 1 + .../resources/absoluteConfigPath/flow.el.xml | 7 + .../test/resources/aop/application.properties | 1 + .../src/test/resources/aop/flow.el.xml | 14 ++ .../asyncNode/application.properties | 1 + .../src/test/resources/asyncNode/flow.el.xml | 49 ++++++ .../liteflow/test/builder/BuilderTest.java | 28 ++-- .../test/builder/BuilderSpringbootTest1.java | 28 ++-- .../test/builder/BuilderSpringTest1.java | 28 ++-- 51 files changed, 1275 insertions(+), 50 deletions(-) create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/AbsoluteConfigPathELSpringbootTest.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/ACmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/BCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/CCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/CustomAOPELSpringbootTest.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringbootTest.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CustomAspect.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/ACmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/BCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/CCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/DCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/ECmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/FCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/AsyncNodeELSpringbootTest.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ACmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/BCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/CCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/DCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ECmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/FCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/GCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/HCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ICmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/JCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/exception/TestException.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest1.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/ACmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/BCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/CCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/DCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/ECmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/FCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/GCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/HCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/ICmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/JCmp.java create mode 100644 liteflow-testcase-el-springboot/src/test/resources/absoluteConfigPath/application.properties create mode 100644 liteflow-testcase-el-springboot/src/test/resources/absoluteConfigPath/flow.el.xml create mode 100644 liteflow-testcase-el-springboot/src/test/resources/aop/application.properties create mode 100644 liteflow-testcase-el-springboot/src/test/resources/aop/flow.el.xml create mode 100644 liteflow-testcase-el-springboot/src/test/resources/asyncNode/application.properties create mode 100644 liteflow-testcase-el-springboot/src/test/resources/asyncNode/flow.el.xml diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowNodeBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowNodeBuilder.java index 9e872577c..06a77a13b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowNodeBuilder.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowNodeBuilder.java @@ -83,13 +83,6 @@ public class LiteFlowNodeBuilder { return this; } - // 设置节点组件的class - public LiteFlowNodeBuilder setNodeComponentClazz(Class nodeComponentClass) { - assert nodeComponentClass != null; - setClazz(nodeComponentClass.getName()); - return this; - } - public LiteFlowNodeBuilder setType(NodeTypeEnum type) { this.node.setType(type); return this; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java index f048d3066..18dbb2c43 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java @@ -88,9 +88,17 @@ public class LiteFlowChainELBuilder { public LiteFlowChainELBuilder setEL(String elStr) { List errorList = new ArrayList<>(); try{ - //往上下文里放入所有的node,使得el表达式可以直接引用到nodeId DefaultContext context = new DefaultContext<>(); + + //往上下文里放入所有的node,使得el表达式可以直接引用到nodeId FlowBus.getNodeMap().keySet().forEach(nodeId -> context.put(nodeId, FlowBus.copyNode(nodeId))); + + //往上下文里放入所有的chain,是的el表达式可以直接引用到chain + FlowBus.getChainMap().values().forEach(chain -> context.put(chain.getChainName(), chain)); + + //解析el成为一个Condition + //为什么这里只是一个Condition,而不是一个List呢 + //这里无论多复杂的,外面必定有一个最外层的Condition,所以这里只有一个,内部可以嵌套很多层,这点和以前的不太一样 Condition condition = (Condition) expressRunner.execute(elStr, context, errorList, false, true); //从condition的第一层嵌套结构里拿出Pre和Finally节点 diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java index 1c5578ade..358f5e88a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java @@ -205,6 +205,10 @@ public class FlowBus { return nodeMap; } + public static Map getChainMap(){ + return chainMap; + } + public static void cleanCache() { chainMap.clear(); nodeMap.clear(); diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java index 13c5d4bdd..ffbde9a47 100644 --- a/liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java @@ -10,6 +10,7 @@ package com.yomahub.liteflow.spring; import com.yomahub.liteflow.aop.ICmpAroundAspect; import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.util.LOGOPrinter; import com.yomahub.liteflow.util.LiteFlowProxyUtil; diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/AbsoluteConfigPathELSpringbootTest.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/AbsoluteConfigPathELSpringbootTest.java new file mode 100644 index 000000000..d2bea0270 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/AbsoluteConfigPathELSpringbootTest.java @@ -0,0 +1,41 @@ +package com.yomahub.liteflow.test.absoluteConfigPath; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * springboot环境下异步线程超时日志打印测试 + * @author Bryan.Zhang + * @since 2.6.4 + */ +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/absoluteConfigPath/application.properties") +@SpringBootTest(classes = AbsoluteConfigPathELSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.absoluteConfigPath.cmp"}) +public class AbsoluteConfigPathELSpringbootTest extends BaseTest { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testAbsoluteConfig() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertTrue(response.isSuccess()); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/ACmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/ACmp.java new file mode 100644 index 000000000..74091479f --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/ACmp.java @@ -0,0 +1,20 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.absoluteConfigPath.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("a") +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/BCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/BCmp.java new file mode 100644 index 000000000..0f162d805 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/BCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.absoluteConfigPath.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("b") +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/CCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/CCmp.java new file mode 100644 index 000000000..2da1ea352 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/absoluteConfigPath/cmp/CCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.absoluteConfigPath.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("c") +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/CustomAOPELSpringbootTest.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/CustomAOPELSpringbootTest.java new file mode 100644 index 000000000..2991ce3cb --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/CustomAOPELSpringbootTest.java @@ -0,0 +1,56 @@ +package com.yomahub.liteflow.test.aop; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.aop.aspect.CustomAspect; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * 切面场景单元测试 + * @author Bryan.Zhang + */ +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/aop/application.properties") +@SpringBootTest(classes = CustomAOPELSpringbootTest.class) +@EnableAutoConfiguration +@Import(CustomAspect.class) +@ComponentScan({"com.yomahub.liteflow.test.aop.cmp1","com.yomahub.liteflow.test.aop.cmp2"}) +public class CustomAOPELSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + //测试自定义AOP,串行场景 + @Test + public void testCustomAopS() { + LiteflowResponse response= flowExecutor.execute2Resp("chain1", "it's a request"); + DefaultContext context = response.getFirstContextBean(); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("before_after", context.getData("a")); + Assert.assertEquals("before_after", context.getData("b")); + Assert.assertEquals("before_after", context.getData("c")); + } + + //测试自定义AOP,并行场景 + @Test + public void testCustomAopP() { + LiteflowResponse response= flowExecutor.execute2Resp("chain2", "it's a request"); + DefaultContext context = response.getFirstContextBean(); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("before_after", context.getData("a")); + Assert.assertEquals("before_after", context.getData("b")); + Assert.assertEquals("before_after", context.getData("c")); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringbootTest.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringbootTest.java new file mode 100644 index 000000000..4e8d921cd --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringbootTest.java @@ -0,0 +1,79 @@ +package com.yomahub.liteflow.test.aop; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.spring.ComponentScanner; +import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.aop.aspect.CmpAspect; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * 切面场景单元测试 + * @author Bryan.Zhang + */ +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/aop/application.properties") +@SpringBootTest(classes = GlobalAOPELSpringbootTest.class) +@EnableAutoConfiguration +@Import(CmpAspect.class) +@ComponentScan({"com.yomahub.liteflow.test.aop.cmp1","com.yomahub.liteflow.test.aop.cmp2"}) +public class GlobalAOPELSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + //测试全局AOP,串行场景 + @Test + public void testGlobalAopS() { + LiteflowResponse response= flowExecutor.execute2Resp("chain1", "it's a request"); + DefaultContext context = response.getFirstContextBean(); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("before_after", context.getData("a")); + Assert.assertEquals("before_after", context.getData("b")); + Assert.assertEquals("before_after", context.getData("c")); + Assert.assertEquals("before_after", context.getData("d")); + Assert.assertEquals("before_after", context.getData("e")); + } + + //测试全局AOP,并行场景 + @Test + public void testGlobalAopP() { + LiteflowResponse response= flowExecutor.execute2Resp("chain2", "it's a request"); + DefaultContext context = response.getFirstContextBean(); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("before_after", context.getData("a")); + Assert.assertEquals("before_after", context.getData("b")); + Assert.assertEquals("before_after", context.getData("c")); + Assert.assertEquals("before_after", context.getData("d")); + Assert.assertEquals("before_after", context.getData("e")); + } + + @Test + public void testGlobalAopException() { + LiteflowResponse response= flowExecutor.execute2Resp("chain3", "it's a request"); + DefaultContext context = response.getFirstContextBean(); + Assert.assertFalse(response.isSuccess()); + Assert.assertEquals("before_after", context.getData("a")); + Assert.assertEquals("before_after", context.getData("b")); + Assert.assertEquals("before_after", context.getData("c")); + Assert.assertEquals("before_after", context.getData("f")); + } + + @AfterClass + public static void cleanScanCache(){ + BaseTest.cleanScanCache(); + ComponentScanner.cmpAroundAspect = null; + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java new file mode 100644 index 000000000..3704a146d --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java @@ -0,0 +1,20 @@ +package com.yomahub.liteflow.test.aop.aspect; + +import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.aop.ICmpAroundAspect; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.slot.Slot; + +public class CmpAspect implements ICmpAroundAspect { + @Override + public void beforeProcess(String nodeId, Slot slot) { + DefaultContext context = slot.getFirstContextBean(); + context.setData(nodeId, "before"); + } + + @Override + public void afterProcess(String nodeId, Slot slot) { + DefaultContext context = slot.getFirstContextBean(); + context.setData(nodeId, StrUtil.format("{}_{}", context.getData(nodeId), "after")); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CustomAspect.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CustomAspect.java new file mode 100644 index 000000000..c1421dbe6 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CustomAspect.java @@ -0,0 +1,27 @@ +package com.yomahub.liteflow.test.aop.aspect; + +import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; + +@Aspect +public class CustomAspect { + + @Pointcut("execution(* com.yomahub.liteflow.test.aop.cmp1.*.process())") + public void cut() { + } + + @Around("cut()") + public Object around(ProceedingJoinPoint jp) throws Throwable { + NodeComponent cmp = (NodeComponent) jp.getThis(); + DefaultContext context = cmp.getFirstContextBean(); + context.setData(cmp.getNodeId(), "before"); + Object returnObj = jp.proceed(); + context.setData(cmp.getNodeId(), StrUtil.format("{}_{}", context.getData(cmp.getNodeId()), "after")); + return returnObj; + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/ACmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/ACmp.java new file mode 100644 index 000000000..7fd947163 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/ACmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.aop.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("a") +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("Acomp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/BCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/BCmp.java new file mode 100644 index 000000000..d99d2a1e6 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/BCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.aop.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("b") +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("Bcomp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/CCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/CCmp.java new file mode 100644 index 000000000..7a2181438 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp1/CCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.aop.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("c") +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("Ccomp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/DCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/DCmp.java new file mode 100644 index 000000000..eb8ae7648 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/DCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.aop.cmp2; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("d") +public class DCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("Dcomp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/ECmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/ECmp.java new file mode 100644 index 000000000..ce0319d44 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/ECmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.aop.cmp2; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("e") +public class ECmp extends NodeComponent { + + @Override + public void process() { + System.out.println("Ecomp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/FCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/FCmp.java new file mode 100644 index 000000000..0fa254ffe --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/cmp2/FCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.aop.cmp2; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("f") +public class FCmp extends NodeComponent { + + @Override + public void process() { + throw new RuntimeException("test error"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/AsyncNodeELSpringbootTest.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/AsyncNodeELSpringbootTest.java new file mode 100644 index 000000000..1f109d964 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/AsyncNodeELSpringbootTest.java @@ -0,0 +1,139 @@ +package com.yomahub.liteflow.test.asyncNode; + +import cn.hutool.core.collection.ListUtil; +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.asyncNode.exception.TestException; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * 测试隐式调用子流程 + * 单元测试 + * + * @author ssss + */ +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/asyncNode/application.properties") +@SpringBootTest(classes = AsyncNodeELSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.asyncNode.cmp"}) +public class AsyncNodeELSpringbootTest extends BaseTest { + @Resource + private FlowExecutor flowExecutor; + + /***** + * 标准chain 嵌套选择 嵌套子chain进行执行 + * 验证了when情况下 多个node是并行执行 + * 验证了默认参数情况下 when可以加载执行 + * **/ + @Test + public void testAsyncFlow1() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "it's a base request"); + Assert.assertTrue(response.isSuccess()); + System.out.println(response.getExecuteStepStr()); + } + + //这个和test1有点类似,只不过进一步验证了步骤 + @Test + public void testAsyncFlow2() { + LiteflowResponse response = flowExecutor.execute2Resp("chain2", "it's a base request"); + Assert.assertTrue(ListUtil.toList("b==>j==>g==>f==>h","b==>j==>g==>h==>f", + "b==>j==>h==>g==>f","b==>j==>h==>f==>g", + "b==>j==>f==>h==>g","b==>j==>f==>g==>h" + ).contains(response.getExecuteStepStr())); + } + + //测试errorResume,默认的errorResume为false,这里测试默认的 + @Test + public void testAsyncFlow3_1() { + LiteflowResponse response = flowExecutor.execute2Resp("chain3-1", "it's a base request"); + Assert.assertFalse(response.isSuccess()); + Assert.assertEquals(response.getSlot().getException().getClass(), TestException.class); + } + + //测试errorResume,默认的errorResume为false,这里设置为true + @Test + public void testAsyncFlow3_2() { + LiteflowResponse response = flowExecutor.execute2Resp("chain3-2", "it's a base request"); + Assert.assertTrue(response.isSuccess()); + } + + //相同group的并行组,会合并,并且errorResume根据第一个when来,这里第一个when配置了不抛错 + @Test + public void testAsyncFlow4() { + LiteflowResponse response = flowExecutor.execute2Resp("chain4", "it's a base request"); + //因为不记录错误,所以最终结果是true + Assert.assertTrue(response.isSuccess()); + //因为是并行组,所以即便抛错了,其他组件也会执行,i在流程里配置了2遍,i抛错,但是也执行了2遍,这里验证下 + DefaultContext context = response.getFirstContextBean(); + Integer count = context.getData("count"); + Assert.assertEquals(new Integer(2), count); + //因为配置了不抛错,所以response里的cause应该为null + Assert.assertNull(response.getCause()); + } + + //相同group的并行组,会合并,并且errorResume根据第一个when来,这里第一个when配置了会抛错 + @Test + public void testAsyncFlow5() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain5", "it's a base request"); + //整个并行组是报错的,所以最终结果是false + Assert.assertFalse(response.isSuccess()); + //因为是并行组,所以即便抛错了,其他组件也会执行,i在流程里配置了2遍,i抛错,但是也执行了2遍,这里验证下 + DefaultContext context = response.getFirstContextBean(); + Integer count = context.getData("count"); + Assert.assertEquals(new Integer(2), count); + //因为第一个when配置了会报错,所以response里的cause里应该会有TestException + Assert.assertEquals(TestException.class, response.getCause().getClass()); + } + + //不同group的并行组,不会合并,第一个when的errorResume是false,会抛错,那第二个when就不会执行 + @Test + public void testAsyncFlow6() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain6", "it's a base request"); + //第一个when会抛错,所以最终结果是false + Assert.assertFalse(response.isSuccess()); + //因为是不同组并行组,第一组的when里的i就抛错了,所以i就执行了1遍 + DefaultContext context = response.getFirstContextBean(); + Integer count = context.getData("count"); + Assert.assertEquals(new Integer(1), count); + //第一个when会报错,所以最终response的cause里应该会有TestException + Assert.assertEquals(TestException.class, response.getCause().getClass()); + } + + //不同group的并行组,不会合并,第一个when的errorResume是true,不会报错,那第二个when还会继续执行,但是第二个when的errorResume是false,所以第二个when会报错 + @Test + public void testAsyncFlow7() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain7", "it's a base request"); + //第二个when会抛错,所以最终结果是false + Assert.assertFalse(response.isSuccess()); + // 传递了slotIndex,则set的size==2 + DefaultContext context = response.getFirstContextBean(); + Integer count = context.getData("count"); + Assert.assertEquals(new Integer(2), count); + //第一个when会报错,所以最终response的cause里应该会有TestException + Assert.assertEquals(TestException.class, response.getCause().getClass()); + } + + //测试任意异步一个执行完即继续的场景 + //d g h并行,配置了any=true,其中d耗时1秒,g耗时0.5秒,其他都不设耗时 + //最终执行效果应该是h先返回,然后执行abc,最后gd + //这里要注意的是,由于step是先加入,所以step的打印顺序并不是这样的。但是实际执行是正确的 + @Test + public void testAsyncFlow8() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain8", "it's a base request"); + DefaultContext context = response.getFirstContextBean(); + Assert.assertTrue(response.isSuccess()); + Assert.assertTrue(context.getData("check").toString().startsWith("habc")); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ACmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ACmp.java new file mode 100644 index 000000000..db853a3f1 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ACmp.java @@ -0,0 +1,24 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + + +@Component("a") +public class ACmp extends NodeComponent { + @Override + public void process() { + DefaultContext context = this.getFirstContextBean(); + synchronized (NodeComponent.class){ + if (context.hasData("check")){ + String str = context.getData("check"); + str += this.getNodeId(); + context.setData("check", str); + }else{ + context.setData("check", this.getNodeId()); + } + } + System.out.println("Acomp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/BCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/BCmp.java new file mode 100644 index 000000000..fe8273273 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/BCmp.java @@ -0,0 +1,24 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + + +@Component("b") +public class BCmp extends NodeComponent { + @Override + public void process() { + DefaultContext context = this.getFirstContextBean(); + synchronized (NodeComponent.class){ + if (context.hasData("check")){ + String str = context.getData("check"); + str += this.getNodeId(); + context.setData("check", str); + }else{ + context.setData("check", this.getNodeId()); + } + } + System.out.println("Bcomp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/CCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/CCmp.java new file mode 100644 index 000000000..86173912e --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/CCmp.java @@ -0,0 +1,24 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + + +@Component("c") +public class CCmp extends NodeComponent { + @Override + public void process() throws Exception { + DefaultContext context = this.getFirstContextBean(); + synchronized (NodeComponent.class){ + if (context.hasData("check")){ + String str = context.getData("check"); + str += this.getNodeId(); + context.setData("check", str); + }else{ + context.setData("check", this.getNodeId()); + } + } + System.out.println("Ccomp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/DCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/DCmp.java new file mode 100644 index 000000000..0b764ef60 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/DCmp.java @@ -0,0 +1,25 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + + +@Component("d") +public class DCmp extends NodeComponent { + @Override + public void process() throws Exception { + Thread.sleep(1000); + DefaultContext context = this.getFirstContextBean(); + synchronized (NodeComponent.class){ + if (context.hasData("check")){ + String str = context.getData("check"); + str += this.getNodeId(); + context.setData("check", str); + }else{ + context.setData("check", this.getNodeId()); + } + } + System.out.println("Dcomp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ECmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ECmp.java new file mode 100644 index 000000000..636bea632 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ECmp.java @@ -0,0 +1,15 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeSwitchComponent; +import org.springframework.stereotype.Component; + + +@Component("e") +public class ECmp extends NodeSwitchComponent { + + @Override + public String processCond() throws Exception { + System.out.println("Ecomp executed!"); + return "g"; + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/FCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/FCmp.java new file mode 100644 index 000000000..eb9322c81 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/FCmp.java @@ -0,0 +1,14 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + + +@Component("f") +public class FCmp extends NodeComponent { + + @Override + public void process() throws Exception { + System.out.println("Fcomp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/GCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/GCmp.java new file mode 100644 index 000000000..6044be036 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/GCmp.java @@ -0,0 +1,26 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + + +@Component("g") +public class GCmp extends NodeComponent { + + @Override + public void process() throws Exception { + Thread.sleep(500); + DefaultContext context = this.getFirstContextBean(); + synchronized (NodeComponent.class){ + if (context.hasData("check")){ + String str = context.getData("check"); + str += this.getNodeId(); + context.setData("check", str); + }else{ + context.setData("check", this.getNodeId()); + } + } + System.out.println("Gcomp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/HCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/HCmp.java new file mode 100644 index 000000000..a4fd8a934 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/HCmp.java @@ -0,0 +1,26 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + + +@Component("h") +public class HCmp extends NodeComponent { + + @Override + public void process() throws Exception { + DefaultContext context = this.getFirstContextBean(); + synchronized (NodeComponent.class){ + if (context.hasData("check")){ + String str = context.getData("check"); + str += this.getNodeId(); + context.setData("check", str); + }else{ + context.setData("check", this.getNodeId()); + } + } + + System.out.println("Hcomp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ICmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ICmp.java new file mode 100644 index 000000000..ba694aba0 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/ICmp.java @@ -0,0 +1,24 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.test.asyncNode.exception.TestException; +import org.springframework.stereotype.Component; + + +@Component("i") +public class ICmp extends NodeComponent { + + @Override + public void process() throws Exception { + DefaultContext context = this.getFirstContextBean(); + if (context.hasData("count")){ + Integer count = context.getData("count"); + context.setData("count", ++count); + } else{ + context.setData("count", 1); + } + System.out.println("Icomp executed! throw Exception!"); + throw new TestException(); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/JCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/JCmp.java new file mode 100644 index 000000000..912833cd2 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/cmp/JCmp.java @@ -0,0 +1,15 @@ +package com.yomahub.liteflow.test.asyncNode.cmp; + +import com.yomahub.liteflow.core.NodeSwitchComponent; +import org.springframework.stereotype.Component; + + +@Component("j") +public class JCmp extends NodeSwitchComponent { + + @Override + public String processCond() throws Exception { + System.out.println("Jcomp executed!"); + return "chain3"; + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/exception/TestException.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/exception/TestException.java new file mode 100644 index 000000000..e786e9f86 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/asyncNode/exception/TestException.java @@ -0,0 +1,4 @@ +package com.yomahub.liteflow.test.asyncNode.exception; + +public class TestException extends Exception{ +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest1.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest1.java new file mode 100644 index 000000000..8a2ca5cf9 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest1.java @@ -0,0 +1,138 @@ +package com.yomahub.liteflow.test.builder; + +import com.yomahub.liteflow.builder.LiteFlowChainBuilder; +import com.yomahub.liteflow.builder.LiteFlowConditionBuilder; +import com.yomahub.liteflow.builder.LiteFlowNodeBuilder; +import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder; +import com.yomahub.liteflow.builder.entity.ExecutableEntity; +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.enums.NodeTypeEnum; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.builder.cmp1.*; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +//基于builder模式的单元测试 +//这里只是最基本的builder模式的测试,只是为了验证在springboot模式下的正常性 +//更详细的builder模式测试用例会单独拉testcase去做 +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BuilderELSpringbootTest1.class) +@EnableAutoConfiguration +public class BuilderELSpringbootTest1 extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + //基于普通组件的builder模式测试 + @Test + public void testBuilder() throws Exception { + LiteFlowNodeBuilder.createNode().setId("a") + .setName("组件A") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp1.ACmp") + .build(); + LiteFlowNodeBuilder.createNode().setId("b") + .setName("组件B") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp1.BCmp") + .build(); + LiteFlowNodeBuilder.createNode().setId("c") + .setName("组件C") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp1.CCmp") + .build(); + LiteFlowNodeBuilder.createNode().setId("d") + .setName("组件D") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp1.DCmp") + .build(); + LiteFlowNodeBuilder.createNode().setId("e") + .setName("组件E") + .setType(NodeTypeEnum.SWITCH) + .setClazz("com.yomahub.liteflow.test.builder.cmp1.ECmp") + .build(); + LiteFlowNodeBuilder.createNode().setId("f") + .setName("组件F") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp1.FCmp") + .build(); + LiteFlowNodeBuilder.createNode().setId("g") + .setName("组件G") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp1.GCmp") + .build(); + + + LiteFlowChainELBuilder.createChain().setChainName("chain2").setEL( + "THEN(c, d)" + ).build(); + + LiteFlowChainELBuilder.createChain().setChainName("chain1").setEL( + "THEN(a, b, WHEN(SWITCH(e).to(f, g, chain2)))" + ).build(); + + LiteflowResponse response = flowExecutor.execute2Resp("chain1"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a[组件A]==>b[组件B]==>e[组件E]==>c[组件C]==>d[组件D]", response.getExecuteStepStr()); + } + + //基于普通组件的builder模式测试 + @Test + public void testBuilderForClassAndCode() throws Exception { + LiteFlowNodeBuilder.createNode().setId("a") + .setName("组件A") + .setType(NodeTypeEnum.COMMON) + .setClazz(ACmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("b") + .setName("组件B") + .setType(NodeTypeEnum.COMMON) + .setClazz(BCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("c") + .setName("组件C") + .setType(NodeTypeEnum.COMMON) + .setClazz(CCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("d") + .setName("组件D") + .setType(NodeTypeEnum.COMMON) + .setClazz(DCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("e") + .setName("组件E") + .setType(NodeTypeEnum.SWITCH) + .setClazz(ECmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("f") + .setName("组件F") + .setType(NodeTypeEnum.COMMON) + .setClazz(FCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("g") + .setName("组件G") + .setType(NodeTypeEnum.COMMON) + .setClazz(GCmp.class) + .build(); + + + LiteFlowChainELBuilder.createChain().setChainName("chain2").setEL( + "THEN(c, d)" + ).build(); + + LiteFlowChainELBuilder.createChain().setChainName("chain1").setEL( + "THEN(a, b, WHEN(SWITCH(e).to(f, g, chain2)))" + ).build(); + + LiteflowResponse response = flowExecutor.execute2Resp("chain1"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a[组件A]==>b[组件B]==>e[组件E]==>c[组件C]==>d[组件D]", response.getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java new file mode 100644 index 000000000..6f1e8dd06 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java @@ -0,0 +1,41 @@ +package com.yomahub.liteflow.test.builder; + +import com.yomahub.liteflow.builder.LiteFlowChainBuilder; +import com.yomahub.liteflow.builder.LiteFlowConditionBuilder; +import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder; +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +//基于builder模式的单元测试 +//这里测试的是通过spring去扫描,但是通过代码去构建chain的用例 +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BuilderELSpringbootTest2.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.builder.cmp2"}) +public class BuilderELSpringbootTest2 extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + //通过spring去扫描组件,通过代码去构建chain + @Test + public void testBuilder() throws Exception { + LiteFlowChainELBuilder.createChain().setChainName("chain1").setEL( + "THEN(h, i, j)" + ).build(); + + LiteflowResponse response = flowExecutor.execute2Resp("chain1"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("h==>i==>j", response.getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/ACmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/ACmp.java new file mode 100644 index 000000000..9fbbfba46 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/ACmp.java @@ -0,0 +1,18 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/BCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/BCmp.java new file mode 100644 index 000000000..80568e476 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/BCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/CCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/CCmp.java new file mode 100644 index 000000000..595bc33b8 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/CCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/DCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/DCmp.java new file mode 100644 index 000000000..7ab4fee26 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/DCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +public class DCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("DCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/ECmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/ECmp.java new file mode 100644 index 000000000..82a224318 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/ECmp.java @@ -0,0 +1,20 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp1; + +import com.yomahub.liteflow.core.NodeSwitchComponent; + +public class ECmp extends NodeSwitchComponent { + + @Override + public String processCond() throws Exception { + System.out.println("ECmp executed!"); + return "chain2"; + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/FCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/FCmp.java new file mode 100644 index 000000000..6cd712581 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/FCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +public class FCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("FCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/GCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/GCmp.java new file mode 100644 index 000000000..577a21edc --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp1/GCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +public class GCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("GCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/HCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/HCmp.java new file mode 100644 index 000000000..4ce8c7d48 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/HCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp2; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("h") +public class HCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("HCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/ICmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/ICmp.java new file mode 100644 index 000000000..7f803a9fe --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/ICmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp2; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("i") +public class ICmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ICmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/JCmp.java b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/JCmp.java new file mode 100644 index 000000000..78a8c0c89 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/cmp2/JCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.builder.cmp2; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("j") +public class JCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("JCmp executed!"); + } + +} diff --git a/liteflow-testcase-el-springboot/src/test/resources/absoluteConfigPath/application.properties b/liteflow-testcase-el-springboot/src/test/resources/absoluteConfigPath/application.properties new file mode 100644 index 000000000..348a63af9 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/resources/absoluteConfigPath/application.properties @@ -0,0 +1 @@ +liteflow.rule-source=/usr/local/flow.el.xml \ No newline at end of file diff --git a/liteflow-testcase-el-springboot/src/test/resources/absoluteConfigPath/flow.el.xml b/liteflow-testcase-el-springboot/src/test/resources/absoluteConfigPath/flow.el.xml new file mode 100644 index 000000000..5788c3dc7 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/resources/absoluteConfigPath/flow.el.xml @@ -0,0 +1,7 @@ + + + + + WHEN(a,b,c) + + \ No newline at end of file diff --git a/liteflow-testcase-el-springboot/src/test/resources/aop/application.properties b/liteflow-testcase-el-springboot/src/test/resources/aop/application.properties new file mode 100644 index 000000000..0a8873bf3 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/resources/aop/application.properties @@ -0,0 +1 @@ +liteflow.rule-source=aop/flow.el.xml \ No newline at end of file diff --git a/liteflow-testcase-el-springboot/src/test/resources/aop/flow.el.xml b/liteflow-testcase-el-springboot/src/test/resources/aop/flow.el.xml new file mode 100644 index 000000000..c217cc576 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/resources/aop/flow.el.xml @@ -0,0 +1,14 @@ + + + + THEN(a,b,c,d,e) + + + + THEN(a,b,c,WHEN(d,e)) + + + + THEN(a,b,c,f) + + \ No newline at end of file diff --git a/liteflow-testcase-el-springboot/src/test/resources/asyncNode/application.properties b/liteflow-testcase-el-springboot/src/test/resources/asyncNode/application.properties new file mode 100644 index 000000000..69053aff5 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/resources/asyncNode/application.properties @@ -0,0 +1 @@ +liteflow.rule-source=asyncNode/flow.el.xml \ No newline at end of file diff --git a/liteflow-testcase-el-springboot/src/test/resources/asyncNode/flow.el.xml b/liteflow-testcase-el-springboot/src/test/resources/asyncNode/flow.el.xml new file mode 100644 index 000000000..d68b8a8f2 --- /dev/null +++ b/liteflow-testcase-el-springboot/src/test/resources/asyncNode/flow.el.xml @@ -0,0 +1,49 @@ + + + + + THEN( + a,b,c, + WHEN(d, SWITCH(e).to(f,g)), + chain2 + ) + + + + + THEN(b, SWITCH(j).to(a, chain3)) + + + + WHEN(g, f, h) + + + + THEN(WHEN(f, g, i), WHEN(h)) + + + + THEN(WHEN(f, g, i).ignoreError(true), WHEN(h)) + + + + THEN(a, b, c, WHEN(d, i, g, i, h).ignoreError(true)) + + + + THEN(a, b, c, WHEN(d, i, g, i, h)) + + + + THEN(a, b, c, WHEN(d, i), WHEN(g, i, h).ignoreError(true)) + + + + THEN(a, b, c, WHEN(d, i).ignoreError(true), WHEN(g, i, h)) + + + + THEN(WHEN(d, g, h).any(true), THEN(a, b, c)) + + + \ No newline at end of file diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java index f72a9f2d9..fe02596fb 100644 --- a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java @@ -96,37 +96,37 @@ public class BuilderTest extends BaseTest { LiteFlowNodeBuilder.createNode().setId("a") .setName("组件A") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(ACmp.class) + .setClazz(ACmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("b") .setName("组件B") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(BCmp.class) + .setClazz(BCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("c") .setName("组件C") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(CCmp.class) + .setClazz(CCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("d") .setName("组件D") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(DCmp.class) + .setClazz(DCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("e") .setName("组件E") .setType(NodeTypeEnum.SWITCH) - .setNodeComponentClazz(ECmp.class) + .setClazz(ECmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("f") .setName("组件F") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(FCmp.class) + .setClazz(FCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("g") .setName("组件G") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(GCmp.class) + .setClazz(GCmp.class) .build(); LiteFlowChainBuilder.createChain().setChainName("chain2").setCondition( @@ -153,37 +153,37 @@ public class BuilderTest extends BaseTest { LiteFlowNodeBuilder.createNode().setId("a") .setName("组件A") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(ACmp.class) + .setClazz(ACmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("b") .setName("组件B") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(BCmp.class) + .setClazz(BCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("c") .setName("组件C") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(CCmp.class) + .setClazz(CCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("d") .setName("组件D") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(DCmp.class) + .setClazz(DCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("e") .setName("组件E") .setType(NodeTypeEnum.SWITCH) - .setNodeComponentClazz(ECmp.class) + .setClazz(ECmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("f") .setName("组件F") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(FCmp.class) + .setClazz(FCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("g") .setName("组件G") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(GCmp.class) + .setClazz(GCmp.class) .build(); diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java index 80bef5ffc..ecdc78f2c 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java @@ -97,37 +97,37 @@ public class BuilderSpringbootTest1 extends BaseTest { LiteFlowNodeBuilder.createNode().setId("a") .setName("组件A") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(ACmp.class) + .setClazz(ACmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("b") .setName("组件B") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(BCmp.class) + .setClazz(BCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("c") .setName("组件C") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(CCmp.class) + .setClazz(CCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("d") .setName("组件D") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(DCmp.class) + .setClazz(DCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("e") .setName("组件E") .setType(NodeTypeEnum.SWITCH) - .setNodeComponentClazz(ECmp.class) + .setClazz(ECmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("f") .setName("组件F") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(FCmp.class) + .setClazz(FCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("g") .setName("组件G") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(GCmp.class) + .setClazz(GCmp.class) .build(); @@ -156,37 +156,37 @@ public class BuilderSpringbootTest1 extends BaseTest { LiteFlowNodeBuilder.createNode().setId("a") .setName("组件A") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(ACmp.class) + .setClazz(ACmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("b") .setName("组件B") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(BCmp.class) + .setClazz(BCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("c") .setName("组件C") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(CCmp.class) + .setClazz(CCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("d") .setName("组件D") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(DCmp.class) + .setClazz(DCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("e") .setName("组件E") .setType(NodeTypeEnum.SWITCH) - .setNodeComponentClazz(ECmp.class) + .setClazz(ECmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("f") .setName("组件F") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(FCmp.class) + .setClazz(FCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("g") .setName("组件G") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(GCmp.class) + .setClazz(GCmp.class) .build(); diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringTest1.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringTest1.java index ef95bcdab..b646d3b07 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringTest1.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringTest1.java @@ -91,37 +91,37 @@ public class BuilderSpringTest1 extends BaseTest { LiteFlowNodeBuilder.createNode().setId("a") .setName("组件A") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(ACmp.class) + .setClazz(ACmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("b") .setName("组件B") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(BCmp.class) + .setClazz(BCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("c") .setName("组件C") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(CCmp.class) + .setClazz(CCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("d") .setName("组件D") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(DCmp.class) + .setClazz(DCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("e") .setName("组件E") .setType(NodeTypeEnum.SWITCH) - .setNodeComponentClazz(ECmp.class) + .setClazz(ECmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("f") .setName("组件F") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(FCmp.class) + .setClazz(FCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("g") .setName("组件G") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(GCmp.class) + .setClazz(GCmp.class) .build(); @@ -148,37 +148,37 @@ public class BuilderSpringTest1 extends BaseTest { LiteFlowNodeBuilder.createNode().setId("a") .setName("组件A") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(ACmp.class) + .setClazz(ACmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("b") .setName("组件B") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(BCmp.class) + .setClazz(BCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("c") .setName("组件C") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(CCmp.class) + .setClazz(CCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("d") .setName("组件D") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(DCmp.class) + .setClazz(DCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("e") .setName("组件E") .setType(NodeTypeEnum.SWITCH) - .setNodeComponentClazz(ECmp.class) + .setClazz(ECmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("f") .setName("组件F") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(FCmp.class) + .setClazz(FCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("g") .setName("组件G") .setType(NodeTypeEnum.COMMON) - .setNodeComponentClazz(GCmp.class) + .setClazz(GCmp.class) .build();