diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index a86d10326e..05c455cf25 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -482,12 +482,14 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC public boolean setDefaultRootEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) { RuleChain ruleChain = ruleChainDao.findById(tenantId, ruleChainId.getId()); RuleChain previousDefaultRootEdgeRuleChain = getDefaultRootEdgeRuleChain(ruleChain.getTenantId()); - if (!previousDefaultRootEdgeRuleChain.getId().equals(ruleChain.getId())) { + if (previousDefaultRootEdgeRuleChain == null || !previousDefaultRootEdgeRuleChain.getId().equals(ruleChain.getId())) { try { - deleteRelation(tenantId, new EntityRelation(previousDefaultRootEdgeRuleChain.getTenantId(), previousDefaultRootEdgeRuleChain.getId(), - EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN)); - previousDefaultRootEdgeRuleChain.setRoot(false); - ruleChainDao.save(tenantId, previousDefaultRootEdgeRuleChain); + if (previousDefaultRootEdgeRuleChain != null) { + deleteRelation(tenantId, new EntityRelation(previousDefaultRootEdgeRuleChain.getTenantId(), previousDefaultRootEdgeRuleChain.getId(), + EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN)); + previousDefaultRootEdgeRuleChain.setRoot(false); + ruleChainDao.save(tenantId, previousDefaultRootEdgeRuleChain); + } createRelation(tenantId, new EntityRelation(ruleChain.getTenantId(), ruleChain.getId(), EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN)); ruleChain.setRoot(true); @@ -517,7 +519,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC public boolean removeDefaultEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) { try { deleteRelation(tenantId, new EntityRelation(tenantId, ruleChainId, - EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN)); + EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE)); return true; } catch (ExecutionException | InterruptedException e) { log.warn("Failed to remove default edge rule chain, ruleChainId: [{}]", ruleChainId, e); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDashboardServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDashboardServiceTest.java index d1e022139e..0854ceaae2 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDashboardServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDashboardServiceTest.java @@ -356,6 +356,8 @@ public abstract class BaseDashboardServiceTest extends AbstractServiceTest { edge.setTenantId(tenant.getId()); edge.setName("Test different edge"); edge.setType("default"); + edge.setSecret(RandomStringUtils.randomAlphanumeric(20)); + edge.setRoutingKey(RandomStringUtils.randomAlphanumeric(20)); edge = edgeService.saveEdge(edge); try { dashboardService.assignDashboardToEdge(tenantId, dashboard.getId(), edge.getId()); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/EdgeServiceImplTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/EdgeServiceImplTest.java index efa7db33d7..7dbedce770 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/EdgeServiceImplTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/EdgeServiceImplTest.java @@ -59,10 +59,7 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { @Test public void testSaveEdge() { - Edge edge = new Edge(); - edge.setTenantId(tenantId); - edge.setName("My edge"); - edge.setType("default"); + Edge edge = constructEdge("My edge", "default"); Edge savedEdge = edgeService.saveEdge(edge); Assert.assertNotNull(savedEdge); @@ -109,10 +106,7 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { @Test(expected = DataValidationException.class) public void testAssignEdgeToNonExistentCustomer() { - Edge edge = new Edge(); - edge.setName("My edge"); - edge.setType("default"); - edge.setTenantId(tenantId); + Edge edge = constructEdge("My edge", "default"); edge = edgeService.saveEdge(edge); try { edgeService.assignEdgeToCustomer(tenantId, edge.getId(), new CustomerId(UUIDs.timeBased())); @@ -123,10 +117,7 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { @Test(expected = DataValidationException.class) public void testAssignEdgeToCustomerFromDifferentTenant() { - Edge edge = new Edge(); - edge.setName("My edge"); - edge.setType("default"); - edge.setTenantId(tenantId); + Edge edge = constructEdge("My edge", "default"); edge = edgeService.saveEdge(edge); Tenant tenant = new Tenant(); tenant.setTitle("Test different tenant"); @@ -145,10 +136,7 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { @Test public void testFindEdgeById() { - Edge edge = new Edge(); - edge.setTenantId(tenantId); - edge.setName("My edge"); - edge.setType("default"); + Edge edge = constructEdge("My edge", "default"); Edge savedEdge = edgeService.saveEdge(edge); Edge foundEdge = edgeService.findEdgeById(tenantId, savedEdge.getId()); Assert.assertNotNull(foundEdge); @@ -161,24 +149,15 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { List edges = new ArrayList<>(); try { for (int i = 0; i < 3; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); - edge.setName("My edge B" + i); - edge.setType("typeB"); + Edge edge = constructEdge("My edge B" + i, "typeB"); edges.add(edgeService.saveEdge(edge)); } for (int i = 0; i < 7; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); - edge.setName("My edge C" + i); - edge.setType("typeC"); + Edge edge = constructEdge("My edge C" + i, "typeC"); edges.add(edgeService.saveEdge(edge)); } for (int i = 0; i < 9; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); - edge.setName("My edge A" + i); - edge.setType("typeA"); + Edge edge = constructEdge("My edge A" + i, "typeA"); edges.add(edgeService.saveEdge(edge)); } List edgeTypes = edgeService.findEdgeTypesByTenantId(tenantId).get(); @@ -196,10 +175,7 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { @Test public void testDeleteEdge() { - Edge edge = new Edge(); - edge.setTenantId(tenantId); - edge.setName("My edge"); - edge.setType("default"); + Edge edge = constructEdge("My edge", "default"); Edge savedEdge = edgeService.saveEdge(edge); Edge foundEdge = edgeService.findEdgeById(tenantId, savedEdge.getId()); Assert.assertNotNull(foundEdge); @@ -218,10 +194,7 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { List edges = new ArrayList<>(); for (int i = 0; i < 178; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); - edge.setName("Edge" + i); - edge.setType("default"); + Edge edge = constructEdge(tenantId, "Edge " + i, "default"); edges.add(edgeService.saveEdge(edge)); } @@ -256,25 +229,19 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { String title1 = "Edge title 1"; List edgesTitle1 = new ArrayList<>(); for (int i = 0; i < 143; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric(15); String name = title1 + suffix; name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); - edge.setName(name); - edge.setType("default"); + Edge edge = constructEdge(name, "default"); edgesTitle1.add(edgeService.saveEdge(edge)); } String title2 = "Edge title 2"; List edgesTitle2 = new ArrayList<>(); for (int i = 0; i < 175; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric(15); String name = title2 + suffix; name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); - edge.setName(name); - edge.setType("default"); + Edge edge = constructEdge(name, "default"); edgesTitle2.add(edgeService.saveEdge(edge)); } @@ -334,26 +301,20 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { String type1 = "typeA"; List edgesType1 = new ArrayList<>(); for (int i = 0; i < 143; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric(15); String name = title1 + suffix; name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); - edge.setName(name); - edge.setType(type1); + Edge edge = constructEdge(name, type1); edgesType1.add(edgeService.saveEdge(edge)); } String title2 = "Edge title 2"; String type2 = "typeB"; List edgesType2 = new ArrayList<>(); for (int i = 0; i < 175; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric(15); String name = title2 + suffix; name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); - edge.setName(name); - edge.setType(type2); + Edge edge = constructEdge(name, type2); edgesType2.add(edgeService.saveEdge(edge)); } @@ -423,10 +384,7 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { List edges = new ArrayList<>(); for (int i = 0; i < 278; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); - edge.setName("Edge" + i); - edge.setType("default"); + Edge edge = constructEdge(tenantId, "Edge" + i, "default"); edge = edgeService.saveEdge(edge); edges.add(edgeService.assignEdgeToCustomer(tenantId, edge.getId(), customerId)); } @@ -469,26 +427,20 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { String title1 = "Edge title 1"; List edgesTitle1 = new ArrayList<>(); for (int i = 0; i < 175; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric(15); String name = title1 + suffix; name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); - edge.setName(name); - edge.setType("default"); + Edge edge = constructEdge(name, "default"); edge = edgeService.saveEdge(edge); edgesTitle1.add(edgeService.assignEdgeToCustomer(tenantId, edge.getId(), customerId)); } String title2 = "Edge title 2"; List edgesTitle2 = new ArrayList<>(); for (int i = 0; i < 143; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric(15); String name = title2 + suffix; name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); - edge.setName(name); - edge.setType("default"); + Edge edge = constructEdge(name, "default"); edge = edgeService.saveEdge(edge); edgesTitle2.add(edgeService.assignEdgeToCustomer(tenantId, edge.getId(), customerId)); } @@ -557,13 +509,10 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { String type1 = "typeC"; List edgesType1 = new ArrayList<>(); for (int i = 0; i < 175; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric(15); String name = title1 + suffix; name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); - edge.setName(name); - edge.setType(type1); + Edge edge = constructEdge(name, type1); edge = edgeService.saveEdge(edge); edgesType1.add(edgeService.assignEdgeToCustomer(tenantId, edge.getId(), customerId)); } @@ -571,13 +520,10 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { String type2 = "typeD"; List edgesType2 = new ArrayList<>(); for (int i = 0; i < 143; i++) { - Edge edge = new Edge(); - edge.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric(15); String name = title2 + suffix; name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); - edge.setName(name); - edge.setType(type2); + Edge edge = constructEdge(name, type2); edge = edgeService.saveEdge(edge); edgesType2.add(edgeService.assignEdgeToCustomer(tenantId, edge.getId(), customerId)); } @@ -633,4 +579,18 @@ public abstract class EdgeServiceImplTest extends AbstractServiceTest { customerService.deleteCustomer(tenantId, customerId); } + private Edge constructEdge(String name, String type) { + return constructEdge(tenantId, name, type); + } + + private Edge constructEdge(TenantId tenantId, String name, String type) { + Edge edge = new Edge(); + edge.setTenantId(tenantId); + edge.setName(name); + edge.setType(type); + edge.setSecret(RandomStringUtils.randomAlphanumeric(20)); + edge.setRoutingKey(RandomStringUtils.randomAlphanumeric(20)); + return edge; + } + }