|
|
|
@ -28,12 +28,14 @@ import org.thingsboard.server.common.data.id.TenantId; |
|
|
|
import org.thingsboard.server.common.data.page.PageData; |
|
|
|
import org.thingsboard.server.common.data.page.PageLink; |
|
|
|
import org.thingsboard.server.common.data.relation.EntityRelation; |
|
|
|
import org.thingsboard.server.common.data.relation.RelationTypeGroup; |
|
|
|
import org.thingsboard.server.common.data.rule.RuleChain; |
|
|
|
import org.thingsboard.server.common.data.rule.RuleChainMetaData; |
|
|
|
import org.thingsboard.server.common.data.rule.RuleChainType; |
|
|
|
import org.thingsboard.server.common.data.rule.RuleNode; |
|
|
|
import org.thingsboard.server.dao.edge.EdgeService; |
|
|
|
import org.thingsboard.server.dao.exception.DataValidationException; |
|
|
|
import org.thingsboard.server.dao.relation.RelationService; |
|
|
|
import org.thingsboard.server.dao.rule.RuleChainService; |
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
@ -43,7 +45,10 @@ import java.util.List; |
|
|
|
import java.util.UUID; |
|
|
|
import java.util.function.Function; |
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat; |
|
|
|
import static org.assertj.core.api.Assertions.assertThatThrownBy; |
|
|
|
import static org.thingsboard.server.common.data.relation.EntityRelation.USES_TYPE; |
|
|
|
import static org.thingsboard.server.dao.rule.BaseRuleChainService.TB_RULE_CHAIN_INPUT_NODE; |
|
|
|
|
|
|
|
/** |
|
|
|
* Created by igor on 3/13/18. |
|
|
|
@ -55,6 +60,8 @@ public class RuleChainServiceTest extends AbstractServiceTest { |
|
|
|
EdgeService edgeService; |
|
|
|
@Autowired |
|
|
|
RuleChainService ruleChainService; |
|
|
|
@Autowired |
|
|
|
RelationService relationService; |
|
|
|
|
|
|
|
private IdComparator<RuleChain> idComparator = new IdComparator<>(); |
|
|
|
private IdComparator<RuleNode> ruleNodeIdComparator = new IdComparator<>(); |
|
|
|
@ -270,7 +277,7 @@ public class RuleChainServiceTest extends AbstractServiceTest { |
|
|
|
|
|
|
|
List<RuleNode> ruleNodes = savedRuleChainMetaData.getNodes(); |
|
|
|
int name3Index = -1; |
|
|
|
for (int i=0;i<ruleNodes.size();i++) { |
|
|
|
for (int i = 0; i < ruleNodes.size(); i++) { |
|
|
|
if ("name3".equals(ruleNodes.get(i).getName())) { |
|
|
|
name3Index = i; |
|
|
|
break; |
|
|
|
@ -354,6 +361,80 @@ public class RuleChainServiceTest extends AbstractServiceTest { |
|
|
|
Assert.assertTrue(ruleChainById.isRoot()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveRuleChainWithInputNode() { |
|
|
|
RuleChain fromRuleChain = new RuleChain(); |
|
|
|
fromRuleChain.setName("From RuleChain"); |
|
|
|
fromRuleChain.setTenantId(tenantId); |
|
|
|
fromRuleChain = ruleChainService.saveRuleChain(fromRuleChain); |
|
|
|
RuleChainId fromRuleChainId = fromRuleChain.getId(); |
|
|
|
|
|
|
|
RuleChain toRuleChain1 = new RuleChain(); |
|
|
|
toRuleChain1.setName("To Rule Chain 1"); |
|
|
|
toRuleChain1.setTenantId(tenantId); |
|
|
|
toRuleChain1 = ruleChainService.saveRuleChain(toRuleChain1); |
|
|
|
RuleChainId toRuleChain1Id = toRuleChain1.getId(); |
|
|
|
|
|
|
|
RuleChainMetaData ruleChainMetaData = new RuleChainMetaData(); |
|
|
|
ruleChainMetaData.setRuleChainId(fromRuleChainId); |
|
|
|
|
|
|
|
RuleNode toRuleChain1Node = new RuleNode(); |
|
|
|
toRuleChain1Node.setName("To Rule Chain 1"); |
|
|
|
toRuleChain1Node.setType(TB_RULE_CHAIN_INPUT_NODE); |
|
|
|
toRuleChain1Node.setConfiguration(JacksonUtil.newObjectNode() |
|
|
|
.put("ruleChainId", toRuleChain1Id.toString())); |
|
|
|
|
|
|
|
RuleNode toRuleChain1Node2 = new RuleNode(); |
|
|
|
toRuleChain1Node2.setName("To Rule Chain 1"); |
|
|
|
toRuleChain1Node2.setType(TB_RULE_CHAIN_INPUT_NODE); |
|
|
|
toRuleChain1Node2.setConfiguration(JacksonUtil.newObjectNode() |
|
|
|
.put("ruleChainId", toRuleChain1Id.toString())); |
|
|
|
|
|
|
|
List<RuleNode> ruleNodes = new ArrayList<>(); |
|
|
|
ruleNodes.add(toRuleChain1Node); |
|
|
|
ruleNodes.add(toRuleChain1Node2); |
|
|
|
ruleChainMetaData.setFirstNodeIndex(0); |
|
|
|
ruleChainMetaData.setNodes(ruleNodes); |
|
|
|
|
|
|
|
ruleChainService.saveRuleChainMetaData(tenantId, ruleChainMetaData, Function.identity()); |
|
|
|
|
|
|
|
List<EntityRelation> relations = relationService.findByFromAndType(tenantId, fromRuleChainId, USES_TYPE, RelationTypeGroup.COMMON); |
|
|
|
assertThat(relations).singleElement().satisfies(relationToRuleChain1 -> { |
|
|
|
assertThat(relationToRuleChain1.getFrom()).isEqualTo(fromRuleChainId); |
|
|
|
assertThat(relationToRuleChain1.getTo()).isEqualTo(toRuleChain1Id); |
|
|
|
}); |
|
|
|
|
|
|
|
RuleChain toRuleChain2 = new RuleChain(); |
|
|
|
toRuleChain2.setName("To Rule Chain 2"); |
|
|
|
toRuleChain2.setTenantId(tenantId); |
|
|
|
toRuleChain2 = ruleChainService.saveRuleChain(toRuleChain2); |
|
|
|
RuleChainId toRuleChain2Id = toRuleChain2.getId(); |
|
|
|
|
|
|
|
RuleNode toRuleChain2Node = new RuleNode(); |
|
|
|
toRuleChain2Node.setName("To Rule Chain 2"); |
|
|
|
toRuleChain2Node.setType(TB_RULE_CHAIN_INPUT_NODE); |
|
|
|
toRuleChain2Node.setConfiguration(JacksonUtil.newObjectNode() |
|
|
|
.put("ruleChainId", toRuleChain2Id.toString())); |
|
|
|
|
|
|
|
List<RuleNode> newRuleNodes = new ArrayList<>(); |
|
|
|
newRuleNodes.add(toRuleChain2Node); |
|
|
|
newRuleNodes.add(toRuleChain1Node); |
|
|
|
ruleChainMetaData = ruleChainService.loadRuleChainMetaData(tenantId, ruleChainMetaData.getRuleChainId()); |
|
|
|
ruleChainMetaData.setNodes(newRuleNodes); |
|
|
|
ruleChainService.saveRuleChainMetaData(tenantId, ruleChainMetaData, Function.identity()); |
|
|
|
|
|
|
|
List<EntityRelation> newRelations = relationService.findByFromAndType(tenantId, fromRuleChainId, USES_TYPE, RelationTypeGroup.COMMON); |
|
|
|
assertThat(newRelations).hasSize(2); |
|
|
|
assertThat(newRelations).anySatisfy(relationToRuleChain1 -> { |
|
|
|
assertThat(relationToRuleChain1.getFrom()).isEqualTo(fromRuleChainId); |
|
|
|
assertThat(relationToRuleChain1.getTo()).isEqualTo(toRuleChain1Id); |
|
|
|
}); |
|
|
|
assertThat(newRelations).anySatisfy(relationToRuleChain2 -> { |
|
|
|
assertThat(relationToRuleChain2.getFrom()).isEqualTo(fromRuleChainId); |
|
|
|
assertThat(relationToRuleChain2.getTo()).isEqualTo(toRuleChain2Id); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private RuleChainId saveRuleChainAndSetAutoAssignToEdge(String name) { |
|
|
|
RuleChain edgeRuleChain = new RuleChain(); |
|
|
|
edgeRuleChain.setTenantId(tenantId); |
|
|
|
@ -395,9 +476,9 @@ public class RuleChainServiceTest extends AbstractServiceTest { |
|
|
|
ruleChainMetaData.setFirstNodeIndex(0); |
|
|
|
ruleChainMetaData.setNodes(ruleNodes); |
|
|
|
|
|
|
|
ruleChainMetaData.addConnectionInfo(0,1,"success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0,2,"fail"); |
|
|
|
ruleChainMetaData.addConnectionInfo(1,2,"success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0, 1, "success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0, 2, "fail"); |
|
|
|
ruleChainMetaData.addConnectionInfo(1, 2, "success"); |
|
|
|
|
|
|
|
Assert.assertTrue(ruleChainService.saveRuleChainMetaData(tenantId, ruleChainMetaData, Function.identity()).isSuccess()); |
|
|
|
return ruleChainService.loadRuleChainMetaData(tenantId, ruleChainMetaData.getRuleChainId()); |
|
|
|
@ -434,10 +515,10 @@ public class RuleChainServiceTest extends AbstractServiceTest { |
|
|
|
ruleChainMetaData.setFirstNodeIndex(0); |
|
|
|
ruleChainMetaData.setNodes(ruleNodes); |
|
|
|
|
|
|
|
ruleChainMetaData.addConnectionInfo(0,1,"success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0,2,"fail"); |
|
|
|
ruleChainMetaData.addConnectionInfo(1,2,"success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(2,2,"success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0, 1, "success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0, 2, "fail"); |
|
|
|
ruleChainMetaData.addConnectionInfo(1, 2, "success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(2, 2, "success"); |
|
|
|
|
|
|
|
return ruleChainMetaData; |
|
|
|
} |
|
|
|
@ -473,10 +554,10 @@ public class RuleChainServiceTest extends AbstractServiceTest { |
|
|
|
ruleChainMetaData.setFirstNodeIndex(0); |
|
|
|
ruleChainMetaData.setNodes(ruleNodes); |
|
|
|
|
|
|
|
ruleChainMetaData.addConnectionInfo(0,1,"success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0,2,"fail"); |
|
|
|
ruleChainMetaData.addConnectionInfo(1,2,"success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(2,0,"success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0, 1, "success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(0, 2, "fail"); |
|
|
|
ruleChainMetaData.addConnectionInfo(1, 2, "success"); |
|
|
|
ruleChainMetaData.addConnectionInfo(2, 0, "success"); |
|
|
|
|
|
|
|
return ruleChainMetaData; |
|
|
|
} |
|
|
|
@ -582,16 +663,16 @@ public class RuleChainServiceTest extends AbstractServiceTest { |
|
|
|
|
|
|
|
private RuleChain getRuleChain() { |
|
|
|
String ruleChainStr = "{\n" + |
|
|
|
" \"name\": \"Root Rule Chain\",\n" + |
|
|
|
" \"type\": \"CORE\",\n" + |
|
|
|
" \"firstRuleNodeId\": {\n" + |
|
|
|
" \"entityType\": \"RULE_NODE\",\n" + |
|
|
|
" \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + |
|
|
|
" },\n" + |
|
|
|
" \"debugMode\": false,\n" + |
|
|
|
" \"configuration\": null,\n" + |
|
|
|
" \"additionalInfo\": null\n" + |
|
|
|
"}"; |
|
|
|
" \"name\": \"Root Rule Chain\",\n" + |
|
|
|
" \"type\": \"CORE\",\n" + |
|
|
|
" \"firstRuleNodeId\": {\n" + |
|
|
|
" \"entityType\": \"RULE_NODE\",\n" + |
|
|
|
" \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + |
|
|
|
" },\n" + |
|
|
|
" \"debugMode\": false,\n" + |
|
|
|
" \"configuration\": null,\n" + |
|
|
|
" \"additionalInfo\": null\n" + |
|
|
|
"}"; |
|
|
|
return JacksonUtil.fromString(ruleChainStr, RuleChain.class); |
|
|
|
} |
|
|
|
} |
|
|
|
|