39 changed files with 425 additions and 118 deletions
@ -0,0 +1,158 @@ |
|||
/** |
|||
* Copyright © 2016-2023 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.dao.sql.rule; |
|||
|
|||
import com.datastax.oss.driver.api.core.uuid.Uuids; |
|||
import com.google.common.util.concurrent.ListeningExecutorService; |
|||
import org.junit.After; |
|||
import org.junit.Before; |
|||
import org.junit.Test; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.thingsboard.common.util.JacksonUtil; |
|||
import org.thingsboard.server.common.data.id.RuleChainId; |
|||
import org.thingsboard.server.common.data.id.RuleNodeId; |
|||
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.RuleNode; |
|||
import org.thingsboard.server.dao.AbstractJpaDaoTest; |
|||
import org.thingsboard.server.dao.rule.RuleChainDao; |
|||
import org.thingsboard.server.dao.rule.RuleNodeDao; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.UUID; |
|||
|
|||
import static org.assertj.core.api.Assertions.assertThatThrownBy; |
|||
import static org.junit.Assert.assertEquals; |
|||
import static org.junit.Assert.assertNotNull; |
|||
|
|||
public class JpaRuleNodeDaoTest extends AbstractJpaDaoTest { |
|||
|
|||
public static final int COUNT = 40; |
|||
public static final String PREFIX_FOR_RULE_NODE_NAME = "SEARCH_TEXT_"; |
|||
List<UUID> ruleNodeIds; |
|||
TenantId tenantId1; |
|||
TenantId tenantId2; |
|||
RuleChainId ruleChainId1; |
|||
RuleChainId ruleChainId2; |
|||
|
|||
@Autowired |
|||
private RuleChainDao ruleChainDao; |
|||
|
|||
@Autowired |
|||
private RuleNodeDao ruleNodeDao; |
|||
|
|||
ListeningExecutorService executor; |
|||
|
|||
@Before |
|||
public void setUp() { |
|||
tenantId1 = TenantId.fromUUID(Uuids.timeBased()); |
|||
ruleChainId1 = new RuleChainId(UUID.randomUUID()); |
|||
tenantId2 = TenantId.fromUUID(Uuids.timeBased()); |
|||
ruleChainId2 = new RuleChainId(UUID.randomUUID()); |
|||
|
|||
ruleNodeIds = createRuleNodes(tenantId1, tenantId2, ruleChainId1, ruleChainId2, COUNT); |
|||
} |
|||
|
|||
@After |
|||
public void tearDown() throws Exception { |
|||
ruleNodeDao.removeAllByIds(ruleNodeIds); |
|||
if (executor != null) { |
|||
executor.shutdownNow(); |
|||
} |
|||
} |
|||
|
|||
@Test |
|||
public void testSaveRuleName0x00_thenSomeDatabaseException() { |
|||
RuleNode ruleNode = getRuleNode(ruleChainId1, "T", "\u0000"); |
|||
assertThatThrownBy(() -> ruleNodeIds.add(ruleNodeDao.save(tenantId1, ruleNode).getUuidId())); |
|||
} |
|||
|
|||
@Test |
|||
public void testFindRuleNodesByTenantIdAndType() { |
|||
List<RuleNode> ruleNodes1 = ruleNodeDao.findRuleNodesByTenantIdAndType(tenantId1, "A", PREFIX_FOR_RULE_NODE_NAME); |
|||
assertEquals(20, ruleNodes1.size()); |
|||
|
|||
List<RuleNode> ruleNodes2 = ruleNodeDao.findRuleNodesByTenantIdAndType(tenantId2, "B", PREFIX_FOR_RULE_NODE_NAME); |
|||
assertEquals(20, ruleNodes2.size()); |
|||
|
|||
ruleNodes1 = ruleNodeDao.findRuleNodesByTenantIdAndType(tenantId1, "A", null); |
|||
assertEquals(20, ruleNodes1.size()); |
|||
|
|||
ruleNodes2 = ruleNodeDao.findRuleNodesByTenantIdAndType(tenantId2, "B", null); |
|||
assertEquals(20, ruleNodes2.size()); |
|||
} |
|||
|
|||
@Test |
|||
public void testFindRuleNodesByType() { |
|||
PageData<RuleNode> ruleNodes = ruleNodeDao.findAllRuleNodesByType( "A", new PageLink(10, 0, PREFIX_FOR_RULE_NODE_NAME)); |
|||
assertEquals(20, ruleNodes.getTotalElements()); |
|||
assertEquals(2, ruleNodes.getTotalPages()); |
|||
assertEquals(10, ruleNodes.getData().size()); |
|||
|
|||
ruleNodes = ruleNodeDao.findAllRuleNodesByType( "A", new PageLink(10, 0)); |
|||
assertEquals(20, ruleNodes.getTotalElements()); |
|||
assertEquals(2, ruleNodes.getTotalPages()); |
|||
assertEquals(10, ruleNodes.getData().size()); |
|||
} |
|||
|
|||
@Test |
|||
public void testFindRuleNodesByTypeAndVersionLessThan() { |
|||
PageData<RuleNode> ruleNodes = ruleNodeDao.findAllRuleNodesByTypeAndVersionLessThan( "A", 1, new PageLink(10, 0, PREFIX_FOR_RULE_NODE_NAME)); |
|||
assertEquals(20, ruleNodes.getTotalElements()); |
|||
assertEquals(2, ruleNodes.getTotalPages()); |
|||
assertEquals(10, ruleNodes.getData().size()); |
|||
|
|||
ruleNodes = ruleNodeDao.findAllRuleNodesByTypeAndVersionLessThan( "A", 1, new PageLink(10, 0)); |
|||
assertEquals(20, ruleNodes.getTotalElements()); |
|||
assertEquals(2, ruleNodes.getTotalPages()); |
|||
assertEquals(10, ruleNodes.getData().size()); |
|||
} |
|||
|
|||
private List<UUID> createRuleNodes(TenantId tenantId1, TenantId tenantId2, RuleChainId ruleChainId1, RuleChainId ruleChainId2, int count) { |
|||
var chain1 = new RuleChain(ruleChainId1); |
|||
chain1.setTenantId(tenantId1); |
|||
chain1.setName(ruleChainId1.toString()); |
|||
ruleChainDao.save(tenantId1, chain1); |
|||
var chain2 = new RuleChain(ruleChainId2); |
|||
chain2.setTenantId(tenantId2); |
|||
chain2.setName(ruleChainId2.toString()); |
|||
ruleChainDao.save(tenantId2, chain2); |
|||
List<UUID> savedRuleNodeIds = new ArrayList<>(); |
|||
for (int i = 0; i < count / 2; i++) { |
|||
savedRuleNodeIds.add(ruleNodeDao.save(tenantId1, getRuleNode(ruleChainId1, "A", Integer.toString(i))).getUuidId()); |
|||
savedRuleNodeIds.add(ruleNodeDao.save(tenantId2, getRuleNode(ruleChainId2, "B", Integer.toString(i + count / 2))).getUuidId()); |
|||
} |
|||
return savedRuleNodeIds; |
|||
} |
|||
|
|||
private RuleNode getRuleNode(RuleChainId ruleChainId, String type, String nameSuffix) { |
|||
return getRuleNode(ruleChainId, Uuids.timeBased(), type, nameSuffix); |
|||
} |
|||
|
|||
private RuleNode getRuleNode(RuleChainId ruleChainId, UUID ruleNodeId, String type, String nameSuffix) { |
|||
RuleNode ruleNode = new RuleNode(); |
|||
ruleNode.setId(new RuleNodeId(ruleNodeId)); |
|||
ruleNode.setRuleChainId(ruleChainId); |
|||
ruleNode.setName(nameSuffix); |
|||
ruleNode.setType(type); |
|||
ruleNode.setConfiguration(JacksonUtil.newObjectNode().put("searchHint", PREFIX_FOR_RULE_NODE_NAME + nameSuffix)); |
|||
ruleNode.setConfigurationVersion(0); |
|||
return ruleNode; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue