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.data.script.ScriptLanguage;
|
||||||
import org.thingsboard.server.common.msg.TbMsg;
|
import org.thingsboard.server.common.msg.TbMsg;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RuleNode(
|
@RuleNode(
|
||||||
type = ComponentType.ACTION,
|
type = ComponentType.ACTION,
|
||||||
@ -54,8 +56,12 @@ public class TbLogNode implements TbNode {
|
|||||||
@Override
|
@Override
|
||||||
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
|
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
|
||||||
this.config = TbNodeUtils.convert(configuration, TbLogNodeConfiguration.class);
|
this.config = TbNodeUtils.convert(configuration, TbLogNodeConfiguration.class);
|
||||||
this.standard = new TbLogNodeConfiguration().defaultConfiguration().getJsScript().equals(config.getJsScript());
|
this.standard = isStandard(config);
|
||||||
this.scriptEngine = this.standard ? null : ctx.createScriptEngine(config.getScriptLang(),
|
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());
|
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
|
}, 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) {
|
void logStandard(TbContext ctx, TbMsg msg) {
|
||||||
log.info(toLogMessage(msg));
|
log.info(toLogMessage(msg));
|
||||||
ctx.tellSuccess(msg);
|
ctx.tellSuccess(msg);
|
||||||
|
|||||||
@ -17,14 +17,29 @@ package org.thingsboard.rule.engine.action;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.junit.jupiter.api.Test;
|
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.id.TenantId;
|
||||||
|
import org.thingsboard.server.common.data.script.ScriptLanguage;
|
||||||
import org.thingsboard.server.common.msg.TbMsg;
|
import org.thingsboard.server.common.msg.TbMsg;
|
||||||
import org.thingsboard.server.common.msg.TbMsgMetaData;
|
import org.thingsboard.server.common.msg.TbMsgMetaData;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
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
|
@Slf4j
|
||||||
public class TbLogNodeTest {
|
public class TbLogNodeTest {
|
||||||
@ -61,6 +76,7 @@ public class TbLogNodeTest {
|
|||||||
"Incoming metadata:\n" +
|
"Incoming metadata:\n" +
|
||||||
"{}");
|
"{}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void givenNullDataMsg_whenToLog_thenReturnString() {
|
void givenNullDataMsg_whenToLog_thenReturnString() {
|
||||||
TbLogNode node = new TbLogNode();
|
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