Browse Source

Fixing incorrect check for missing related rule chains #2

pull/6699/head
Volodymyr Babak 4 years ago
parent
commit
5312f97acb
  1. 22
      dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java
  2. 41
      dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeServiceTest.java

22
dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java

@ -46,7 +46,7 @@ import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.relation.EntityRelation;
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.data.rule.RuleChainConnectionInfo;
import org.thingsboard.server.common.data.rule.RuleNode;
import org.thingsboard.server.dao.entity.AbstractCachedEntityService;
import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.relation.RelationService;
@ -62,6 +62,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import static org.thingsboard.server.dao.DaoUtil.toUUIDs;
@ -449,22 +450,19 @@ public class EdgeServiceImpl extends AbstractCachedEntityService<EdgeCacheKey, E
}
@Override
public String findMissingToRelatedRuleChains(TenantId tenantId, EdgeId edgeId, String tbRuleChainInputNodeName) {
public String findMissingToRelatedRuleChains(TenantId tenantId, EdgeId edgeId, String tbRuleChainInputNodeClassName) {
List<RuleChain> edgeRuleChains = findEdgeRuleChains(tenantId, edgeId);
List<RuleChainId> edgeRuleChainIds = edgeRuleChains.stream().map(IdBased::getId).collect(Collectors.toList());
ObjectNode result = JacksonUtil.OBJECT_MAPPER.createObjectNode();
for (RuleChain edgeRuleChain : edgeRuleChains) {
// ruleChainService.
// loadRuleChainMetaData(edgeRuleChain.getTenantId(), edgeRuleChain.getId())
// .getNodes()
// .get(11)
// .getConfiguration()
// .get("ruleChainId")
List<RuleChainConnectionInfo> connectionInfos =
ruleChainService.loadRuleChainMetaData(edgeRuleChain.getTenantId(), edgeRuleChain.getId()).getRuleChainConnections();
if (connectionInfos != null && !connectionInfos.isEmpty()) {
List<RuleNode> ruleNodes =
ruleChainService.loadRuleChainMetaData(edgeRuleChain.getTenantId(), edgeRuleChain.getId()).getNodes();
if (ruleNodes != null && !ruleNodes.isEmpty()) {
List<RuleChainId> connectedRuleChains =
connectionInfos.stream().map(RuleChainConnectionInfo::getTargetRuleChainId).collect(Collectors.toList());
ruleNodes.stream()
.filter(rn -> rn.getType().equals(tbRuleChainInputNodeClassName))
.map(rn -> new RuleChainId(UUID.fromString(rn.getConfiguration().get("ruleChainId").asText())))
.collect(Collectors.toList());
List<String> missingRuleChains = new ArrayList<>();
for (RuleChainId connectedRuleChain : connectedRuleChains) {
if (!edgeRuleChainIds.contains(connectedRuleChain)) {

41
dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeServiceTest.java

@ -16,11 +16,13 @@
package org.thingsboard.server.dao.service;
import com.datastax.oss.driver.api.core.uuid.Uuids;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.EntitySubtype;
import org.thingsboard.server.common.data.Tenant;
@ -30,10 +32,13 @@ 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.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.exception.DataValidationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@ -614,17 +619,45 @@ public abstract class BaseEdgeServiceTest extends AbstractServiceTest {
ruleChain.setName("Rule Chain #1");
ruleChain.setType(RuleChainType.EDGE);
RuleChain ruleChain1 = ruleChainService.saveRuleChain(ruleChain);
ruleChainService.assignRuleChainToEdge(tenantId, ruleChain1.getId(), savedEdge.getId());
ruleChain = new RuleChain();
ruleChain.setTenantId(tenantId);
ruleChain.setName("Rule Chain #2");
ruleChain.setType(RuleChainType.EDGE);
RuleChain ruleChain2 = ruleChainService.saveRuleChain(ruleChain);
ruleChainService.assignRuleChainToEdge(tenantId, ruleChain2.getId(), savedEdge.getId());
String missingToRelatedRuleChains = edgeService.findMissingToRelatedRuleChains(tenantId, savedEdge.getId());
Assert.assertEquals("[]", missingToRelatedRuleChains);
ruleChain = new RuleChain();
ruleChain.setTenantId(tenantId);
ruleChain.setName("Rule Chain #3");
ruleChain.setType(RuleChainType.EDGE);
RuleChain ruleChain3 = ruleChainService.saveRuleChain(ruleChain);
RuleNode ruleNode1 = new RuleNode();
ruleNode1.setName("Input rule node 1");
ruleNode1.setType("org.thingsboard.rule.engine.flow.TbRuleChainInputNode");
ObjectNode configuration = JacksonUtil.OBJECT_MAPPER.createObjectNode();
configuration.put("ruleChainId", ruleChain1.getUuidId().toString());
ruleNode1.setConfiguration(configuration);
RuleNode ruleNode2 = new RuleNode();
ruleNode2.setName("Input rule node 2");
ruleNode2.setType("org.thingsboard.rule.engine.flow.TbRuleChainInputNode");
configuration = JacksonUtil.OBJECT_MAPPER.createObjectNode();
configuration.put("ruleChainId", ruleChain2.getUuidId().toString());
ruleNode2.setConfiguration(configuration);
RuleChainMetaData ruleChainMetaData3 = new RuleChainMetaData();
ruleChainMetaData3.setNodes(Arrays.asList(ruleNode1, ruleNode2));
ruleChainMetaData3.setFirstNodeIndex(0);
ruleChainMetaData3.setRuleChainId(ruleChain3.getId());
ruleChainService.saveRuleChainMetaData(tenantId, ruleChainMetaData3);
ruleChainService.assignRuleChainToEdge(tenantId, ruleChain3.getId(), savedEdge.getId());
String missingToRelatedRuleChains = edgeService.findMissingToRelatedRuleChains(tenantId,
savedEdge.getId(),
"org.thingsboard.rule.engine.flow.TbRuleChainInputNode");
Assert.assertEquals("{\"Rule Chain #3\":[\"Rule Chain #1\",\"Rule Chain #2\"]}", missingToRelatedRuleChains);
}
}
Loading…
Cancel
Save