Browse Source

fixed copy string values from msg to md in TbCopyKeysNode

pull/9284/head
ShvaykaD 3 years ago
parent
commit
ce8deced90
  1. 4
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java
  2. 13
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java

4
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java

@ -95,7 +95,9 @@ public class TbCopyKeysNode extends TbAbstractTransformNodeWithTbMsgSource {
String keyData = entry.getKey(); String keyData = entry.getKey();
if (matches(keyData)) { if (matches(keyData)) {
msgChanged = true; msgChanged = true;
metaDataCopy.putValue(keyData, JacksonUtil.toString(entry.getValue())); String value = entry.getValue().isTextual() ?
entry.getValue().asText() : JacksonUtil.toString(entry.getValue());
metaDataCopy.putValue(keyData, value);
} }
} }
break; break;

13
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbCopyKeysNodeTest.java

@ -101,10 +101,12 @@ public class TbCopyKeysNodeTest {
@Test @Test
void givenMsgFromMsg_whenOnMsg_thenVerifyOutput() throws Exception { void givenMsgFromMsg_whenOnMsg_thenVerifyOutput() throws Exception {
config.setCopyFrom(TbMsgSource.DATA); config.setCopyFrom(TbMsgSource.DATA);
config.setKeys(Set.of(".*Key$"));
nodeConfiguration = new TbNodeConfiguration(JacksonUtil.valueToTree(config)); nodeConfiguration = new TbNodeConfiguration(JacksonUtil.valueToTree(config));
node.init(ctx, nodeConfiguration); node.init(ctx, nodeConfiguration);
String data = "{\"DigitData\":22.5,\"TempDataValue\":10.5}"; String data = "{\"nullKey\":null,\"stringKey\":\"value1\",\"booleanKey\":true,\"doubleKey\":42.0,\"longKey\":73," +
"\"jsonKey\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}}";
node.onMsg(ctx, getTbMsg(deviceId, data)); node.onMsg(ctx, getTbMsg(deviceId, data));
ArgumentCaptor<TbMsg> newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class); ArgumentCaptor<TbMsg> newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class);
@ -115,8 +117,13 @@ public class TbCopyKeysNodeTest {
assertThat(newMsg).isNotNull(); assertThat(newMsg).isNotNull();
Map<String, String> metaDataMap = newMsg.getMetaData().getData(); Map<String, String> metaDataMap = newMsg.getMetaData().getData();
assertThat(metaDataMap.containsKey("DigitData")).isEqualTo(true); assertThat(metaDataMap.get("nullKey")).isEqualTo("null");
assertThat(metaDataMap.containsKey("TempDataValue")).isEqualTo(true); assertThat(metaDataMap.get("stringKey")).isEqualTo("value1");
assertThat(metaDataMap.get("booleanKey")).isEqualTo("true");
assertThat(metaDataMap.get("doubleKey")).isEqualTo("42.0");
assertThat(metaDataMap.get("longKey")).isEqualTo("73");
assertThat(metaDataMap.get("jsonKey"))
.isEqualTo("{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}");
} }
@Test @Test

Loading…
Cancel
Save