新增一个验证脚本的方法

This commit is contained in:
gezuao 2024-01-30 16:08:45 +08:00
parent 6f63864b65
commit 13af5f704a
10 changed files with 83 additions and 27 deletions

View File

@ -31,49 +31,71 @@ public class ScriptValidator {
}
/**
* 只引入一种脚本语言时使用该语言验证
* 验证脚本逻辑的公共部分
*
* @param script 脚本
* @param script 脚本
* @param scriptType 脚本类型
* @return boolean
*/
public static boolean validate(String script){
private static boolean validateScript(String script, ScriptTypeEnum scriptType){
// 未加载任何脚本模块
if(scriptExecutors.isEmpty()){
LOG.error("The loaded script modules not found.");
return false;
}
// 使用多脚本语言需要指定验证语言
if(scriptExecutors.size() > 1){
// 指定脚本语言未加载
if (scriptType != null && !scriptExecutors.containsKey(scriptType)) {
LOG.error(StrUtil.format("Specified script language {} was not found.", scriptType));
return false;
}
// 加载多个脚本语言需要指定语言验证
if (scriptExecutors.size() > 1 && scriptType == null) {
LOG.error("The loaded script modules more than 1. Please specify the script language.");
return false;
}
ScriptExecutor scriptExecutor = scriptExecutors.values().iterator().next();
ScriptExecutor scriptExecutor = (scriptType != null) ? scriptExecutors.get(scriptType) : scriptExecutors.values().iterator().next();
try {
scriptExecutor.compile(script);
} catch (Exception e) {
LOG.error("script component validate failure. " + e.getMessage());
LOG.error(StrUtil.format("{} Script component validate failure. ", scriptExecutor.scriptType()) + e.getMessage());
return false;
}
return true;
}
/**
* 多语言脚本验证
* 只引入一种脚本语言时可以不指定语言验证
*
* @param script 脚本
* @return boolean
*/
public static boolean validate(String script){
return validateScript(script, null);
}
/**
* 指定脚本语言验证
*
* @param script 脚本
* @param scriptType 脚本类型
* @return boolean
*/
public static boolean validate(String script, ScriptTypeEnum scriptType){
return validateScript(script, scriptType);
}
/**
* 多语言脚本批量验证
*
* @param scripts 脚本
* @return boolean
*/
public static boolean validate(Map<String, ScriptTypeEnum> scripts){
for(Map.Entry<String, ScriptTypeEnum> script : scripts.entrySet()){
ScriptExecutor scriptExecutor = scriptExecutors.getOrDefault(script.getValue(), null);
if(scriptExecutor == null){
LOG.error(StrUtil.format("Specified script language {} was not found.", script.getValue()));
return false;
}
try {
scriptExecutor.compile(script.getKey());
} catch (Exception e) {
LOG.error(StrUtil.format("{} script component validate failure. ", script.getValue()) + e.getMessage());
public static boolean validate(Map<ScriptTypeEnum, String> scripts){
for(Map.Entry<ScriptTypeEnum, String> script : scripts.entrySet()){
if(!validate(script.getValue(), script.getKey())){
return false;
}
}

View File

@ -1,5 +1,6 @@
package com.yomahub.liteflow.test.script.aviator.validate;
import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.script.aviator.AviatorScriptExecutor;
import com.yomahub.liteflow.script.validator.ScriptValidator;
import org.junit.jupiter.api.Assertions;
@ -37,5 +38,10 @@ public class ValidateAviatorScriptComponentTest {
" setData(defaultContext, \"s1\", a*b);";
Assertions.assertTrue(ScriptValidator.validate(correctScript));
Assertions.assertFalse(ScriptValidator.validate(wrongScript));
Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.AVIATOR));
Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.PYTHON));
}
}

View File

@ -1,5 +1,6 @@
package com.yomahub.liteflow.test.script.graaljs.validate;
import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.script.graaljs.GraalJavaScriptExecutor;
import com.yomahub.liteflow.script.validator.ScriptValidator;
import org.junit.jupiter.api.Assertions;
@ -47,5 +48,8 @@ public class ValidateGraaljsScriptComponentTest {
" defaultContext.setData(\"s1\",parseInt(result));";
Assertions.assertTrue(ScriptValidator.validate(correctScript));
Assertions.assertFalse(ScriptValidator.validate(wrongScript));
Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.JS));
Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.AVIATOR));
}
}

View File

@ -1,5 +1,6 @@
package com.yomahub.liteflow.test.script.groovy.validate;
import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.script.groovy.GroovyScriptExecutor;
import com.yomahub.liteflow.script.validator.ScriptValidator;
import org.junit.jupiter.api.Assertions;
@ -75,5 +76,8 @@ public class ValidateGroovyScriptComponentTest {
" defaultContext.setData(\"s1\", a * b)";
Assertions.assertTrue(ScriptValidator.validate(correctScript));
Assertions.assertFalse(ScriptValidator.validate(wrongScript));
Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.GROOVY));
Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.JS));
}
}

