2 changed files with 99 additions and 8 deletions
@ -0,0 +1,91 @@ |
|||
/** |
|||
* Copyright © 2016-2025 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
package org.thingsboard.server.service.edge; |
|||
|
|||
import org.junit.Assert; |
|||
import org.junit.Test; |
|||
import org.thingsboard.common.util.JacksonUtil; |
|||
import org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNodeConfiguration; |
|||
import org.thingsboard.server.common.data.rule.RuleChainMetaData; |
|||
import org.thingsboard.server.common.data.rule.RuleNode; |
|||
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.service.edge.rpc.utils.EdgeVersionUtils; |
|||
|
|||
import java.util.Collections; |
|||
|
|||
public class EdgeMsgConstructorUtilsTest { |
|||
private static final int CONFIGURATION_VERSION = 5; |
|||
|
|||
@Test |
|||
public void testRuleChainMetadataUpdateMsgForAllEdgeVersions() { |
|||
// GIVEN
|
|||
RuleChainMetaData metaData = createIncompatibleRuleNodesForOldEdge(); |
|||
|
|||
// WHEN
|
|||
RuleNode ruleNode_V_4_0_0 = getRuleNodeFromMetadataUpdateMessage(metaData, EdgeVersion.V_4_0_0); |
|||
RuleNode ruleNode_V_3_9_0 = getRuleNodeFromMetadataUpdateMessage(metaData, EdgeVersion.V_3_9_0); |
|||
RuleNode ruleNode_V_3_8_0 = getRuleNodeFromMetadataUpdateMessage(metaData, EdgeVersion.V_3_8_0); |
|||
RuleNode ruleNode_V_3_7_0 = getRuleNodeFromMetadataUpdateMessage(metaData, EdgeVersion.V_3_7_0); |
|||
|
|||
// THEN
|
|||
assertRuleNodeConfiguration(ruleNode_V_4_0_0, EdgeVersion.V_4_0_0); |
|||
assertRuleNodeConfiguration(ruleNode_V_3_9_0, EdgeVersion.V_3_9_0); |
|||
assertRuleNodeConfiguration(ruleNode_V_3_8_0, EdgeVersion.V_3_8_0); |
|||
assertRuleNodeConfiguration(ruleNode_V_3_7_0, EdgeVersion.V_3_7_0); |
|||
} |
|||
|
|||
private RuleChainMetaData createIncompatibleRuleNodesForOldEdge() { |
|||
RuleChainMetaData ruleChainMetaData = new RuleChainMetaData(); |
|||
|
|||
RuleNode ruleNode1 = new RuleNode(); |
|||
ruleNode1.setName("TbMsgTimeseriesNode"); |
|||
ruleNode1.setType(org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode.class.getName()); |
|||
ruleNode1.setConfigurationVersion(CONFIGURATION_VERSION); |
|||
ruleNode1.setConfiguration(JacksonUtil.valueToTree(new TbMsgTimeseriesNodeConfiguration().defaultConfiguration())); |
|||
|
|||
ruleChainMetaData.setFirstNodeIndex(0); |
|||
ruleChainMetaData.setNodes(Collections.singletonList(ruleNode1)); |
|||
|
|||
return ruleChainMetaData; |
|||
} |
|||
|
|||
|
|||
private RuleNode getRuleNodeFromMetadataUpdateMessage(RuleChainMetaData metaData, EdgeVersion edgeVersion) { |
|||
RuleChainMetadataUpdateMsg ruleChainMetadataUpdateMsg = |
|||
EdgeMsgConstructorUtils.constructRuleChainMetadataUpdatedMsg(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, metaData, edgeVersion); |
|||
|
|||
RuleChainMetaData ruleChainMetaData = JacksonUtil.fromString(ruleChainMetadataUpdateMsg.getEntity(), RuleChainMetaData.class, true); |
|||
Assert.assertNotNull("RuleChainMetaData is null", ruleChainMetaData); |
|||
|
|||
RuleNode ruleNode = ruleChainMetaData.getNodes().stream().findFirst().orElse(null); |
|||
Assert.assertNotNull("RuleNode is null for Edge version " + edgeVersion, ruleNode); |
|||
Assert.assertNotNull("Configuration is null for Edge version " + edgeVersion, ruleNode.getConfiguration()); |
|||
|
|||
return ruleNode; |
|||
} |
|||
|
|||
private void assertRuleNodeConfiguration(RuleNode ruleNode, EdgeVersion edgeVersion) { |
|||
if (EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_9_0)) { |
|||
Assert.assertEquals("Unexpected config size", 2, ruleNode.getConfiguration().size()); |
|||
Assert.assertFalse("Unexpected field 'processingSettings'", ruleNode.getConfiguration().has("processingSettings")); |
|||
}else{ |
|||
Assert.assertEquals("Unexpected config size", 3, ruleNode.getConfiguration().size()); |
|||
Assert.assertTrue("Missing field 'processingSettings'", ruleNode.getConfiguration().has("processingSettings")); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue