diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java index 72643f3e42df8bd9eae9487a4b64f56e97a5f658..398e2b4272b0dabd0aad14adfa7410638fda7658 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java @@ -130,6 +130,7 @@ public class FlowExecutor { else { // ruleSource为空,而且没有spi形式的扩展,那么说明真的没有ruleSource // 这种情况有可能是基于代码动态构建的 + startUpPhase.compareAndSet(true, false); return; } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java index 4f4eaffc6ca5eef196730fd2c2c9a163d7bb27ca..303b98aecd433ca8b74e2e6477217be2be5b41d4 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java @@ -24,6 +24,13 @@ public class BuilderTest extends BaseTest { flowExecutor = FlowExecutorHolder.loadInstance(config); } + // 验证ruleSource为空时,代码动态构建链后startUpPhase正确为false,确保脚本热更新可用 + @Test + public void testStartUpPhaseWhenRuleSourceEmpty() { + Assertions.assertFalse(flowExecutor.getStartUpPhase().get(), + "当ruleSource为空时,startUpPhase应在init完成后为false"); + } + // 基于普通组件的builder模式测试 @Test public void testBuilder() throws Exception { diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/builder/ScriptJavaxProBuilderELTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/builder/ScriptJavaxProBuilderELTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a944d2a7bafa491625d345a9ef5ec1bf0c217423 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/java/com/yomahub/liteflow/test/script/javaxpro/builder/ScriptJavaxProBuilderELTest.java @@ -0,0 +1,60 @@ +package com.yomahub.liteflow.test.script.javaxpro.builder; + +import com.yomahub.liteflow.builder.LiteFlowNodeBuilder; +import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder; +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.enums.ScriptTypeEnum; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.slot.DefaultContext; +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.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.annotation.Resource; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = ScriptJavaxProBuilderELTest.class) +@EnableAutoConfiguration +@TestPropertySource(value = "classpath:/builder/application.properties") +public class ScriptJavaxProBuilderELTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + // 验证ruleSource为空时,代码动态构建的脚本节点可被正确编译并执行 + @Test + public void testScriptCompiledWhenRuleSourceEmpty() { + String script = "import com.yomahub.liteflow.core.NodeComponent;\n" + + "import com.yomahub.liteflow.slot.DefaultContext;\n" + + "public class Demo extends NodeComponent {\n" + + " public void process() {\n" + + " DefaultContext ctx = this.getFirstContextBean();\n" + + " ctx.setData(\"scriptExecuted\", true);\n" + + " }\n" + + "}"; + + LiteFlowNodeBuilder.createScriptNode() + .setId("s") + .setName("脚本S") + .setScript(script) + .setLanguage(ScriptTypeEnum.JAVA.getDisplayName()) + .build(); + + LiteFlowChainELBuilder.createChain() + .setChainId("testScriptChain") + .setEL("THEN(s)") + .build(); + + LiteflowResponse response = flowExecutor.execute2Resp("testScriptChain", null, DefaultContext.class); + Assertions.assertTrue(response.isSuccess(), + "链应执行成功"); + DefaultContext ctx = response.getFirstContextBean(); + Assertions.assertEquals(true, ctx.getData("scriptExecuted"), + "脚本应被正确编译并执行"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/builder/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/builder/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..92dd3229563f060ad6380afa4163157739aa7a4b --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javaxpro-springboot/src/test/resources/builder/application.properties @@ -0,0 +1 @@ +liteflow.enable=true diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest1.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest1.java index 933f35b62a32e555c64fdc50c0251002e5445d25..4d5659b0ed1ca96b5a071d653ad21682f9989a5b 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest1.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest1.java @@ -33,6 +33,13 @@ public class BuilderELSpringbootTest1 extends BaseTest { @Resource private FlowExecutor flowExecutor; + // 验证ruleSource为空时,代码动态构建链后startUpPhase正确为false + @Test + public void testStartUpPhaseWhenRuleSourceEmpty() { + Assertions.assertFalse(flowExecutor.getStartUpPhase().get(), + "当ruleSource为空时,startUpPhase应在init完成后为false"); + } + // 基于普通组件的builder模式测试 @Test public void testBuilder() throws Exception { diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringTest1.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringTest1.java index 4796afc1bda7a7b767c9fb921f797904eb2287d1..4b0b3fe2bf62415cc4697df944068b7956170aab 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringTest1.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringTest1.java @@ -31,6 +31,13 @@ public class BuilderELSpringTest1 extends BaseTest { @Resource private FlowExecutor flowExecutor; + // 验证ruleSource为空时,代码动态构建链后startUpPhase正确为false + @Test + public void testStartUpPhaseWhenRuleSourceEmpty() { + Assertions.assertFalse(flowExecutor.getStartUpPhase().get(), + "当ruleSource为空时,startUpPhase应在init完成后为false"); + } + // 基于普通组件的builder模式测试 @Test public void testBuilder() throws Exception {