Commit 9ac73768e82c0a496f912636c2147bbbe78517af

Authored by Volodymyr Babak
1 parent 8b98b2e4

Added rule chain controller and service get edge rule chains test

  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.controller;
  17 +
  18 +import com.fasterxml.jackson.core.type.TypeReference;
  19 +import org.junit.After;
  20 +import org.junit.Assert;
  21 +import org.junit.Before;
  22 +import org.junit.Test;
  23 +import org.thingsboard.server.common.data.Tenant;
  24 +import org.thingsboard.server.common.data.User;
  25 +import org.thingsboard.server.common.data.edge.Edge;
  26 +import org.thingsboard.server.common.data.page.PageData;
  27 +import org.thingsboard.server.common.data.page.PageLink;
  28 +import org.thingsboard.server.common.data.rule.RuleChain;
  29 +import org.thingsboard.server.common.data.rule.RuleChainType;
  30 +import org.thingsboard.server.common.data.security.Authority;
  31 +
  32 +import java.util.ArrayList;
  33 +import java.util.Collections;
  34 +import java.util.List;
  35 +
  36 +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
  37 +
  38 +public abstract class BaseRuleChainControllerTest extends AbstractControllerTest {
  39 +
  40 + private IdComparator<RuleChain> idComparator = new IdComparator<>();
  41 +
  42 + private Tenant savedTenant;
  43 + private User tenantAdmin;
  44 +
  45 + @Before
  46 + public void beforeTest() throws Exception {
  47 + loginSysAdmin();
  48 +
  49 + Tenant tenant = new Tenant();
  50 + tenant.setTitle("My tenant");
  51 + savedTenant = doPost("/api/tenant", tenant, Tenant.class);
  52 + Assert.assertNotNull(savedTenant);
  53 +
  54 + tenantAdmin = new User();
  55 + tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
  56 + tenantAdmin.setTenantId(savedTenant.getId());
  57 + tenantAdmin.setEmail("tenant2@thingsboard.org");
  58 + tenantAdmin.setFirstName("Joe");
  59 + tenantAdmin.setLastName("Downs");
  60 +
  61 + tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
  62 + }
  63 +
  64 + @After
  65 + public void afterTest() throws Exception {
  66 + loginSysAdmin();
  67 +
  68 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  69 + .andExpect(status().isOk());
  70 + }
  71 +
  72 + @Test
  73 + public void testSaveRuleChain() throws Exception {
  74 + RuleChain ruleChain = new RuleChain();
  75 + ruleChain.setName("RuleChain");
  76 + RuleChain savedRuleChain = doPost("/api/ruleChain", ruleChain, RuleChain.class);
  77 + Assert.assertNotNull(savedRuleChain);
  78 + Assert.assertNotNull(savedRuleChain.getId());
  79 + Assert.assertTrue(savedRuleChain.getCreatedTime() > 0);
  80 + Assert.assertEquals(ruleChain.getName(), savedRuleChain.getName());
  81 + savedRuleChain.setName("New RuleChain");
  82 + doPost("/api/ruleChain", savedRuleChain, RuleChain.class);
  83 + RuleChain foundRuleChain = doGet("/api/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class);
  84 + Assert.assertEquals(savedRuleChain.getName(), foundRuleChain.getName());
  85 + }
  86 +
  87 + @Test
  88 + public void testFindRuleChainById() throws Exception {
  89 + RuleChain ruleChain = new RuleChain();
  90 + ruleChain.setName("RuleChain");
  91 + RuleChain savedRuleChain = doPost("/api/ruleChain", ruleChain, RuleChain.class);
  92 + RuleChain foundRuleChain = doGet("/api/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class);
  93 + Assert.assertNotNull(foundRuleChain);
  94 + Assert.assertEquals(savedRuleChain, foundRuleChain);
  95 + }
  96 +
  97 + @Test
  98 + public void testDeleteRuleChain() throws Exception {
  99 + RuleChain ruleChain = new RuleChain();
  100 + ruleChain.setName("RuleChain");
  101 + RuleChain savedRuleChain = doPost("/api/ruleChain", ruleChain, RuleChain.class);
  102 +
  103 + doDelete("/api/ruleChain/" + savedRuleChain.getId().getId().toString())
  104 + .andExpect(status().isOk());
  105 +
  106 + doGet("/api/ruleChain/" + savedRuleChain.getId().getId().toString())
  107 + .andExpect(status().isNotFound());
  108 + }
  109 +
  110 + @Test
  111 + public void testFindEdgeRuleChainsByTenantIdAndName() throws Exception {
  112 + Edge edge = constructEdge("My edge", "default");
  113 + Edge savedEdge = doPost("/api/edge", edge, Edge.class);
  114 +
  115 + List<RuleChain> edgeRuleChains = new ArrayList<>();
  116 + PageLink pageLink = new PageLink(17);
  117 + PageData<RuleChain> pageData = doGetTypedWithPageLink("/api/edge/" + savedEdge.getId().getId() + "/ruleChains?",
  118 + new TypeReference<>() {}, pageLink);
  119 + Assert.assertFalse(pageData.hasNext());
  120 + Assert.assertEquals(1, pageData.getTotalElements());
  121 + edgeRuleChains.addAll(pageData.getData());
  122 +
  123 + for (int i = 0; i < 28; i++) {
  124 + RuleChain ruleChain = new RuleChain();
  125 + ruleChain.setName("RuleChain " + i);
  126 + ruleChain.setType(RuleChainType.EDGE);
  127 + RuleChain savedRuleChain = doPost("/api/ruleChain", ruleChain, RuleChain.class);
  128 + doPost("/api/edge/" + savedEdge.getId().getId().toString()
  129 + + "/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class);
  130 + edgeRuleChains.add(savedRuleChain);
  131 + }
  132 +
  133 + List<RuleChain> loadedEdgeRuleChains = new ArrayList<>();
  134 + pageLink = new PageLink(17);
  135 + do {
  136 + pageData = doGetTypedWithPageLink("/api/edge/" + savedEdge.getId().getId() + "/ruleChains?",
  137 + new TypeReference<>() {}, pageLink);
  138 + loadedEdgeRuleChains.addAll(pageData.getData());
  139 + if (pageData.hasNext()) {
  140 + pageLink = pageLink.nextPageLink();
  141 + }
  142 + } while (pageData.hasNext());
  143 +
  144 + Collections.sort(edgeRuleChains, idComparator);
  145 + Collections.sort(loadedEdgeRuleChains, idComparator);
  146 +
  147 + Assert.assertEquals(edgeRuleChains, loadedEdgeRuleChains);
  148 +
  149 + for (RuleChain ruleChain : loadedEdgeRuleChains) {
  150 + if (!ruleChain.isRoot()) {
  151 + doDelete("/api/edge/" + savedEdge.getId().getId().toString()
  152 + + "/ruleChain/" + ruleChain.getId().getId().toString(), RuleChain.class);
  153 + }
  154 + }
  155 +
  156 + pageLink = new PageLink(17);
  157 + pageData = doGetTypedWithPageLink("/api/edge/" + savedEdge.getId().getId() + "/ruleChains?",
  158 + new TypeReference<>() {}, pageLink);
  159 + Assert.assertFalse(pageData.hasNext());
  160 + Assert.assertEquals(1, pageData.getTotalElements());
  161 + }
  162 +
  163 +}
... ...
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.controller.sql;
  17 +
  18 +import org.thingsboard.server.controller.BaseRuleChainControllerTest;
  19 +import org.thingsboard.server.dao.service.DaoSqlTest;
  20 +
  21 +@DaoSqlTest
  22 +public class RuleChainControllerSqlTest extends BaseRuleChainControllerTest {
  23 +}
... ...
... ... @@ -23,6 +23,7 @@ import org.junit.Assert;
23 23 import org.junit.Before;
24 24 import org.junit.Test;
25 25 import org.thingsboard.server.common.data.Tenant;
  26 +import org.thingsboard.server.common.data.edge.Edge;
26 27 import org.thingsboard.server.common.data.id.RuleChainId;
27 28 import org.thingsboard.server.common.data.id.TenantId;
28 29 import org.thingsboard.server.common.data.page.PageData;
... ... @@ -490,4 +491,99 @@ public abstract class BaseRuleChainServiceTest extends AbstractServiceTest {
490 491
491 492 return ruleChainMetaData;
492 493 }
  494 +
  495 + @Test
  496 + public void testFindEdgeRuleChainsByTenantIdAndName() {
  497 + Edge edge = constructEdge("My edge", "default");
  498 + Edge savedEdge = edgeService.saveEdge(edge);
  499 +
  500 + String name1 = "Edge RuleChain name 1";
  501 + List<RuleChain> ruleChainsName1 = new ArrayList<>();
  502 + for (int i = 0; i < 123; i++) {
  503 + RuleChain ruleChain = new RuleChain();
  504 + ruleChain.setTenantId(tenantId);
  505 + String suffix = RandomStringUtils.randomAlphanumeric((int) (Math.random() * 17));
  506 + String name = name1 + suffix;
  507 + name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
  508 + ruleChain.setName(name);
  509 + ruleChain.setType(RuleChainType.EDGE);
  510 + ruleChainsName1.add(ruleChainService.saveRuleChain(ruleChain));
  511 + }
  512 + ruleChainsName1.forEach(ruleChain -> ruleChainService.assignRuleChainToEdge(tenantId, ruleChain.getId(), savedEdge.getId()));
  513 +
  514 + String name2 = "Edge RuleChain name 2";
  515 + List<RuleChain> ruleChainsName2 = new ArrayList<>();
  516 + for (int i = 0; i < 193; i++) {
  517 + RuleChain ruleChain = new RuleChain();
  518 + ruleChain.setTenantId(tenantId);
  519 + String suffix = RandomStringUtils.randomAlphanumeric((int) (Math.random() * 15));
  520 + String name = name2 + suffix;
  521 + name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
  522 + ruleChain.setName(name);
  523 + ruleChain.setType(RuleChainType.EDGE);
  524 + ruleChainsName2.add(ruleChainService.saveRuleChain(ruleChain));
  525 + }
  526 + ruleChainsName2.forEach(ruleChain -> ruleChainService.assignRuleChainToEdge(tenantId, ruleChain.getId(), savedEdge.getId()));
  527 +
  528 + List<RuleChain> loadedRuleChainsName1 = new ArrayList<>();
  529 + PageLink pageLink = new PageLink(19, 0, name1);
  530 + PageData<RuleChain> pageData = null;
  531 + do {
  532 + pageData = ruleChainService.findRuleChainsByTenantIdAndEdgeId(tenantId, savedEdge.getId(), pageLink);
  533 + loadedRuleChainsName1.addAll(pageData.getData());
  534 + if (pageData.hasNext()) {
  535 + pageLink = pageLink.nextPageLink();
  536 + }
  537 + } while (pageData.hasNext());
  538 +
  539 + Collections.sort(ruleChainsName1, idComparator);
  540 + Collections.sort(loadedRuleChainsName1, idComparator);
  541 +
  542 + Assert.assertEquals(ruleChainsName1, loadedRuleChainsName1);
  543 +
  544 + List<RuleChain> loadedRuleChainsName2 = new ArrayList<>();
  545 + pageLink = new PageLink(4, 0, name2);
  546 + do {
  547 + pageData = ruleChainService.findRuleChainsByTenantIdAndEdgeId(tenantId, savedEdge.getId(), pageLink);
  548 + loadedRuleChainsName2.addAll(pageData.getData());
  549 + if (pageData.hasNext()) {
  550 + pageLink = pageLink.nextPageLink();
  551 + }
  552 + } while (pageData.hasNext());
  553 +
  554 + Collections.sort(ruleChainsName2, idComparator);
  555 + Collections.sort(loadedRuleChainsName2, idComparator);
  556 +
  557 + Assert.assertEquals(ruleChainsName2, loadedRuleChainsName2);
  558 +
  559 + for (RuleChain ruleChain : loadedRuleChainsName1) {
  560 + ruleChainService.deleteRuleChainById(tenantId, ruleChain.getId());
  561 + }
  562 +
  563 + pageLink = new PageLink(4, 0, name1);
  564 + pageData = ruleChainService.findRuleChainsByTenantIdAndEdgeId(tenantId, savedEdge.getId(), pageLink);
  565 + Assert.assertFalse(pageData.hasNext());
  566 + Assert.assertEquals(0, pageData.getData().size());
  567 +
  568 + for (RuleChain ruleChain : loadedRuleChainsName2) {
  569 + ruleChainService.deleteRuleChainById(tenantId, ruleChain.getId());
  570 + }
  571 +
  572 + pageLink = new PageLink(4, 0, name2);
  573 + pageData = ruleChainService.findRuleChainsByTenantIdAndEdgeId(tenantId, savedEdge.getId(), pageLink);
  574 + Assert.assertFalse(pageData.hasNext());
  575 + Assert.assertEquals(0, pageData.getData().size());
  576 + }
  577 +
  578 + private Edge constructEdge(String name, String type) {
  579 + Edge edge = new Edge();
  580 + edge.setTenantId(tenantId);
  581 + edge.setName(name);
  582 + edge.setType(type);
  583 + edge.setSecret(RandomStringUtils.randomAlphanumeric(20));
  584 + edge.setRoutingKey(RandomStringUtils.randomAlphanumeric(20));
  585 + edge.setEdgeLicenseKey(RandomStringUtils.randomAlphanumeric(20));
  586 + edge.setCloudEndpoint("http://localhost:8080");
  587 + return edge;
  588 + }
493 589 }
... ...