diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/LiteflowMainAutoConfiguration.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/LiteflowMainAutoConfiguration.java index 319ed9edf..2398202a6 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/LiteflowMainAutoConfiguration.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/LiteflowMainAutoConfiguration.java @@ -18,7 +18,7 @@ import org.noear.solon.core.AppContext; @Configuration public class LiteflowMainAutoConfiguration { - @Inject(value = "${liteflow.parseOnStart}", required = false) + @Inject(value = "${liteflow.parseOnStart:true}", required = false) boolean parseOnStart; @Inject diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/pom.xml b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/pom.xml new file mode 100644 index 000000000..33e2bc582 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/pom.xml @@ -0,0 +1,107 @@ + + + 4.0.0 + + com.yomahub + liteflow-testcase-el + 2.12.2 + + + liteflow-testcase-el-sql-solon + + + 2.1.214 + 8 + 8 + UTF-8 + + + + + + com.yomahub + liteflow-rule-sql + ${revision} + test + + + + com.yomahub + liteflow-core + ${revision} + + + + com.h2database + h2 + ${h2.version} + test + + + + com.yomahub + liteflow-script-groovy + ${revision} + test + + + + com.yomahub + liteflow-script-graaljs + ${revision} + test + + + + com.yomahub + liteflow-solon-plugin + ${revision} + + + + com.yomahub + liteflow-el-builder + ${revision} + + + + org.noear + solon-test-junit5 + ${solon.version} + test + + + + org.aspectj + aspectjweaver + test + + + org.apache.curator + curator-test + test + + + com.101tec + zkclient + test + + + org.apache.curator + curator-framework + + + org.apache.curator + curator-recipes + + + + mysql + mysql-connector-java + 8.0.31 + test + + + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java new file mode 100644 index 000000000..0f94c22f3 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -0,0 +1,21 @@ +package com.yomahub.liteflow.test; + +import com.yomahub.liteflow.core.FlowInitHook; +import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.property.LiteflowConfigGetter; +import com.yomahub.liteflow.spi.holder.SpiFactoryCleaner; +import com.yomahub.liteflow.thread.ExecutorHelper; +import org.junit.jupiter.api.AfterAll; + +public class BaseTest { + + @AfterAll + public static void cleanScanCache() { + FlowBus.cleanCache(); + ExecutorHelper.loadInstance().clearExecutorServiceMap(); + SpiFactoryCleaner.clean(); + LiteflowConfigGetter.clean(); + FlowInitHook.cleanHook(); + FlowBus.clearStat(); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/SQLWithXmlELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/SQLWithXmlELSpringbootTest.java new file mode 100644 index 000000000..e550ed2bd --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/SQLWithXmlELSpringbootTest.java @@ -0,0 +1,32 @@ +package com.yomahub.liteflow.test.def; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.noear.solon.annotation.Import; +import org.noear.solon.annotation.Inject; +import org.noear.solon.test.SolonJUnit5Extension; + +@ExtendWith(SolonJUnit5Extension.class) +@Import(profiles = "classpath:/application.properties") +public class SQLWithXmlELSpringbootTest extends BaseTest { + + @Inject + private FlowExecutor flowExecutor; + + @Test + public void testSQLWithXml() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assertions.assertEquals("a==>b==>c", response.getExecuteStepStr()); + } + + @Test + public void testSQLWithScriptXml() { + LiteflowResponse response = flowExecutor.execute2Resp("chain3", "arg"); + Assertions.assertTrue(response.isSuccess()); + Assertions.assertEquals("x0[if 脚本]==>a==>b", response.getExecuteStepStrWithoutTime()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/cmp/ACmp.java new file mode 100644 index 000000000..68ddb8e67 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/cmp/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.def.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.noear.solon.annotation.Component; + +@Component("a") +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ACmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/cmp/BCmp.java new file mode 100644 index 000000000..c1a5c5612 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/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.def.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.noear.solon.annotation.Component; + +@Component("b") +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/cmp/CCmp.java new file mode 100644 index 000000000..29502f361 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/def/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.def.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.noear.solon.annotation.Component; + +@Component("c") +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/application.properties b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/application.properties new file mode 100644 index 000000000..7374e9fed --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/application.properties @@ -0,0 +1,21 @@ +liteflow.rule-source-ext-data-map.url=jdbc:h2:mem:test_db;MODE=MySQL;INIT=RUNSCRIPT FROM 'classpath:sql/schema.sql'\\;RUNSCRIPT FROM 'classpath:sql/data.sql' +liteflow.rule-source-ext-data-map.driverClassName=org.h2.Driver +liteflow.rule-source-ext-data-map.username=root +liteflow.rule-source-ext-data-map.password=123456 +liteflow.rule-source-ext-data-map.applicationName=demo +liteflow.rule-source-ext-data-map.sqlLogEnabled=true +liteflow.rule-source-ext-data-map.pollingEnabled=true +liteflow.rule-source-ext-data-map.pollingIntervalSeconds=60 +liteflow.rule-source-ext-data-map.pollingStartSeconds=60 +liteflow.rule-source-ext-data-map.chainTableName=EL_TABLE +liteflow.rule-source-ext-data-map.chainApplicationNameField=application_name +liteflow.rule-source-ext-data-map.chainNameField=chain_name +liteflow.rule-source-ext-data-map.elDataField=EL_DATA +liteflow.rule-source-ext-data-map.namespaceField=namespace +liteflow.rule-source-ext-data-map.scriptTableName=script_node_table +liteflow.rule-source-ext-data-map.scriptApplicationNameField=application_name +liteflow.rule-source-ext-data-map.scriptIdField=script_node_id +liteflow.rule-source-ext-data-map.scriptNameField=script_node_name +liteflow.rule-source-ext-data-map.scriptDataField=script_node_data +liteflow.rule-source-ext-data-map.scriptTypeField=script_node_type +liteflow.rule-source-ext-data-map.scriptLanguageField=script_language \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/sql/data.sql b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/sql/data.sql new file mode 100644 index 000000000..e885458bf --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/sql/data.sql @@ -0,0 +1,16 @@ +DELETE FROM EL_TABLE; + +INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain1','THEN(a, b, c);'); +INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain2','IF(x1, THEN(a, b));'); +INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain3','IF(x0, THEN(a, b));'); +INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','','IF(x0, THEN(a, b));'); +INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain4','IF(x2, IF(x0, THEN(a, b)));'); +INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA,ROUTE,NAMESPACE) values ('demo','r_chain1','THEN(a,b,c);','r1','ns'); +INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA,ROUTE,NAMESPACE) values ('demo','r_chain2','THEN(c,b,a);','OR(r1,r2)','ns'); + +DELETE FROM SCRIPT_NODE_TABLE; + +INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x0','if 脚本','boolean_script','return true','groovy'); +INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x1','if 脚本','boolean_script','return true','groovy'); + +INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x2','python脚本','boolean_script','return true','js'); diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/sql/schema.sql b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/sql/schema.sql new file mode 100644 index 000000000..4e4efcfc1 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/resources/sql/schema.sql @@ -0,0 +1,22 @@ +create table IF NOT EXISTS `EL_TABLE` +( + `id` bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `application_name` varchar(32) NOT NULL, + `chain_name` varchar(32) NOT NULL, + `el_data` varchar(1024) NOT NULL, + `route` varchar(1024), + `namespace` varchar(32), + PRIMARY KEY (`id`) +); + +create table IF NOT EXISTS `script_node_table` +( + `id` bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `application_name` varchar(32) NOT NULL, + `script_node_id` varchar(32) NOT NULL, + `script_node_name` varchar(32) NOT NULL, + `script_node_type` varchar(32) NOT NULL, + `script_node_data` varchar(1024) NOT NULL, + `script_language` varchar(1024) NOT NULL, + PRIMARY KEY (`id`) +); \ No newline at end of file diff --git a/liteflow-testcase-el/pom.xml b/liteflow-testcase-el/pom.xml index 7c3ba26e0..2d80347bc 100644 --- a/liteflow-testcase-el/pom.xml +++ b/liteflow-testcase-el/pom.xml @@ -40,6 +40,7 @@ liteflow-testcase-el-builder liteflow-testcase-el-routechain liteflow-testcase-el-script-kotlin-springboot + liteflow-testcase-el-sql-solon