Browse Source

Fix RuleChainMetadata for older Edge versions

- refactoring
pull/12843/head
yevhenii 2 years ago
parent
commit
487d3849b4
  1. 14
      application/src/main/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtils.java
  2. 9
      application/src/main/java/org/thingsboard/server/service/edge/rpc/utils/EdgeVersionUtils.java
  3. 45
      application/src/test/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtilsTest.java

14
application/src/main/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtils.java

@ -129,7 +129,7 @@ import java.util.UUID;
@Slf4j @Slf4j
public class EdgeMsgConstructorUtils { public class EdgeMsgConstructorUtils {
public static final Map<String, String> NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION = Map.of( public static final Map<String, String> NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION = Map.of(
TbMsgTimeseriesNode.class.getName(), "processingSettings", TbMsgTimeseriesNode.class.getName(), "processingSettings",
TbMsgAttributesNode.class.getName(), "processingSettings", TbMsgAttributesNode.class.getName(), "processingSettings",
TbSaveToCustomCassandraTableNode.class.getName(), "defaultTtl" TbSaveToCustomCassandraTableNode.class.getName(), "defaultTtl"
@ -452,7 +452,7 @@ public class EdgeMsgConstructorUtils {
JsonNode jsonNode = JacksonUtil.valueToTree(ruleChainMetaData); JsonNode jsonNode = JacksonUtil.valueToTree(ruleChainMetaData);
JsonNode nodes = jsonNode.get("nodes"); JsonNode nodes = jsonNode.get("nodes");
if (EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_8_0)) { if (EdgeVersionUtils.isEdgeOlderThan_3_8_0(edgeVersion)) {
Iterator<JsonNode> iterator = nodes.iterator(); Iterator<JsonNode> iterator = nodes.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
JsonNode node = iterator.next(); JsonNode node = iterator.next();
@ -464,7 +464,7 @@ public class EdgeMsgConstructorUtils {
} }
} }
if (EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_9_0)) { if (EdgeVersionUtils.isEdgeOlderThan_3_9_0(edgeVersion)) {
nodes.forEach(EdgeMsgConstructorUtils::changeRuleNodeConfigForOldEdgeVersion); nodes.forEach(EdgeMsgConstructorUtils::changeRuleNodeConfigForOldEdgeVersion);
return JacksonUtil.toString(jsonNode); return JacksonUtil.toString(jsonNode);
@ -475,10 +475,10 @@ public class EdgeMsgConstructorUtils {
private static void changeRuleNodeConfigForOldEdgeVersion(JsonNode node) { private static void changeRuleNodeConfigForOldEdgeVersion(JsonNode node) {
if (node.isObject()) { if (node.isObject()) {
JsonNode configurationNode = node.get("configuration"); String nodeType = node.get("type").asText();
if (configurationNode != null && configurationNode.isObject() &&
NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION.containsKey(node.get("type").asText())) { if (node.isObject() && node.has("configuration") && NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION.containsKey(nodeType)) {
((ObjectNode) configurationNode).remove(NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION.get(node.get("type").asText())); ((ObjectNode) node.get("configuration")).remove(NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION.get(nodeType));
} }
} }
} }

9
application/src/main/java/org/thingsboard/server/service/edge/rpc/utils/EdgeVersionUtils.java

@ -24,4 +24,13 @@ public final class EdgeVersionUtils {
public static boolean isEdgeVersionOlderThan(EdgeVersion currentVersion, EdgeVersion requiredVersion) { public static boolean isEdgeVersionOlderThan(EdgeVersion currentVersion, EdgeVersion requiredVersion) {
return currentVersion.ordinal() < requiredVersion.ordinal(); return currentVersion.ordinal() < requiredVersion.ordinal();
} }
public static boolean isEdgeOlderThan_3_9_0(EdgeVersion currentVersion) {
return isEdgeVersionOlderThan(currentVersion, EdgeVersion.V_3_9_0);
}
public static boolean isEdgeOlderThan_3_8_0(EdgeVersion currentVersion) {
return isEdgeVersionOlderThan(currentVersion, EdgeVersion.V_3_8_0);
}
} }

45
application/src/test/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtilsTest.java

@ -33,7 +33,6 @@ import org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNodeConfiguration;
import org.thingsboard.server.common.data.rule.RuleChainMetaData; import org.thingsboard.server.common.data.rule.RuleChainMetaData;
import org.thingsboard.server.common.data.rule.RuleNode; import org.thingsboard.server.common.data.rule.RuleNode;
import org.thingsboard.server.gen.edge.v1.EdgeVersion; import org.thingsboard.server.gen.edge.v1.EdgeVersion;
import org.thingsboard.server.gen.edge.v1.RuleChainMetadataUpdateMsg;
import org.thingsboard.server.gen.edge.v1.UpdateMsgType; import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
import org.thingsboard.server.service.edge.rpc.utils.EdgeVersionUtils; import org.thingsboard.server.service.edge.rpc.utils.EdgeVersionUtils;
@ -43,13 +42,13 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.MISSING_NODES_IN_VERSION_37; import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.MISSING_NODES_IN_VERSION_37;
import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION; import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION;
@Slf4j @Slf4j
public class EdgeMsgConstructorUtilsTest { public class EdgeMsgConstructorUtilsTest {
private static final int CONFIGURATION_VERSION = 5; private static final int CONFIGURATION_VERSION = 5;
public static final List<EdgeVersion> TEST_SUPPORTED_EDGE_VERSIONS = Arrays.asList( public static final List<EdgeVersion> SUPPORTED_EDGE_VERSIONS_FOR_TESTS = Arrays.asList(
EdgeVersion.V_4_0_0, EdgeVersion.V_3_9_0, EdgeVersion.V_3_8_0, EdgeVersion.V_3_7_0 EdgeVersion.V_4_0_0, EdgeVersion.V_3_9_0, EdgeVersion.V_3_8_0, EdgeVersion.V_3_7_0
); );
@ -75,12 +74,12 @@ public class EdgeMsgConstructorUtilsTest {
// GIVEN // GIVEN
RuleChainMetaData metaData = createMetadataWithProblemNodes(CONFIG_TO_NODE_NAME); RuleChainMetaData metaData = createMetadataWithProblemNodes(CONFIG_TO_NODE_NAME);
TEST_SUPPORTED_EDGE_VERSIONS.forEach(edgeVersion -> { SUPPORTED_EDGE_VERSIONS_FOR_TESTS.forEach(edgeVersion -> {
// WHEN // WHEN
List<RuleNode> ruleNodes = getRuleNodesFromUpdateMsg(metaData, edgeVersion); List<RuleNode> ruleNodes = extractRuleNodesFromUpdateMsg(metaData, edgeVersion);
// THEN // THEN
validateRuleNodeConfig(ruleNodes, edgeVersion); assertRuleNodeConfig(ruleNodes, edgeVersion);
}); });
} }
@ -89,12 +88,12 @@ public class EdgeMsgConstructorUtilsTest {
// GIVEN // GIVEN
RuleChainMetaData metaData = createMetadataWithProblemNodes(CONFIG_TO_MISS_NODE_FOR_OLD_EDGE); RuleChainMetaData metaData = createMetadataWithProblemNodes(CONFIG_TO_MISS_NODE_FOR_OLD_EDGE);
TEST_SUPPORTED_EDGE_VERSIONS.forEach(edgeVersion -> { SUPPORTED_EDGE_VERSIONS_FOR_TESTS.forEach(edgeVersion -> {
// WHEN // WHEN
List<RuleNode> ruleNodes = getRuleNodesFromUpdateMsg(metaData, edgeVersion); List<RuleNode> ruleNodes = extractRuleNodesFromUpdateMsg(metaData, edgeVersion);
// THEN // THEN
boolean isOldEdge = EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_8_0); boolean isOldEdge = EdgeVersionUtils.isEdgeOlderThan_3_8_0(edgeVersion);
if (isOldEdge) { if (isOldEdge) {
Assert.assertTrue("Rule Node must be empty", ruleNodes.isEmpty()); Assert.assertTrue("Rule Node must be empty", ruleNodes.isEmpty());
@ -108,13 +107,13 @@ public class EdgeMsgConstructorUtilsTest {
RuleChainMetaData ruleChainMetaData = new RuleChainMetaData(); RuleChainMetaData ruleChainMetaData = new RuleChainMetaData();
List<RuleNode> ruleNodes = new ArrayList<>(); List<RuleNode> ruleNodes = new ArrayList<>();
nodeMap.entrySet().forEach(configToNodeName -> { nodeMap.forEach((key, value) -> {
RuleNode ruleNode = new RuleNode(); RuleNode ruleNode = new RuleNode();
ruleNode.setName(configToNodeName.getValue()); ruleNode.setName(value);
ruleNode.setType(configToNodeName.getValue()); ruleNode.setType(value);
ruleNode.setConfigurationVersion(CONFIGURATION_VERSION); ruleNode.setConfigurationVersion(CONFIGURATION_VERSION);
ruleNode.setConfiguration(JacksonUtil.valueToTree(configToNodeName.getKey().defaultConfiguration())); ruleNode.setConfiguration(JacksonUtil.valueToTree(key.defaultConfiguration()));
ruleNodes.add(ruleNode); ruleNodes.add(ruleNode);
}); });
@ -125,30 +124,30 @@ public class EdgeMsgConstructorUtilsTest {
return ruleChainMetaData; return ruleChainMetaData;
} }
private List<RuleNode> getRuleNodesFromUpdateMsg(RuleChainMetaData metaData, EdgeVersion edgeVersion) { private List<RuleNode> extractRuleNodesFromUpdateMsg(RuleChainMetaData metaData, EdgeVersion edgeVersion) {
RuleChainMetadataUpdateMsg ruleChainMetadataUpdateMsg = String ruleChainMetadataUpdateMsg =
EdgeMsgConstructorUtils.constructRuleChainMetadataUpdatedMsg(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, metaData, edgeVersion); EdgeMsgConstructorUtils.constructRuleChainMetadataUpdatedMsg(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, metaData, edgeVersion).getEntity();
RuleChainMetaData ruleChainMetaData = JacksonUtil.fromString(ruleChainMetadataUpdateMsg.getEntity(), RuleChainMetaData.class, true); RuleChainMetaData ruleChainMetaData = JacksonUtil.fromString(ruleChainMetadataUpdateMsg, RuleChainMetaData.class, true);
Assert.assertNotNull("RuleChainMetaData is null", ruleChainMetaData); Assert.assertNotNull("RuleChainMetaData is null", ruleChainMetaData);
return ruleChainMetaData.getNodes(); return ruleChainMetaData.getNodes();
} }
private void validateRuleNodeConfig(List<RuleNode> ruleNodes, EdgeVersion edgeVersion) { private void assertRuleNodeConfig(List<RuleNode> ruleNodes, EdgeVersion edgeVersion) {
ruleNodes.forEach(ruleNode -> { ruleNodes.forEach(ruleNode -> {
int ruleNodeConfigAmount = NODE_TO_CONFIG_PARAMS_COUNT.get(ruleNode.getName()); int configParamCount = NODE_TO_CONFIG_PARAMS_COUNT.get(ruleNode.getName());
boolean isOldEdge = EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_9_0); boolean isLegacyEdgeVersion = EdgeVersionUtils.isEdgeOlderThan_3_9_0(edgeVersion);
int expectedConfigAmount = isOldEdge ? ruleNodeConfigAmount - 1 : ruleNodeConfigAmount; int expectedConfigAmount = isLegacyEdgeVersion ? configParamCount - 1 : configParamCount;
boolean includeConfigParam = !isOldEdge; boolean includeConfigParam = !isLegacyEdgeVersion;
validateParams(ruleNode, expectedConfigAmount, includeConfigParam); validateParams(ruleNode, expectedConfigAmount, includeConfigParam);
}); });
} }
private void validateParams(RuleNode ruleNode, int expectedConfigAmount, boolean includeConfigParam) { private void validateParams(RuleNode ruleNode, int expectedConfigAmount, boolean includeConfigParam) {
String ignoreConfigParam = NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION.get(ruleNode.getName()); String ignoreConfigParam = NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION.get(ruleNode.getName());
Assert.assertEquals( Assert.assertEquals(
String.format("Expected %d config params for ruleNode '%s', but found %d", expectedConfigAmount, ruleNode.getName(), ruleNode.getConfiguration().size()), String.format("Expected %d config params for ruleNode '%s', but found %d", expectedConfigAmount, ruleNode.getName(), ruleNode.getConfiguration().size()),

Loading…
Cancel
Save