Merge pull request #7833 from smatvienko-tb/fix/logNode-isStandardForTBEL
[3.5] Custom TBEL script ignored fix for TbLogNode
This commit is contained in:
commit
c4e0586265
@ -32,6 +32,8 @@ import org.thingsboard.server.common.data.plugin.ComponentType;
|
||||
import org.thingsboard.server.common.data.script.ScriptLanguage;
|
||||
import org.thingsboard.server.common.msg.TbMsg;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Slf4j
|
||||
@RuleNode(
|
||||
type = ComponentType.ACTION,
|
||||
@ -54,8 +56,12 @@ public class TbLogNode implements TbNode {
|
||||
@Override
|
||||
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
|
||||
this.config = TbNodeUtils.convert(configuration, TbLogNodeConfiguration.class);
|
||||
this.standard = new TbLogNodeConfiguration().defaultConfiguration().getJsScript().equals(config.getJsScript());
|
||||
this.scriptEngine = this.standard ? null : ctx.createScriptEngine(config.getScriptLang(),
|
||||
this.standard = isStandard(config);
|
||||
this.scriptEngine = this.standard ? null : createScriptEngine(ctx, config);
|
||||
}
|
||||
|
||||
ScriptEngine createScriptEngine(TbContext ctx, TbLogNodeConfiguration config) {
|
||||
return ctx.createScriptEngine(config.getScriptLang(),
|
||||
ScriptLanguage.TBEL.equals(config.getScriptLang()) ? config.getTbelScript() : config.getJsScript());
|
||||
}
|
||||
|
||||
@ -83,6 +89,18 @@ public class TbLogNode implements TbNode {
|
||||
}, MoreExecutors.directExecutor()); //usually js responses runs on js callback executor
|
||||
}
|
||||
|
||||
boolean isStandard(TbLogNodeConfiguration conf) {
|
||||
Objects.requireNonNull(conf, "node config is null");
|
||||
final TbLogNodeConfiguration defaultConfig = new TbLogNodeConfiguration().defaultConfiguration();
|
||||
switch (conf.getScriptLang()) {
|
||||
case JS: return defaultConfig.getJsScript().equals(conf.getJsScript());
|
||||
case TBEL: return defaultConfig.getTbelScript().equals(conf.getTbelScript());
|
||||
default:
|
||||
log.warn("No rule to define isStandard script for script language [{}], assuming that is non-standard", conf.getScriptLang());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void logStandard(TbContext ctx, TbMsg msg) {
|
||||
log.info(toLogMessage(msg));
|
||||
ctx.tellSuccess(msg);
|
||||
|
||||
@ -17,14 +17,29 @@ package org.thingsboard.rule.engine.action;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.EnumSource;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.rule.engine.api.TbContext;
|
||||
import org.thingsboard.rule.engine.api.TbNodeConfiguration;
|
||||
import org.thingsboard.rule.engine.api.TbNodeException;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.script.ScriptLanguage;
|
||||
import org.thingsboard.server.common.msg.TbMsg;
|
||||
import org.thingsboard.server.common.msg.TbMsgMetaData;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
|
||||
@Slf4j
|
||||
public class TbLogNodeTest {
|
||||
@ -61,6 +76,7 @@ public class TbLogNodeTest {
|
||||
"Incoming metadata:\n" +
|
||||
"{}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenNullDataMsg_whenToLog_thenReturnString() {
|
||||
TbLogNode node = new TbLogNode();
|
||||
@ -77,4 +93,50 @@ public class TbLogNodeTest {
|
||||
"{}");
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@EnumSource(ScriptLanguage.class)
|
||||
void givenDefaultConfig_whenIsStandardForEachScriptLanguage_thenTrue(ScriptLanguage scriptLanguage) throws TbNodeException {
|
||||
|
||||
TbLogNodeConfiguration config = new TbLogNodeConfiguration().defaultConfiguration();
|
||||
config.setScriptLang(scriptLanguage);
|
||||
TbLogNode node = spy(new TbLogNode());
|
||||
TbNodeConfiguration tbNodeConfiguration = new TbNodeConfiguration(JacksonUtil.valueToTree(config));
|
||||
TbContext ctx = mock(TbContext.class);
|
||||
node.init(ctx, tbNodeConfiguration);
|
||||
|
||||
assertThat(node.isStandard(config)).as("Script is standard for language " + scriptLanguage).isTrue();
|
||||
verify(node, never()).createScriptEngine(any(), any());
|
||||
verify(ctx, never()).createScriptEngine(any(), anyString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenScriptEngineEnum_whenNewAdded_thenFailed() {
|
||||
assertThat(ScriptLanguage.values().length).as("only two ScriptLanguage supported").isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenScriptEngineLangJs_whenCreateScriptEngine_thenSupplyJsScript(){
|
||||
TbLogNodeConfiguration configJs = new TbLogNodeConfiguration().defaultConfiguration();
|
||||
configJs.setScriptLang(ScriptLanguage.JS);
|
||||
configJs.setJsScript(configJs.getJsScript() + " // This is JS script " + UUID.randomUUID());
|
||||
TbLogNode node = new TbLogNode();
|
||||
TbContext ctx = mock(TbContext.class);
|
||||
node.createScriptEngine(ctx, configJs);
|
||||
verify(ctx).createScriptEngine(ScriptLanguage.JS, configJs.getJsScript());
|
||||
verifyNoMoreInteractions(ctx);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenScriptEngineLangTbel_whenCreateScriptEngine_thenSupplyTbelScript(){
|
||||
TbLogNodeConfiguration configTbel = new TbLogNodeConfiguration().defaultConfiguration();
|
||||
configTbel.setScriptLang(ScriptLanguage.TBEL);
|
||||
configTbel.setTbelScript(configTbel.getTbelScript() + " // This is TBEL script " + UUID.randomUUID());
|
||||
TbLogNode node = new TbLogNode();
|
||||
TbContext ctx = mock(TbContext.class);
|
||||
node.createScriptEngine(ctx, configTbel);
|
||||
verify(ctx).createScriptEngine(ScriptLanguage.TBEL, configTbel.getTbelScript());
|
||||
verifyNoMoreInteractions(ctx);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user