From e8c24e41e1618797b7f9f2d74a607be535c3ae01 Mon Sep 17 00:00:00 2001 From: bryan31 Date: Mon, 28 Feb 2022 00:52:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/component/FlowExecutorTest.java | 85 +++++++++++++++++++ .../liteflow/test/component/cmp1/ACmp.java | 24 ++++++ .../liteflow/test/component/cmp1/BCmp.java | 27 ++++++ .../liteflow/test/component/cmp1/CCmp.java | 27 ++++++ .../liteflow/test/component/cmp1/DCmp.java | 24 ++++++ .../liteflow/test/component/cmp1/ECmp.java | 22 +++++ .../liteflow/test/component/cmp1/GCmp.java | 24 ++++++ .../liteflow/test/component/cmp1/HCmp.java | 18 ++++ .../test/component/cmp2/FCondCmp.java | 18 ++++ .../src/test/resources/component/flow.xml | 41 +++++++++ ...t.java => FlowExecutorSpringbootTest.java} | 11 ++- .../test/component/ComponentSpringTest.java | 4 +- 12 files changed, 317 insertions(+), 8 deletions(-) create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ACmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/BCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/CCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/DCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ECmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/GCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/HCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp2/FCondCmp.java create mode 100644 liteflow-testcase-nospring/src/test/resources/component/flow.xml rename liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/component/{FlowExecutorTest.java => FlowExecutorSpringbootTest.java} (92%) diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java new file mode 100644 index 000000000..5e5e3d80e --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java @@ -0,0 +1,85 @@ +package com.yomahub.liteflow.test.component; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.entity.data.DefaultSlot; +import com.yomahub.liteflow.entity.data.LiteflowResponse; +import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import java.lang.reflect.UndeclaredThrowableException; + +/** + * 组件功能点测试 + * 单元测试 + * + * @author donguo.tao + */ +public class FlowExecutorTest extends BaseTest { + + private static FlowExecutor flowExecutor; + + @BeforeClass + public static void init(){ + LiteflowConfig config = new LiteflowConfig(); + config.setRuleSource("component/flow.xml"); + flowExecutor = FlowExecutor.loadInstance(config); + } + + //isAccess方法的功能测试 + @Test + public void testIsAccess() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", 101); + Assert.assertTrue(response.isSuccess()); + Assert.assertNotNull(response.getSlot().getResponseData()); + } + + //组件抛错的功能点测试 + @Test(expected = ArithmeticException.class) + public void testComponentException() throws Throwable { + LiteflowResponse response = flowExecutor.execute2Resp("chain2", 0); + Assert.assertFalse(response.isSuccess()); + Assert.assertEquals("/ by zero", response.getMessage()); + throw response.getCause(); + } + + //isContinueOnError方法的功能点测试 + @Test + public void testIsContinueOnError() throws Throwable { + LiteflowResponse response = flowExecutor.execute2Resp("chain3", 0); + Assert.assertTrue(response.isSuccess()); + Assert.assertNull(response.getCause()); + } + + //isEnd方法的功能点测试 + @Test + public void testIsEnd() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain4", 10); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("d",response.getSlot().getExecuteStepStr()); + } + + //setIsEnd方法的功能点测试 + @Test + public void testSetIsEnd1() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain5", 10); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("e",response.getSlot().getExecuteStepStr()); + } + + //条件组件的功能点测试 + @Test + public void testNodeCondComponent() { + LiteflowResponse response = flowExecutor.execute2Resp("chain6", 0); + Assert.assertTrue(response.isSuccess()); + } + + //测试setIsEnd如果为true,continueError也为true,那不应该continue了 + @Test + public void testSetIsEnd2() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain7", 10); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("g",response.getSlot().getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ACmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ACmp.java new file mode 100644 index 000000000..8b8c800c9 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ACmp.java @@ -0,0 +1,24 @@ +package com.yomahub.liteflow.test.component.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +import java.util.Objects; + + +public class ACmp extends NodeComponent { + @Override + public void process() { + System.out.println("AComp executed!"); + this.getSlot().setResponseData("AComp executed!"); + } + + @Override + public boolean isAccess() { + Integer requestData = this.getSlot().getRequestData(); + if (Objects.nonNull(requestData) && requestData > 100){ + return true; + } + System.out.println("AComp isAccess false."); + return false; + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/BCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/BCmp.java new file mode 100644 index 000000000..f6840edb0 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/BCmp.java @@ -0,0 +1,27 @@ +package com.yomahub.liteflow.test.component.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +import java.util.Objects; + + +public class BCmp extends NodeComponent { + @Override + public void process() { + System.out.println("BComp executed!"); + Integer requestData = this.getSlot().getRequestData(); + Integer divisor = 130; + Integer result = divisor / requestData; + this.getSlot().setResponseData(result); + } + + @Override + public boolean isAccess() { + Integer requestData = this.getSlot().getRequestData(); + if (Objects.nonNull(requestData)){ + return true; + } + return false; + } + +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/CCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/CCmp.java new file mode 100644 index 000000000..7817b8e38 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/CCmp.java @@ -0,0 +1,27 @@ +package com.yomahub.liteflow.test.component.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +import java.util.Objects; + + +public class CCmp extends NodeComponent { + @Override + public void process() { + System.out.println("CComp executed!"); + Integer requestData = this.getSlot().getRequestData(); + Integer divisor = 130; + Integer result = divisor / requestData; + this.getSlot().setResponseData(result); + System.out.println("responseData="+Integer.parseInt(this.getSlot().getResponseData())); + } + + @Override + public boolean isContinueOnError() { + Integer requestData = this.getSlot().getRequestData(); + if (Objects.nonNull(requestData)){ + return true; + } + return false; + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/DCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/DCmp.java new file mode 100644 index 000000000..b90d1f53c --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/DCmp.java @@ -0,0 +1,24 @@ +package com.yomahub.liteflow.test.component.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +import java.util.Objects; + + +public class DCmp extends NodeComponent { + @Override + public void process() throws Exception { + System.out.println("DComp executed!"); + } + + @Override + public boolean isEnd() { + //组件的process执行完之后才会执行isEnd + Object requestData = this.getSlot().getResponseData(); + if (Objects.isNull(requestData)){ + System.out.println("DComp flow isEnd, because of responseData is null."); + return true; + } + return false; + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ECmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ECmp.java new file mode 100644 index 000000000..07aefacd4 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/ECmp.java @@ -0,0 +1,22 @@ +package com.yomahub.liteflow.test.component.cmp1; + +import com.alibaba.fastjson.JSON; +import com.yomahub.liteflow.core.NodeComponent; + +import java.util.Objects; + + +public class ECmp extends NodeComponent { + + @Override + public void process() throws Exception { + System.out.println("EComp executed!"); + Object responseData = this.getSlot().getResponseData(); + if (Objects.isNull(responseData)){ + System.out.println("EComp responseData flow must be set end ."); + //执行到某个条件时,手动结束流程。 + this.setIsEnd(true); + } + System.out.println("EComp responseData responseData=" + JSON.toJSONString(responseData)); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/GCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/GCmp.java new file mode 100644 index 000000000..2f0d6c958 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp1/GCmp.java @@ -0,0 +1,24 @@ +/** + *

Title: liteflow

+ *

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

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

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.component.cmp1; + +import com.yomahub.liteflow.core.NodeComponent; + +public class HCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("HCmp executed!"); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp2/FCondCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp2/FCondCmp.java new file mode 100644 index 000000000..fb8d78c22 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/component/cmp2/FCondCmp.java @@ -0,0 +1,18 @@ +package com.yomahub.liteflow.test.component.cmp2; + +import com.yomahub.liteflow.core.NodeCondComponent; +import java.util.Objects; + +public class FCondCmp extends NodeCondComponent { + @Override + public String processCond() { + Integer requestData = this.getSlot().getRequestData(); + if (Objects.isNull(requestData)){ + return "d"; + } else if(requestData == 0){ + return "c"; + } else { + return "b"; + } + } +} diff --git a/liteflow-testcase-nospring/src/test/resources/component/flow.xml b/liteflow-testcase-nospring/src/test/resources/component/flow.xml new file mode 100644 index 000000000..d688461e3 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/resources/component/flow.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorSpringbootTest.java similarity index 92% rename from liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java rename to liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorSpringbootTest.java index 99bbbaea2..498db251f 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorTest.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/component/FlowExecutorSpringbootTest.java @@ -3,7 +3,6 @@ package com.yomahub.liteflow.test.component; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.entity.data.DefaultSlot; import com.yomahub.liteflow.entity.data.LiteflowResponse; -import com.yomahub.liteflow.exception.ChainEndException; import com.yomahub.liteflow.test.BaseTest; import org.junit.Assert; import org.junit.Test; @@ -28,11 +27,11 @@ import java.lang.reflect.UndeclaredThrowableException; */ @RunWith(SpringRunner.class) @TestPropertySource(value = "classpath:/component/application.properties") -@SpringBootTest(classes = FlowExecutorTest.class) +@SpringBootTest(classes = FlowExecutorSpringbootTest.class) @EnableAutoConfiguration @ComponentScan({"com.yomahub.liteflow.test.component.cmp1","com.yomahub.liteflow.test.component.cmp2"}) -public class FlowExecutorTest extends BaseTest { - private static final Logger LOG = LoggerFactory.getLogger(FlowExecutorTest.class); +public class FlowExecutorSpringbootTest extends BaseTest { + private static final Logger LOG = LoggerFactory.getLogger(FlowExecutorSpringbootTest.class); @Resource private FlowExecutor flowExecutor; @@ -55,11 +54,11 @@ public class FlowExecutorTest extends BaseTest { } //isContinueOnError方法的功能点测试 - @Test(expected = UndeclaredThrowableException.class) + @Test public void testIsContinueOnError() throws Exception { LiteflowResponse response = flowExecutor.execute2Resp("chain3", 0); Assert.assertTrue(response.isSuccess()); - ReflectionUtils.rethrowException(response.getCause()); + Assert.assertNull(response.getCause()); } //isEnd方法的功能点测试 diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/component/ComponentSpringTest.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/component/ComponentSpringTest.java index 08e5d4a02..07dc5f874 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/component/ComponentSpringTest.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/component/ComponentSpringTest.java @@ -48,11 +48,11 @@ public class ComponentSpringTest extends BaseTest { } //isContinueOnError方法的功能点测试 - @Test(expected = UndeclaredThrowableException.class) + @Test public void testIsContinueOnError() throws Exception { LiteflowResponse response = flowExecutor.execute2Resp("chain3", 0); Assert.assertTrue(response.isSuccess()); - ReflectionUtils.rethrowException(response.getCause()); + Assert.assertNull(response.getCause()); } //isEnd方法的功能点测试