From 64aff87fb8973e79ec75adc7c19db9f577e324f7 Mon Sep 17 00:00:00 2001 From: bryan31 Date: Tue, 8 Mar 2022 00:39:26 +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 --- .../liteflow/test/tag/NodeTagJsonTest.java | 63 +++++++++++++++++ .../liteflow/test/tag/NodeTagXmlTest.java | 63 +++++++++++++++++ .../yomahub/liteflow/test/tag/cmp/ACmp.java | 28 ++++++++ .../yomahub/liteflow/test/tag/cmp/B1Cmp.java | 21 ++++++ .../yomahub/liteflow/test/tag/cmp/BCmp.java | 22 ++++++ .../yomahub/liteflow/test/tag/cmp/CCmp.java | 22 ++++++ .../yomahub/liteflow/test/tag/cmp/DCmp.java | 19 ++++++ .../yomahub/liteflow/test/tag/cmp/ECmp.java | 19 ++++++ .../yomahub/liteflow/test/tag/cmp/FCmp.java | 23 +++++++ .../yomahub/liteflow/test/tag/cmp/GCmp.java | 18 +++++ .../src/test/resources/tag/flow.json | 67 +++++++++++++++++++ .../src/test/resources/tag/flow.xml | 30 +++++++++ 12 files changed, 395 insertions(+) create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/NodeTagJsonTest.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/NodeTagXmlTest.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/DCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/ECmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/FCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/GCmp.java create mode 100644 liteflow-testcase-nospring/src/test/resources/tag/flow.json create mode 100644 liteflow-testcase-nospring/src/test/resources/tag/flow.xml diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/NodeTagJsonTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/NodeTagJsonTest.java new file mode 100644 index 000000000..bfc87da4d --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/NodeTagJsonTest.java @@ -0,0 +1,63 @@ +package com.yomahub.liteflow.test.tag; + +import cn.hutool.core.collection.ConcurrentHashSet; +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.core.FlowExecutorHolder; +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; + +/** + * 非spring环境下组件标签的测试 + * @author Bryan.Zhang + * @since 2.5.0 + */ +public class NodeTagJsonTest extends BaseTest { + + private static FlowExecutor flowExecutor; + + @BeforeClass + public static void init(){ + LiteflowConfig config = new LiteflowConfig(); + config.setRuleSource("tag/flow.json"); + flowExecutor = FlowExecutorHolder.loadInstance(config); + } + + @Test + public void testTag1() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("123",response.getSlot().getData("test")); + } + + @Test + public void testTag2() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain2", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a==>a==>a==>c==>e", response.getSlot().getExecuteStepStr()); + } + + //测试多线程when情况下的tag取值是否正确 + //这里循环多次的原因是,因为when多线程,有时候因为凑巧,可能正确。所以多次情况下在2.6.4版本肯定出错 + @Test + public void testTag3() throws Exception{ + for (int i = 0; i < 50; i++) { + LiteflowResponse response = flowExecutor.execute2Resp("chain3", "arg"); + Assert.assertTrue(response.isSuccess()); + ConcurrentHashSet testSet = response.getSlot().getData("test"); + Assert.assertEquals(3, testSet.size()); + } + } + + //测试tag是否能在isAccess中起效 + @Test + public void testTag4() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("g", response.getSlot().getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/NodeTagXmlTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/NodeTagXmlTest.java new file mode 100644 index 000000000..fe5964cdf --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/NodeTagXmlTest.java @@ -0,0 +1,63 @@ +package com.yomahub.liteflow.test.tag; + +import cn.hutool.core.collection.ConcurrentHashSet; +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.core.FlowExecutorHolder; +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; + +/** + * 非spring环境下组件标签的测试 + * @author Bryan.Zhang + * @since 2.5.0 + */ +public class NodeTagXmlTest extends BaseTest { + + private static FlowExecutor flowExecutor; + + @BeforeClass + public static void init(){ + LiteflowConfig config = new LiteflowConfig(); + config.setRuleSource("tag/flow.xml"); + flowExecutor = FlowExecutorHolder.loadInstance(config); + } + + @Test + public void testTag1() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("123",response.getSlot().getData("test")); + } + + @Test + public void testTag2() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain2", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a==>a==>a==>c==>e", response.getSlot().getExecuteStepStr()); + } + + //测试多线程when情况下的tag取值是否正确 + //这里循环多次的原因是,因为when多线程,有时候因为凑巧,可能正确。所以多次情况下在2.6.4版本肯定出错 + @Test + public void testTag3() throws Exception{ + for (int i = 0; i < 50; i++) { + LiteflowResponse response = flowExecutor.execute2Resp("chain3", "arg"); + Assert.assertTrue(response.isSuccess()); + ConcurrentHashSet testSet = response.getSlot().getData("test"); + Assert.assertEquals(3, testSet.size()); + } + } + + //测试tag是否能在isAccess中起效 + @Test + public void testTag4() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("g", response.getSlot().getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java new file mode 100644 index 000000000..b0ea2cbc3 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java @@ -0,0 +1,28 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.tag.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.entity.data.Slot; + +public class ACmp extends NodeComponent { + + @Override + public void process() { + String testKey = "test"; + + Slot slot = this.getSlot(); + if (slot.getData(testKey) == null){ + slot.setData(testKey,this.getTag()); + }else{ + String s = slot.getData(testKey); + s += this.getTag(); + slot.setData(testKey, s); + } + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java new file mode 100644 index 000000000..8ed9e7dd4 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.tag.cmp; + +import cn.hutool.core.collection.ConcurrentHashSet; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.entity.data.Slot; + +public class B1Cmp extends NodeComponent { + + @Override + public void process() { + Slot slot = this.getSlot(); + slot.setData("test",new ConcurrentHashSet()); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java new file mode 100644 index 000000000..6f99a4132 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java @@ -0,0 +1,22 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.tag.cmp; + +import cn.hutool.core.collection.ConcurrentHashSet; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.entity.data.Slot; + +public class BCmp extends NodeComponent { + + @Override + public void process() { + Slot slot = this.getSlot(); + ConcurrentHashSet testSet = slot.getData("test"); + testSet.add(this.getTag()); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java new file mode 100644 index 000000000..2cbff0cb3 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java @@ -0,0 +1,22 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.tag.cmp; + +import com.yomahub.liteflow.core.NodeCondComponent; + +public class CCmp extends NodeCondComponent { + + @Override + public String processCond() throws Exception { + if(this.getTag().equals("2")){ + return "e"; + }else{ + return "d"; + } + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/DCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/DCmp.java new file mode 100644 index 000000000..fcfc5e6b4 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/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.tag.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class DCmp extends NodeComponent { + + @Override + public void process() { + System.out.println(this.getTag()); + System.out.println("DCmp executed!"); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/ECmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/ECmp.java new file mode 100644 index 000000000..121dead75 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/ECmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.tag.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class ECmp extends NodeComponent { + + @Override + public void process() { + System.out.println(this.getTag()); + System.out.println("ECmp executed!"); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/FCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/FCmp.java new file mode 100644 index 000000000..6a0df7697 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/FCmp.java @@ -0,0 +1,23 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.tag.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class FCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("FCmp executed!"); + } + + @Override + public boolean isAccess() { + return Boolean.parseBoolean(this.getTag()); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/GCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/GCmp.java new file mode 100644 index 000000000..66ed40a9f --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/tag/cmp/GCmp.java @@ -0,0 +1,18 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.tag.cmp; + +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-nospring/src/test/resources/tag/flow.json b/liteflow-testcase-nospring/src/test/resources/tag/flow.json new file mode 100644 index 000000000..977872210 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/resources/tag/flow.json @@ -0,0 +1,67 @@ +{ + "flow": { + "nodes": { + "node": [ + { + "id": "a", + "class": "com.yomahub.liteflow.test.tag.cmp.ACmp" + }, + { + "id": "b", + "class": "com.yomahub.liteflow.test.tag.cmp.BCmp" + }, + { + "id": "b1", + "class": "com.yomahub.liteflow.test.tag.cmp.B1Cmp" + }, + { + "id": "c", + "class": "com.yomahub.liteflow.test.tag.cmp.CCmp" + }, + { + "id": "d", + "class": "com.yomahub.liteflow.test.tag.cmp.DCmp" + }, + { + "id": "e", + "class": "com.yomahub.liteflow.test.tag.cmp.ECmp" + }, + { + "id": "f", + "class": "com.yomahub.liteflow.test.tag.cmp.FCmp" + }, + { + "id": "g", + "class": "com.yomahub.liteflow.test.tag.cmp.GCmp" + } + ] + }, + "chain": [ + { + "name": "chain1", + "condition": [ + {"type": "then", "value": "a[1],a[2],a[3]"} + ] + }, + { + "name": "chain2", + "condition": [ + {"type": "then", "value": "a[1],a[2],a[3],c[2](d[5]|e[6])"} + ] + }, + { + "name": "chain3", + "condition": [ + {"type": "then", "value": "b1"}, + {"type": "when", "value": "b[1],b[2],b[3]"} + ] + }, + { + "name": "chain4", + "condition": [ + {"type": "then", "value": "f[false],g"} + ] + } + ] + } +} \ No newline at end of file diff --git a/liteflow-testcase-nospring/src/test/resources/tag/flow.xml b/liteflow-testcase-nospring/src/test/resources/tag/flow.xml new file mode 100644 index 000000000..61a4d5fd3 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/resources/tag/flow.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file