log node refactored and tests improved

This commit is contained in:
Sergey Matvienko 2023-03-14 13:48:34 +01:00
parent 2f207d5a26
commit b00f5d26ae
2 changed files with 64 additions and 9 deletions

View File

@ -57,7 +57,11 @@ public class TbLogNode implements TbNode {
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = TbNodeUtils.convert(configuration, TbLogNodeConfiguration.class);
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());
}
@ -91,9 +95,10 @@ public class TbLogNode implements TbNode {
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;
}
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) {

View File

@ -17,6 +17,12 @@ 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;
@ -24,8 +30,16 @@ 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 {
@ -79,14 +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 givenDefaultConfig_whenIsStandardForEachScriptLanguage_thenTrue() {
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();
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();
}
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);
}
}