View File

@ -1,5 +1,6 @@
package com.yomahub.liteflow.test.script.java.validate;
import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.script.java.JavaExecutor;
import com.yomahub.liteflow.script.validator.ScriptValidator;
import org.junit.jupiter.api.Assertions;
@ -59,5 +60,8 @@ public class ValidateJavaScriptComponentTest {
" }";
Assertions.assertTrue(ScriptValidator.validate(correctScript));
Assertions.assertFalse(ScriptValidator.validate(wrongScript));
Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.JAVA));
Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.GROOVY));
}
}

View File

@ -1,5 +1,6 @@
package com.yomahub.liteflow.test.script.javascript.validate;
import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.script.javascript.JavaScriptExecutor;
import com.yomahub.liteflow.script.validator.ScriptValidator;
import org.junit.jupiter.api.Assertions;
@ -47,5 +48,8 @@ public class ValidateJavaScriptScriptComponentTest {
" defaultContext.setData(\"s1\",parseInt(result));";
Assertions.assertTrue(ScriptValidator.validate(correctScript));
Assertions.assertFalse(ScriptValidator.validate(wrongScript));
Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.JS));
Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.JAVA));
}
}

View File

@ -1,5 +1,6 @@
package com.yomahub.liteflow.test.script.lua.validate;
import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.script.lua.LuaScriptExecutor;
import com.yomahub.liteflow.script.validator.ScriptValidator;
import org.junit.jupiter.api.Assertions;
@ -33,5 +34,8 @@ public class ValidateLuaScriptComponentTest {
" defaultContext:setData(\"s2\",_meta:get(\"nodeId\"))";
Assertions.assertTrue(ScriptValidator.validate(correctScript));
Assertions.assertFalse(ScriptValidator.validate(wrongScript));
Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.LUA));
Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.JS));
}
}

View File

@ -46,17 +46,17 @@ public class ValidateMultiLanguageScriptComponentTest {
Assertions.assertFalse(ScriptValidator.validate(correctGroovyScript));
// 多语言脚本验证 正确样例
Map<String, ScriptTypeEnum> correctData = new HashMap<>();
correctData.put(correctGroovyScript, ScriptTypeEnum.GROOVY);
correctData.put(correctJavascriptScript, ScriptTypeEnum.JS);
correctData.put(correctPythonScript, ScriptTypeEnum.PYTHON);
Map<ScriptTypeEnum, String> correctData = new HashMap<>();
correctData.put(ScriptTypeEnum.GROOVY, correctGroovyScript);
correctData.put(ScriptTypeEnum.JS, correctJavascriptScript);
correctData.put(ScriptTypeEnum.PYTHON, correctPythonScript);
Assertions.assertTrue(ScriptValidator.validate(correctData));
// 多语言脚本验证 错误样例
Map<String, ScriptTypeEnum> wrongData = new HashMap<>();
wrongData.put(correctGroovyScript, ScriptTypeEnum.GROOVY);
wrongData.put(correctJavascriptScript, ScriptTypeEnum.JS);
wrongData.put(wrongPythonScript, ScriptTypeEnum.PYTHON);
Map<ScriptTypeEnum, String> wrongData = new HashMap<>();
wrongData.put(ScriptTypeEnum.GROOVY, correctGroovyScript);
wrongData.put(ScriptTypeEnum.JS, correctJavascriptScript);
wrongData.put(ScriptTypeEnum.PYTHON, wrongPythonScript);
Assertions.assertFalse(ScriptValidator.validate(wrongData));
}
}

View File

@ -1,5 +1,6 @@
package com.yomahub.liteflow.test.script.python.validate;
import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.script.python.PythonScriptExecutor;
import com.yomahub.liteflow.script.validator.ScriptValidator;
import org.junit.jupiter.api.Assertions;
@ -49,5 +50,8 @@ public class ValidatePythonScriptComponentTest {
" defaultContext.setData(\"td\", td.sayHi(\"jack\"))";
Assertions.assertTrue(ScriptValidator.validate(correctScript));
Assertions.assertFalse(ScriptValidator.validate(wrongScript));
Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.PYTHON));
Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.LUA));
}
}

View File

@ -1,5 +1,6 @@
package com.yomahub.liteflow.test.script.qlexpress.validate;
import com.yomahub.liteflow.enums.ScriptTypeEnum;
import com.yomahub.liteflow.script.qlexpress.QLExpressScriptExecutor;
import com.yomahub.liteflow.script.validator.ScriptValidator;
import org.junit.jupiter.api.Assertions;
@ -27,5 +28,8 @@ public class ValidateQLExpressScriptComponentTest {
" }";
Assertions.assertTrue(ScriptValidator.validate(correctScript));
Assertions.assertFalse(ScriptValidator.validate(wrongScript));
Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.QLEXPRESS));
Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.PYTHON));
}
}