Browse Source

log node fix: for new LogRuleNode MVEL script ignored as it considered standard, because the JS script was standard. Test added for any new script type

pull/7833/head
Sergey Matvienko 4 years ago
parent
commit
53e7ead94c
  1. 15
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java
  2. 12
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbLogNodeTest.java

15
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java

@ -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,7 +56,7 @@ 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.standard = isStandard(config);
this.scriptEngine = this.standard ? null : ctx.createScriptEngine(config.getScriptLang(),
ScriptLanguage.TBEL.equals(config.getScriptLang()) ? config.getTbelScript() : config.getJsScript());
}
@ -83,6 +85,17 @@ 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());
}
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);

12
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbLogNodeTest.java

@ -18,6 +18,7 @@ package org.thingsboard.rule.engine.action;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
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;
@ -61,6 +62,7 @@ public class TbLogNodeTest {
"Incoming metadata:\n" +
"{}");
}
@Test
void givenNullDataMsg_whenToLog_thenReturnString() {
TbLogNode node = new TbLogNode();
@ -77,4 +79,14 @@ public class TbLogNodeTest {
"{}");
}
@Test
void givenDefaultConfig_whenIsStandardForEachScriptLanguage_thenTrue() {
TbLogNode node = new TbLogNode();
for (ScriptLanguage scriptLanguage : ScriptLanguage.values()) {
TbLogNodeConfiguration config = new TbLogNodeConfiguration().defaultConfiguration();
config.setScriptLang(scriptLanguage);
assertThat(node.isStandard(config)).as("Script is standard for language " + scriptLanguage).isTrue();
}
}
}

Loading…
Cancel
Save