diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java index 48db5912a0..1cd7e6285e 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java @@ -884,7 +884,10 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest { protected void awaitForDeviceActorToReceiveSubscription(DeviceId deviceId, FeatureType featureType, int subscriptionCount) { DeviceActorMessageProcessor processor = getDeviceActorProcessor(deviceId); Map subscriptions = (Map) ReflectionTestUtils.getField(processor, getMapName(featureType)); - Awaitility.await("Device actor received subscription command from the transport").atMost(TIMEOUT, TimeUnit.SECONDS).until(() -> subscriptions.size() == subscriptionCount); + Awaitility.await("Device actor received subscription command from the transport").atMost(5, TimeUnit.SECONDS).until(() -> { + log.warn("device {}, subscriptions.size() == {}", deviceId, subscriptions.size()); + return subscriptions.size() == subscriptionCount; + }); } protected static String getMapName(FeatureType featureType) { diff --git a/application/src/test/java/org/thingsboard/server/edge/BaseDeviceEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/BaseDeviceEdgeTest.java index 98508e72ce..904a6246ab 100644 --- a/application/src/test/java/org/thingsboard/server/edge/BaseDeviceEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/BaseDeviceEdgeTest.java @@ -671,6 +671,7 @@ abstract public class BaseDeviceEdgeTest extends AbstractEdgeTest { client.setCallback(onUpdateCallback); client.subscribeAndWait("v1/devices/me/attributes", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(device.getId(), FeatureType.ATTRIBUTES, 1); edgeImitator.expectResponsesAmount(1); @@ -690,7 +691,7 @@ abstract public class BaseDeviceEdgeTest extends AbstractEdgeTest { edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); Assert.assertTrue(edgeImitator.waitForResponses()); - Assert.assertTrue(onUpdateCallback.getSubscribeLatch().await(5, TimeUnit.SECONDS)); + Assert.assertTrue(onUpdateCallback.getSubscribeLatch().await(30, TimeUnit.SECONDS)); Assert.assertEquals(JacksonUtil.OBJECT_MAPPER.createObjectNode().put(attrKey, attrValue), JacksonUtil.fromBytes(onUpdateCallback.getPayloadBytes())); diff --git a/application/src/test/java/org/thingsboard/server/service/resource/sql/BaseTbResourceServiceTest.java b/application/src/test/java/org/thingsboard/server/service/resource/sql/BaseTbResourceServiceTest.java index b0282832bc..e2c5985553 100644 --- a/application/src/test/java/org/thingsboard/server/service/resource/sql/BaseTbResourceServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/resource/sql/BaseTbResourceServiceTest.java @@ -19,10 +19,8 @@ import com.datastax.oss.driver.api.core.uuid.Uuids; import org.junit.After; import org.junit.Assert; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.jupiter.api.Assertions; -import org.junit.rules.ExpectedException; import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.EntityInfo; import org.thingsboard.server.common.data.ResourceType; @@ -46,6 +44,7 @@ import java.util.Base64; import java.util.Collections; import java.util.List; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @DaoSqlTest @@ -116,10 +115,6 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest { .andExpect(status().isOk()); } - @SuppressWarnings("deprecation") - @Rule - public ExpectedException thrown = ExpectedException.none(); - @Test public void testSaveResourceWithMaxSumDataSizeOutOfLimit() throws Exception { loginSysAdmin(); @@ -138,9 +133,9 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest { Assert.assertEquals(1, resourceService.sumDataSizeByTenantId(tenantId)); try { - thrown.expect(DataValidationException.class); - thrown.expectMessage(String.format("Failed to create the tb resource, files size limit is exhausted %d bytes!", limit)); - createResource("test1", 1 + DEFAULT_FILE_NAME); + assertThatThrownBy(() -> createResource("test1", 1 + DEFAULT_FILE_NAME)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("Failed to create the tb resource, files size limit is exhausted %d bytes!", limit); } finally { defaultTenantProfile.getProfileData().setConfiguration(DefaultTenantProfileConfiguration.builder().maxResourcesInBytes(0).build()); loginSysAdmin(); diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/attributes/AbstractMqttAttributesIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/attributes/AbstractMqttAttributesIntegrationTest.java index b2fed98f2b..b483084258 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/attributes/AbstractMqttAttributesIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/attributes/AbstractMqttAttributesIntegrationTest.java @@ -354,6 +354,8 @@ public abstract class AbstractMqttAttributesIntegrationTest extends AbstractMqtt SHARED_ATTRIBUTES_PAYLOAD, String.class, status().isOk()); client.publishAndWait(attrPubTopic, CLIENT_ATTRIBUTES_PAYLOAD.getBytes()); client.subscribeAndWait(attrSubTopic, MqttQoS.AT_MOST_ONCE); + //RequestAttributes does not make any subscriptions in device actor + String update = getWsClient().waitForUpdate(); assertThat(update).as("ws update received").isNotBlank(); MqttTestCallback callback = new MqttTestCallback(attrSubTopic.replace("+", "1")); @@ -383,6 +385,8 @@ public abstract class AbstractMqttAttributesIntegrationTest extends AbstractMqtt doPostAsync("/api/plugins/telemetry/DEVICE/" + savedDevice.getId().getId() + "/attributes/SHARED_SCOPE", SHARED_ATTRIBUTES_PAYLOAD, String.class, status().isOk()); client.publishAndWait(attrPubTopic, getAttributesProtoPayloadBytes()); client.subscribeAndWait(attrSubTopic, MqttQoS.AT_MOST_ONCE); + //RequestAttributes does not make any subscriptions in device actor + String update = getWsClient().waitForUpdate(); assertThat(update).as("ws update received").isNotBlank(); MqttTestCallback callback = new MqttTestCallback(attrSubTopic.replace("+", "1")); @@ -442,6 +446,7 @@ public abstract class AbstractMqttAttributesIntegrationTest extends AbstractMqtt assertThat(update).as("ws update received").isNotBlank(); client.subscribeAndWait(GATEWAY_ATTRIBUTES_RESPONSE_TOPIC, MqttQoS.AT_LEAST_ONCE); + //RequestAttributes does not make any subscriptions in device actor MqttTestCallback clientAttributesCallback = new MqttTestCallback(GATEWAY_ATTRIBUTES_RESPONSE_TOPIC); client.setCallback(clientAttributesCallback); @@ -495,6 +500,7 @@ public abstract class AbstractMqttAttributesIntegrationTest extends AbstractMqtt assertThat(update).as("ws update received").isNotBlank(); client.subscribeAndWait(GATEWAY_ATTRIBUTES_RESPONSE_TOPIC, MqttQoS.AT_LEAST_ONCE); + awaitForDeviceActorToReceiveSubscription(device.getId(), FeatureType.ATTRIBUTES, 1); MqttTestCallback clientAttributesCallback = new MqttTestCallback(GATEWAY_ATTRIBUTES_RESPONSE_TOPIC); client.setCallback(clientAttributesCallback); diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/rpc/AbstractMqttServerSideRpcIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/rpc/AbstractMqttServerSideRpcIntegrationTest.java index 924b4d50a6..205386a32e 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/rpc/AbstractMqttServerSideRpcIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/rpc/AbstractMqttServerSideRpcIntegrationTest.java @@ -223,7 +223,6 @@ public abstract class AbstractMqttServerSideRpcIntegrationTest extends AbstractM MqttTestCallback callback = new MqttTestCallback(GATEWAY_RPC_TOPIC); client.setCallback(callback); - client.subscribeAndWait(GATEWAY_RPC_TOPIC, MqttQoS.AT_MOST_ONCE); subscribeAndCheckSubscription(client, GATEWAY_RPC_TOPIC, savedDevice.getId(), FeatureType.RPC); String setGpioRequest = "{\"method\": \"toggle_gpio\", \"params\": {\"pin\":1}}"; diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/attributes/AbstractAttributesMqttV5Test.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/attributes/AbstractAttributesMqttV5Test.java index e3dfc6fb55..347b397ef5 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/attributes/AbstractAttributesMqttV5Test.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/attributes/AbstractAttributesMqttV5Test.java @@ -21,6 +21,7 @@ import org.junit.Before; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.device.profile.MqttTopics; import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.msg.session.FeatureType; import org.thingsboard.server.transport.mqtt.MqttTestConfigProperties; import org.thingsboard.server.transport.mqtt.mqttv5.AbstractMqttV5Test; import org.thingsboard.server.transport.mqtt.mqttv5.MqttV5TestCallback; @@ -104,6 +105,7 @@ public abstract class AbstractAttributesMqttV5Test extends AbstractMqttV5Test { MqttV5TestCallback onUpdateCallback = new MqttV5TestCallback(); client.setCallback(onUpdateCallback); client.subscribeAndWait(MqttTopics.DEVICE_ATTRIBUTES_TOPIC, MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedDevice.getId(), FeatureType.ATTRIBUTES, 1); doPostAsync("/api/plugins/telemetry/DEVICE/" + savedDevice.getId().getId() + "/attributes/SHARED_SCOPE", SHARED_ATTRIBUTES_PAYLOAD, String.class, status().isOk()); onUpdateCallback.getSubscribeLatch().await(3, TimeUnit.SECONDS); diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/connection/AbstractMqttV5ClientConnectionTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/connection/AbstractMqttV5ClientConnectionTest.java index 81b015e245..93d349e0ec 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/connection/AbstractMqttV5ClientConnectionTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/connection/AbstractMqttV5ClientConnectionTest.java @@ -25,6 +25,7 @@ import org.eclipse.paho.mqttv5.common.packet.MqttReturnCode; import org.eclipse.paho.mqttv5.common.packet.MqttWireMessage; import org.junit.Assert; import org.thingsboard.server.common.data.device.profile.MqttTopics; +import org.thingsboard.server.common.msg.session.FeatureType; import org.thingsboard.server.transport.mqtt.AbstractMqttIntegrationTest; import org.thingsboard.server.transport.mqtt.mqttv5.MqttV5TestCallback; import org.thingsboard.server.transport.mqtt.mqttv5.MqttV5TestClient; @@ -101,6 +102,7 @@ public abstract class AbstractMqttV5ClientConnectionTest extends AbstractMqttInt MqttV5TestCallback onUpdateCallback = new MqttV5TestCallback(); client.setCallback(onUpdateCallback); client.subscribeAndWait(MqttTopics.DEVICE_ATTRIBUTES_TOPIC, MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedDevice.getId(), FeatureType.ATTRIBUTES, 1); String payload = "{\"sharedStr\":\"" + StringUtils.repeat("*", valueLen) + "\"}"; diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/subscribe/AbstractMqttV5ClientSubscriptionTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/subscribe/AbstractMqttV5ClientSubscriptionTest.java index f681ad5b55..aebb5a7ed2 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/subscribe/AbstractMqttV5ClientSubscriptionTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/subscribe/AbstractMqttV5ClientSubscriptionTest.java @@ -22,6 +22,7 @@ import org.eclipse.paho.mqttv5.common.packet.MqttSubAck; import org.eclipse.paho.mqttv5.common.packet.MqttWireMessage; import org.junit.Assert; import org.thingsboard.server.common.data.device.profile.MqttTopics; +import org.thingsboard.server.common.msg.session.FeatureType; import org.thingsboard.server.transport.mqtt.AbstractMqttIntegrationTest; import org.thingsboard.server.transport.mqtt.mqttv5.MqttV5TestClient; @@ -34,6 +35,7 @@ public abstract class AbstractMqttV5ClientSubscriptionTest extends AbstractMqttI client.connectAndWait(accessToken); IMqttToken subscriptionResult = client.subscribeAndWait(MqttTopics.DEVICE_ATTRIBUTES_TOPIC, MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedDevice.getId(), FeatureType.ATTRIBUTES, 1); MqttWireMessage response = subscriptionResult.getResponse(); @@ -52,6 +54,7 @@ public abstract class AbstractMqttV5ClientSubscriptionTest extends AbstractMqttI client.connectAndWait(accessToken); IMqttToken iMqttToken = client.subscribeAndWait("wrong/topic/+", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedDevice.getId(), FeatureType.ATTRIBUTES, 0); Assert.assertEquals(MESSAGE_TYPE_SUBACK,iMqttToken.getResponse().getType()); MqttSubAck subAck = (MqttSubAck) iMqttToken.getResponse(); Assert.assertEquals(1, subAck.getReturnCodes().length); diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/unsubscribe/AbstractMqttV5ClientUnsubscribeTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/unsubscribe/AbstractMqttV5ClientUnsubscribeTest.java index 835e225da4..ca534b9999 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/unsubscribe/AbstractMqttV5ClientUnsubscribeTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/client/unsubscribe/AbstractMqttV5ClientUnsubscribeTest.java @@ -22,6 +22,7 @@ import org.eclipse.paho.mqttv5.common.packet.MqttUnsubAck; import org.eclipse.paho.mqttv5.common.packet.MqttWireMessage; import org.junit.Assert; import org.thingsboard.server.common.data.device.profile.MqttTopics; +import org.thingsboard.server.common.msg.session.FeatureType; import org.thingsboard.server.transport.mqtt.AbstractMqttIntegrationTest; import org.thingsboard.server.transport.mqtt.mqttv5.MqttV5TestClient; @@ -34,6 +35,7 @@ public abstract class AbstractMqttV5ClientUnsubscribeTest extends AbstractMqttIn client.connectAndWait(accessToken); client.subscribeAndWait(MqttTopics.DEVICE_ATTRIBUTES_TOPIC, MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedDevice.getId(), FeatureType.ATTRIBUTES, 1); IMqttToken unsubscribeResult = client.unsubscribeAndWait(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); MqttWireMessage response = unsubscribeResult.getResponse(); Assert.assertEquals(MESSAGE_TYPE_UNSUBACK, response.getType()); diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/rpc/AbstractMqttV5RpcTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/rpc/AbstractMqttV5RpcTest.java index b6604439da..aecd1124e3 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/rpc/AbstractMqttV5RpcTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/rpc/AbstractMqttV5RpcTest.java @@ -22,6 +22,7 @@ import org.eclipse.paho.mqttv5.common.MqttException; import org.eclipse.paho.mqttv5.common.MqttMessage; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.StringUtils; +import org.thingsboard.server.common.msg.session.FeatureType; import org.thingsboard.server.transport.mqtt.mqttv5.AbstractMqttV5Test; import org.thingsboard.server.transport.mqtt.mqttv5.MqttV5TestCallback; import org.thingsboard.server.transport.mqtt.mqttv5.MqttV5TestClient; @@ -45,6 +46,7 @@ public abstract class AbstractMqttV5RpcTest extends AbstractMqttV5Test { MqttV5TestCallback callback = new MqttV5TestCallback(DEVICE_RPC_REQUESTS_SUB_TOPIC.replace("+", "0")); client.setCallback(callback); client.subscribeAndWait(DEVICE_RPC_REQUESTS_SUB_TOPIC, MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedDevice.getId(), FeatureType.RPC, 1); String setGpioRequest = "{\"method\":\"setGpio\",\"params\":{\"pin\": \"23\",\"value\": 1}}"; String result = doPostAsync("/api/rpc/oneway/" + savedDevice.getId(), setGpioRequest, String.class, status().isOk()); @@ -59,6 +61,7 @@ public abstract class AbstractMqttV5RpcTest extends AbstractMqttV5Test { MqttV5TestClient client = new MqttV5TestClient(); client.connectAndWait(accessToken); client.subscribeAndWait(DEVICE_RPC_REQUESTS_SUB_TOPIC, MqttQoS.AT_LEAST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedDevice.getId(), FeatureType.RPC, 1); MqttV5TestRpcCallback callback = new MqttV5TestRpcCallback(client, DEVICE_RPC_REQUESTS_SUB_TOPIC.replace("+", "0")); client.setCallback(callback); String setGpioRequest = "{\"method\":\"setGpio\",\"params\":{\"pin\": \"26\",\"value\": 1}}"; diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/sparkplug/attributes/AbstractMqttV5ClientSparkplugAttributesTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/sparkplug/attributes/AbstractMqttV5ClientSparkplugAttributesTest.java index 04349d0672..4e05e44668 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/sparkplug/attributes/AbstractMqttV5ClientSparkplugAttributesTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/sparkplug/attributes/AbstractMqttV5ClientSparkplugAttributesTest.java @@ -20,6 +20,7 @@ import io.netty.handler.codec.mqtt.MqttQoS; import lombok.extern.slf4j.Slf4j; import org.junit.Assert; import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.msg.session.FeatureType; import org.thingsboard.server.transport.mqtt.sparkplug.AbstractMqttV5ClientSparkplugTest; import org.thingsboard.server.transport.mqtt.util.sparkplug.MetricDataType; import org.thingsboard.server.transport.mqtt.util.sparkplug.SparkplugMessageType; @@ -50,6 +51,7 @@ public abstract class AbstractMqttV5ClientSparkplugAttributesTest extends Abstra String SHARED_ATTRIBUTES_PAYLOAD = "{\"" + keyNodeRebirth + "\":" + value + "}"; Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.ATTRIBUTES, 1); doPostAsync("/api/plugins/telemetry/DEVICE/" + savedGateway.getId().getId() + "/attributes/SHARED_SCOPE", SHARED_ATTRIBUTES_PAYLOAD, String.class, status().isOk()); await(alias + SparkplugMessageType.NBIRTH.name()) .atMost(40, TimeUnit.SECONDS) @@ -75,6 +77,7 @@ public abstract class AbstractMqttV5ClientSparkplugAttributesTest extends Abstra connectionWithNBirth(metricDataType, metricKey, metricValue); Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.ATTRIBUTES, 1); // Boolean <-> String boolean expectedValue = true; @@ -138,6 +141,7 @@ public abstract class AbstractMqttV5ClientSparkplugAttributesTest extends Abstra connectionWithNBirth(metricDataType, metricKey, metricValue); Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.ATTRIBUTES, 1); // Long <-> String String valueStr = "123"; @@ -189,6 +193,7 @@ public abstract class AbstractMqttV5ClientSparkplugAttributesTest extends Abstra connectionWithNBirth(metricDataType, metricKey, metricValue); Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.ATTRIBUTES, 1); // Float <-> String String valueStr = "123.345"; @@ -240,6 +245,7 @@ public abstract class AbstractMqttV5ClientSparkplugAttributesTest extends Abstra connectionWithNBirth(metricDataType, metricKey, metricValue); Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.ATTRIBUTES, 1); // Double <-> String String valueStr = "123345456"; @@ -291,6 +297,7 @@ public abstract class AbstractMqttV5ClientSparkplugAttributesTest extends Abstra connectionWithNBirth(metricDataType, metricKey, metricValue); Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.ATTRIBUTES, 1); // String <-> Long long valueLong = 123345456L; diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/sparkplug/rpc/AbstractMqttV5RpcSparkplugTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/sparkplug/rpc/AbstractMqttV5RpcSparkplugTest.java index b08baac875..036b779de1 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/sparkplug/rpc/AbstractMqttV5RpcSparkplugTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/sparkplug/rpc/AbstractMqttV5RpcSparkplugTest.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.junit.Assert; import org.junit.Test; import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.msg.session.FeatureType; import org.thingsboard.server.transport.mqtt.sparkplug.AbstractMqttV5ClientSparkplugTest; import org.thingsboard.server.transport.mqtt.util.sparkplug.SparkplugMessageType; @@ -45,6 +46,7 @@ public abstract class AbstractMqttV5RpcSparkplugTest extends AbstractMqttV5Clie connectionWithNBirth(metricBirthDataType_Int32, metricBirthName_Int32, nextInt32()); Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.RPC, 1); String expected = "{\"result\":\"Success: " + SparkplugMessageType.NCMD.name() + "\"}"; String actual = sendRPCSparkplug(NCMD.name(), sparkplugRpcRequest, savedGateway); await(alias + SparkplugMessageType.NCMD.name()) @@ -79,6 +81,7 @@ public abstract class AbstractMqttV5RpcSparkplugTest extends AbstractMqttV5Clie connectionWithNBirth(metricBirthDataType_Int32, metricBirthName_Int32, nextInt32()); Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.RPC, 1); String invalidateTypeMessageName = "RCMD"; String expected = "{\"result\":\"" + INVALID_ARGUMENTS + "\",\"error\":\"Failed to convert device RPC command to MQTT msg: " + invalidateTypeMessageName + "{\\\"metricName\\\":\\\"" + metricBirthName_Int32 + "\\\",\\\"value\\\":" + metricBirthValue_Int32 + "}\"}"; @@ -92,6 +95,7 @@ public abstract class AbstractMqttV5RpcSparkplugTest extends AbstractMqttV5Clie connectionWithNBirth(metricBirthDataType_Int32, metricBirthName_Int32, nextInt32()); Assert.assertTrue("Connection node is failed", client.isConnected()); client.subscribeAndWait(NAMESPACE + "/" + groupId + "/" + NCMD.name() + "/" + edgeNode + "/#", MqttQoS.AT_MOST_ONCE); + awaitForDeviceActorToReceiveSubscription(savedGateway.getId(), FeatureType.RPC, 1); String metricNameBad = metricBirthName_Int32 + "_Bad"; String sparkplugRpcRequestBad = "{\"metricName\":\"" + metricNameBad + "\",\"value\":" + metricBirthValue_Int32 + "}"; String expected = "{\"result\":\"BAD_REQUEST_PARAMS\",\"error\":\"Failed send To Node Rpc Request: " + diff --git a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java index 0d43fc6c93..e58e2c5d89 100644 --- a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java +++ b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java @@ -1060,7 +1060,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement } } - private void checkSparkplugNodeSession(MqttConnectMessage connectMessage, ChannelHandlerContext ctx) { + private void checkSparkplugNodeSession(MqttConnectMessage connectMessage, ChannelHandlerContext ctx, SessionMetaData sessionMetaData) { try { if (sparkplugSessionHandler == null) { SparkplugTopic sparkplugTopicNode = validatedSparkplugTopicConnectedNode(connectMessage); @@ -1069,6 +1069,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement sparkplugSessionHandler = new SparkplugNodeSessionHandler(this, deviceSessionCtx, sessionId, sparkplugTopicNode); sparkplugSessionHandler.onAttributesTelemetryProto(0, sparkplugBProtoNode, deviceSessionCtx.getDeviceInfo().getDeviceName(), sparkplugTopicNode); + sessionMetaData.setOverwriteActivityTime(true); } else { log.trace("[{}][{}] Failed to fetch sparkplugDevice connect: sparkplugTopicName without SparkplugMessageType.NDEATH.", sessionId, deviceSessionCtx.getDeviceInfo().getDeviceName()); throw new ThingsboardException("Invalid request body", ThingsboardErrorCode.BAD_REQUEST_PARAMS); @@ -1145,7 +1146,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement public void onSuccess(Void msg) { SessionMetaData sessionMetaData = transportService.registerAsyncSession(deviceSessionCtx.getSessionInfo(), MqttTransportHandler.this); if (deviceSessionCtx.isSparkplug()) { - checkSparkplugNodeSession(connectMessage, ctx); + checkSparkplugNodeSession(connectMessage, ctx, sessionMetaData); } else { checkGatewaySession(sessionMetaData); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/DefaultEntityServiceRegistry.java b/dao/src/main/java/org/thingsboard/server/dao/entity/DefaultEntityServiceRegistry.java index a8b1d97bac..232905e9fc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entity/DefaultEntityServiceRegistry.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entity/DefaultEntityServiceRegistry.java @@ -15,27 +15,31 @@ */ package org.thingsboard.server.dao.entity; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.EntityType; -import javax.annotation.PostConstruct; import java.util.HashMap; import java.util.Map; @Service +@RequiredArgsConstructor +@Slf4j public class DefaultEntityServiceRegistry implements EntityServiceRegistry { private final ApplicationContext applicationContext; - private final Map entityDaoServicesMap; + private final Map entityDaoServicesMap = new HashMap<>(); - public DefaultEntityServiceRegistry(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - this.entityDaoServicesMap = new HashMap<>(); - } - - @PostConstruct + @EventListener(ContextRefreshedEvent.class) + @Order(Ordered.HIGHEST_PRECEDENCE) public void init() { + log.debug("Initializing EntityServiceRegistry on ContextRefreshedEvent"); applicationContext.getBeansOfType(EntityDaoService.class).values().forEach(entityDaoService -> { EntityType entityType = entityDaoService.getEntityType(); entityDaoServicesMap.put(entityType, entityDaoService); @@ -43,6 +47,7 @@ public class DefaultEntityServiceRegistry implements EntityServiceRegistry { entityDaoServicesMap.put(EntityType.RULE_NODE, entityDaoService); } }); + log.debug("Initialized EntityServiceRegistry total [{}] entries", entityDaoServicesMap.size()); } @Override diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java index 7f1f5e9ca0..55f3bb58c8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java @@ -18,6 +18,8 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.After; +import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; @@ -47,44 +49,17 @@ import org.thingsboard.server.common.data.id.HasId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; import org.thingsboard.server.common.data.ota.OtaPackageType; -import org.thingsboard.server.dao.alarm.AlarmCommentService; -import org.thingsboard.server.dao.alarm.AlarmService; -import org.thingsboard.server.dao.asset.AssetProfileService; -import org.thingsboard.server.dao.asset.AssetService; import org.thingsboard.server.dao.audit.AuditLogLevelFilter; import org.thingsboard.server.dao.audit.AuditLogLevelMask; import org.thingsboard.server.dao.audit.AuditLogLevelProperties; -import org.thingsboard.server.dao.component.ComponentDescriptorService; -import org.thingsboard.server.dao.customer.CustomerService; -import org.thingsboard.server.dao.dashboard.DashboardService; -import org.thingsboard.server.dao.device.DeviceCredentialsService; -import org.thingsboard.server.dao.device.DeviceProfileService; -import org.thingsboard.server.dao.device.DeviceService; -import org.thingsboard.server.dao.edge.EdgeEventService; -import org.thingsboard.server.dao.edge.EdgeService; -import org.thingsboard.server.dao.entity.EntityService; -import org.thingsboard.server.dao.entityview.EntityViewService; -import org.thingsboard.server.dao.event.EventService; -import org.thingsboard.server.dao.ota.OtaPackageService; -import org.thingsboard.server.dao.queue.QueueService; -import org.thingsboard.server.dao.relation.RelationService; -import org.thingsboard.server.dao.resource.ResourceService; -import org.thingsboard.server.dao.rpc.RpcService; -import org.thingsboard.server.dao.rule.RuleChainService; -import org.thingsboard.server.dao.settings.AdminSettingsService; -import org.thingsboard.server.dao.tenant.TenantProfileService; import org.thingsboard.server.dao.tenant.TenantService; -import org.thingsboard.server.dao.timeseries.TimeseriesService; -import org.thingsboard.server.dao.usagerecord.ApiUsageStateService; -import org.thingsboard.server.dao.user.UserService; -import org.thingsboard.server.dao.widget.WidgetTypeService; -import org.thingsboard.server.dao.widget.WidgetsBundleService; import java.io.IOException; import java.nio.ByteBuffer; import java.util.Comparator; import java.util.HashMap; import java.util.Map; +import java.util.UUID; import static org.junit.Assert.assertNotNull; @@ -100,91 +75,20 @@ public abstract class AbstractServiceTest { public static final TenantId SYSTEM_TENANT_ID = TenantId.SYS_TENANT_ID; - @Autowired - protected UserService userService; - - @Autowired - protected ApiUsageStateService apiUsageStateService; - - @Autowired - protected AdminSettingsService adminSettingsService; - @Autowired protected TenantService tenantService; - @Autowired - protected CustomerService customerService; - - @Autowired - protected DeviceService deviceService; - - @Autowired - protected AssetService assetService; - - @Autowired - protected EntityViewService entityViewService; - - @Autowired - protected EntityService entityService; - - @Autowired - protected DeviceCredentialsService deviceCredentialsService; - - @Autowired - protected WidgetsBundleService widgetsBundleService; - - @Autowired - protected WidgetTypeService widgetTypeService; - - @Autowired - protected DashboardService dashboardService; - - @Autowired - protected TimeseriesService tsService; - - @Autowired - protected EventService eventService; - - @Autowired - protected RelationService relationService; - - @Autowired - protected AlarmService alarmService; - @Autowired - protected AlarmCommentService alarmCommentService; - - @Autowired - protected RuleChainService ruleChainService; - - @Autowired - protected EdgeService edgeService; - - @Autowired - protected EdgeEventService edgeEventService; + protected TenantId tenantId; - @Autowired - private ComponentDescriptorService componentDescriptorService; - - @Autowired - protected TenantProfileService tenantProfileService; - - @Autowired - protected DeviceProfileService deviceProfileService; - - @Autowired - protected AssetProfileService assetProfileService; - - @Autowired - protected ResourceService resourceService; - - @Autowired - protected OtaPackageService otaPackageService; - - @Autowired - protected RpcService rpcService; + @Before + public void beforeAbstractService() { + tenantId = createTenant(); + } - @Autowired - protected QueueService queueService; + @After + public void afterAbstractService() { + tenantService.deleteTenants(); + } public class IdComparator implements Comparator { @Override @@ -270,7 +174,7 @@ public abstract class AbstractServiceTest { public TenantId createTenant() { Tenant tenant = new Tenant(); - tenant.setTitle("My tenant " + Uuids.timeBased()); + tenant.setTitle("My tenant " + UUID.randomUUID()); Tenant savedTenant = tenantService.saveTenant(tenant); assertNotNull(savedTenant); return savedTenant.getId(); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java index c839b8ed69..3b8659f93c 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java @@ -20,11 +20,16 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import org.junit.Assert; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.settings.AdminSettingsService; public abstract class BaseAdminSettingsServiceTest extends AbstractServiceTest { + @Autowired + AdminSettingsService adminSettingsService; + @Test public void testFindAdminSettingsByKey() { AdminSettings adminSettings = adminSettingsService.findAdminSettingsByKey(SYSTEM_TENANT_ID, "general"); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmCommentServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmCommentServiceTest.java index 688793d6c6..1144ec6513 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmCommentServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmCommentServiceTest.java @@ -20,21 +20,22 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmComment; import org.thingsboard.server.common.data.alarm.AlarmCommentInfo; import org.thingsboard.server.common.data.alarm.AlarmSeverity; -import org.thingsboard.server.common.data.alarm.AlarmStatus; import org.thingsboard.server.common.data.id.AssetId; -import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.Authority; +import org.thingsboard.server.dao.alarm.AlarmCommentService; +import org.thingsboard.server.dao.alarm.AlarmService; +import org.thingsboard.server.dao.user.UserService; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -43,19 +44,19 @@ import static org.thingsboard.server.common.data.alarm.AlarmCommentType.OTHER; public abstract class BaseAlarmCommentServiceTest extends AbstractServiceTest { + @Autowired + AlarmService alarmService; + @Autowired + AlarmCommentService alarmCommentService; + @Autowired + UserService userService; + public static final String TEST_ALARM = "TEST_ALARM"; - private TenantId tenantId; private Alarm alarm; private User user; @Before public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - alarm = Alarm.builder().tenantId(tenantId).originator(new AssetId(Uuids.timeBased())) .type(TEST_ALARM) .severity(AlarmSeverity.CRITICAL) @@ -74,7 +75,6 @@ public abstract class BaseAlarmCommentServiceTest extends AbstractServiceTest { @After public void after() { alarmService.deleteAlarm(tenantId, alarm.getId()); - tenantService.deleteTenant(tenantId); } diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java index b7f5135533..73a489ab68 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java @@ -16,14 +16,12 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; -import org.junit.After; import org.junit.Assert; -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.Customer; import org.thingsboard.server.common.data.Device; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmCreateOrUpdateActiveRequest; @@ -36,9 +34,7 @@ import org.thingsboard.server.common.data.alarm.AlarmStatus; import org.thingsboard.server.common.data.alarm.AlarmUpdateRequest; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.id.AssetId; -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.page.SortOrder; import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.common.data.query.AlarmData; @@ -52,7 +48,12 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.dao.alarm.AlarmApiCallResult; -import org.thingsboard.server.dao.alarm.AlarmOperationResult; +import org.thingsboard.server.dao.alarm.AlarmService; +import org.thingsboard.server.dao.asset.AssetService; +import org.thingsboard.server.dao.customer.CustomerService; +import org.thingsboard.server.dao.device.DeviceService; +import org.thingsboard.server.dao.relation.RelationService; +import org.thingsboard.server.dao.user.UserService; import java.util.Arrays; import java.util.Collections; @@ -61,29 +62,24 @@ import java.util.concurrent.ExecutionException; public abstract class BaseAlarmServiceTest extends AbstractServiceTest { - public static final String TEST_ALARM = "TEST_ALARM"; + @Autowired + AlarmService alarmService; + @Autowired + AssetService assetService; + @Autowired + CustomerService customerService; + @Autowired + DeviceService deviceService; + @Autowired + RelationService relationService; + @Autowired + UserService userService; + public static final String TEST_ALARM = "TEST_ALARM"; private static final String TEST_TENANT_EMAIL = "testtenant@thingsboard.org"; private static final String TEST_TENANT_FIRST_NAME = "testtenantfirstname"; private static final String TEST_TENANT_LAST_NAME = "testtenantlastname"; - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } - - @After - public void after() { - tenantService.deleteTenant(tenantId); - } - - @Test public void testSaveAndFetchAlarm() throws ExecutionException, InterruptedException { AssetId parentId = new AssetId(Uuids.timeBased()); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseApiUsageStateServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseApiUsageStateServiceTest.java index 2ea7147a65..2ee2f74b3e 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseApiUsageStateServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseApiUsageStateServiceTest.java @@ -15,33 +15,18 @@ */ package org.thingsboard.server.dao.service; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.ApiUsageStateValue; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.ApiUsageState; -import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.dao.usagerecord.ApiUsageStateService; public abstract class BaseApiUsageStateServiceTest extends AbstractServiceTest { - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } - - @After - public void after() { - tenantService.deleteTenant(tenantId); - } + @Autowired + ApiUsageStateService apiUsageStateService; @Test public void testFindApiUsageStateByTenantId() { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAssetProfileServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAssetProfileServiceTest.java index 091b309269..df0cb464fc 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAssetProfileServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAssetProfileServiceTest.java @@ -19,19 +19,18 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.common.util.ThingsBoardThreadFactory; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetProfile; import org.thingsboard.server.common.data.asset.AssetProfileInfo; -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.dao.asset.AssetProfileService; +import org.thingsboard.server.dao.asset.AssetService; import org.thingsboard.server.dao.exception.DataValidationException; import java.util.ArrayList; @@ -46,21 +45,10 @@ public abstract class BaseAssetProfileServiceTest extends AbstractServiceTest { private IdComparator idComparator = new IdComparator<>(); private IdComparator assetProfileInfoIdComparator = new IdComparator<>(); - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } - - @After - public void after() { - tenantService.deleteTenant(tenantId); - } + @Autowired + AssetProfileService assetProfileService; + @Autowired + AssetService assetService; @Test public void testSaveAssetProfile() { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAssetServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAssetServiceTest.java index 108fcb70d9..9f4c8fe363 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAssetServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAssetServiceTest.java @@ -16,11 +16,10 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.StringUtils; @@ -31,6 +30,8 @@ import org.thingsboard.server.common.data.id.CustomerId; 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.dao.asset.AssetService; +import org.thingsboard.server.dao.customer.CustomerService; import org.thingsboard.server.dao.exception.DataValidationException; import java.util.ArrayList; @@ -41,23 +42,12 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; public abstract class BaseAssetServiceTest extends AbstractServiceTest { - private IdComparator idComparator = new IdComparator<>(); - - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } + @Autowired + AssetService assetService; + @Autowired + CustomerService customerService; - @After - public void after() { - tenantService.deleteTenant(tenantId); - } + private IdComparator idComparator = new IdComparator<>(); @Test public void testSaveAsset() { @@ -220,12 +210,6 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { @Test public void testFindAssetsByTenantId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - List assets = new ArrayList<>(); for (int i=0;i<178;i++) { Asset asset = new Asset(); @@ -257,8 +241,6 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { pageData = assetService.findAssetsByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test @@ -419,12 +401,6 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { @Test public void testFindAssetsByTenantIdAndCustomerId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - Customer customer = new Customer(); customer.setTitle("Test customer"); customer.setTenantId(tenantId); @@ -463,8 +439,6 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { pageData = assetService.findAssetInfosByTenantIdAndCustomerId(tenantId, customerId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseCustomerServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseCustomerServiceTest.java index 18bf036495..371d8abb99 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseCustomerServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseCustomerServiceTest.java @@ -25,6 +25,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.common.util.ThingsBoardExecutors; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.StringUtils; @@ -32,6 +33,7 @@ import org.thingsboard.server.common.data.Tenant; 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.dao.customer.CustomerService; import org.thingsboard.server.dao.exception.DataValidationException; import java.util.ArrayList; @@ -41,28 +43,22 @@ import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; public abstract class BaseCustomerServiceTest extends AbstractServiceTest { + + @Autowired + CustomerService customerService; + static final int TIMEOUT = 30; ListeningExecutorService executor; - private TenantId tenantId; - @Before public void before() { executor = MoreExecutors.listeningDecorator(ThingsBoardExecutors.newWorkStealingPool(8, getClass())); - - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } + } @After public void after() { executor.shutdownNow(); - - tenantService.deleteTenant(tenantId); } @Test @@ -152,11 +148,6 @@ public abstract class BaseCustomerServiceTest extends AbstractServiceTest { @Test public void testFindCustomersByTenantId() throws Exception { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); List> futures = new ArrayList<>(135); for (int i = 0; i < 135; i++) { @@ -187,8 +178,6 @@ public abstract class BaseCustomerServiceTest extends AbstractServiceTest { pageData = customerService.findCustomersByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test 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 4dc28a210a..7ccd5e6211 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 @@ -16,11 +16,10 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.DashboardInfo; @@ -33,6 +32,9 @@ 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.page.SortOrder; +import org.thingsboard.server.dao.customer.CustomerService; +import org.thingsboard.server.dao.dashboard.DashboardService; +import org.thingsboard.server.dao.edge.EdgeService; import org.thingsboard.server.dao.exception.DataValidationException; import java.io.IOException; @@ -42,24 +44,15 @@ import java.util.List; import java.util.concurrent.ExecutionException; public abstract class BaseDashboardServiceTest extends AbstractServiceTest { - - private IdComparator idComparator = new IdComparator<>(); - - private TenantId tenantId; - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } + @Autowired + CustomerService customerService; + @Autowired + DashboardService dashboardService; + @Autowired + EdgeService edgeService; - @After - public void after() { - tenantService.deleteTenant(tenantId); - } + private IdComparator idComparator = new IdComparator<>(); @Test public void testSaveDashboard() throws IOException { @@ -176,12 +169,6 @@ public abstract class BaseDashboardServiceTest extends AbstractServiceTest { @Test public void testFindDashboardsByTenantId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - List dashboards = new ArrayList<>(); for (int i=0;i<165;i++) { Dashboard dashboard = new Dashboard(); @@ -212,18 +199,10 @@ public abstract class BaseDashboardServiceTest extends AbstractServiceTest { pageData = dashboardService.findDashboardsByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test public void testFindMobileDashboardsByTenantId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - List mobileDashboards = new ArrayList<>(); for (int i=0;i<165;i++) { Dashboard dashboard = new Dashboard(); @@ -272,8 +251,6 @@ public abstract class BaseDashboardServiceTest extends AbstractServiceTest { pageData = dashboardService.findMobileDashboardsByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test @@ -353,12 +330,6 @@ public abstract class BaseDashboardServiceTest extends AbstractServiceTest { @Test public void testFindDashboardsByTenantIdAndCustomerId() throws ExecutionException, InterruptedException { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - Customer customer = new Customer(); customer.setTitle("Test customer"); customer.setTenantId(tenantId); @@ -396,8 +367,6 @@ public abstract class BaseDashboardServiceTest extends AbstractServiceTest { pageData = dashboardService.findDashboardsByTenantIdAndCustomerId(tenantId, customerId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsServiceTest.java index f3e052b3e9..4512a5fa4f 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsServiceTest.java @@ -16,37 +16,25 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.Device; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.DeviceCredentialsId; import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.common.data.security.DeviceCredentialsType; +import org.thingsboard.server.dao.device.DeviceCredentialsService; +import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.exception.DataValidationException; public abstract class BaseDeviceCredentialsServiceTest extends AbstractServiceTest { - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } - - @After - public void after() { - tenantService.deleteTenant(tenantId); - } + @Autowired + DeviceCredentialsService deviceCredentialsService; + @Autowired + DeviceService deviceService; @Test public void testCreateDeviceCredentials() { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceProfileServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceProfileServiceTest.java index 77a8a479f2..cdfa73fac9 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceProfileServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceProfileServiceTest.java @@ -19,24 +19,24 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.common.util.ThingsBoardThreadFactory; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.DeviceProfileInfo; import org.thingsboard.server.common.data.DeviceTransportType; import org.thingsboard.server.common.data.OtaPackage; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; -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.dao.device.DeviceProfileService; +import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.ota.OtaPackageService; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -44,7 +44,6 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; @@ -52,25 +51,16 @@ import static org.thingsboard.server.common.data.ota.OtaPackageType.FIRMWARE; public abstract class BaseDeviceProfileServiceTest extends AbstractServiceTest { + @Autowired + DeviceProfileService deviceProfileService; + @Autowired + DeviceService deviceService; + @Autowired + OtaPackageService otaPackageService; + private IdComparator idComparator = new IdComparator<>(); private IdComparator deviceProfileInfoIdComparator = new IdComparator<>(); - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } - - @After - public void after() { - tenantService.deleteTenant(tenantId); - } - @Test public void testSaveDeviceProfile() { DeviceProfile deviceProfile = this.createDeviceProfile(tenantId, "Device Profile"); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceServiceTest.java index 010f56235f..73b71ceae3 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceServiceTest.java @@ -19,10 +19,9 @@ import com.datastax.oss.driver.api.core.uuid.Uuids; import org.junit.After; import org.junit.Assert; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.jupiter.api.Assertions; -import org.junit.rules.ExpectedException; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceInfo; @@ -40,26 +39,43 @@ import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.DeviceCredentials; import org.thingsboard.server.common.data.security.DeviceCredentialsType; import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileConfiguration; +import org.thingsboard.server.dao.customer.CustomerService; +import org.thingsboard.server.dao.device.DeviceCredentialsService; +import org.thingsboard.server.dao.device.DeviceProfileService; +import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.ota.OtaPackageService; +import org.thingsboard.server.dao.tenant.TenantProfileService; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.thingsboard.server.common.data.ota.OtaPackageType.FIRMWARE; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; public abstract class BaseDeviceServiceTest extends AbstractServiceTest { - private IdComparator idComparator = new IdComparator<>(); + @Autowired + CustomerService customerService; + @Autowired + DeviceCredentialsService deviceCredentialsService; + @Autowired + DeviceProfileService deviceProfileService; + @Autowired + DeviceService deviceService; + @Autowired + OtaPackageService otaPackageService; + @Autowired + TenantProfileService tenantProfileService; - private TenantId tenantId; + private IdComparator idComparator = new IdComparator<>(); private TenantId anotherTenantId; @Before public void before() { - tenantId = createTenant(); anotherTenantId = createTenant(); } @@ -72,10 +88,6 @@ public abstract class BaseDeviceServiceTest extends AbstractServiceTest { tenantProfileService.deleteTenantProfiles(anotherTenantId); } - @SuppressWarnings("deprecation") - @Rule - public ExpectedException thrown = ExpectedException.none(); - @Test public void testSaveDevicesWithoutMaxDeviceLimit() { Device device = this.saveDevice(tenantId, "My device"); @@ -244,9 +256,9 @@ public abstract class BaseDeviceServiceTest extends AbstractServiceTest { savedDevice.setFirmwareId(savedFirmware.getId()); - thrown.expect(DataValidationException.class); - thrown.expectMessage("Can't assign firmware with different deviceProfile!"); - deviceService.saveDevice(savedDevice); + assertThatThrownBy(() -> deviceService.saveDevice(savedDevice)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("Can't assign firmware with different deviceProfile!"); } @Test @@ -389,12 +401,6 @@ public abstract class BaseDeviceServiceTest extends AbstractServiceTest { @Test public void testFindDevicesByTenantId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - List devices = new ArrayList<>(); for (int i = 0; i < 178; i++) { Device device = new Device(); @@ -426,8 +432,6 @@ public abstract class BaseDeviceServiceTest extends AbstractServiceTest { pageData = deviceService.findDevicesByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test @@ -588,12 +592,6 @@ public abstract class BaseDeviceServiceTest extends AbstractServiceTest { @Test public void testFindDevicesByTenantIdAndCustomerId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - Customer customer = new Customer(); customer.setTitle("Test customer"); customer.setTenantId(tenantId); @@ -632,8 +630,6 @@ public abstract class BaseDeviceServiceTest extends AbstractServiceTest { pageData = deviceService.findDeviceInfosByTenantIdAndCustomerId(tenantId, customerId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java index 3bd47cc991..3b942dab5f 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeEventServiceTest.java @@ -21,6 +21,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.edge.EdgeEvent; import org.thingsboard.server.common.data.edge.EdgeEventActionType; import org.thingsboard.server.common.data.edge.EdgeEventType; @@ -32,20 +33,20 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.SortOrder; import org.thingsboard.server.common.data.page.TimePageLink; +import org.thingsboard.server.dao.edge.EdgeEventService; import java.io.IOException; import java.text.ParseException; -import java.time.LocalDateTime; -import java.time.Month; -import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; import static org.apache.commons.lang3.time.DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT; public abstract class BaseEdgeEventServiceTest extends AbstractServiceTest { + @Autowired + EdgeEventService edgeEventService; + long timeBeforeStartTime; long startTime; long eventTime; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeServiceTest.java index 70d41f4681..9b307b2f8c 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEdgeServiceTest.java @@ -17,11 +17,10 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; import com.fasterxml.jackson.databind.node.ObjectNode; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.EntitySubtype; @@ -36,7 +35,10 @@ 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.customer.CustomerService; +import org.thingsboard.server.dao.edge.EdgeService; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.rule.RuleChainService; import java.util.ArrayList; import java.util.Arrays; @@ -47,23 +49,14 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; public abstract class BaseEdgeServiceTest extends AbstractServiceTest { - private IdComparator idComparator = new IdComparator<>(); - - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } + @Autowired + CustomerService customerService; + @Autowired + EdgeService edgeService; + @Autowired + RuleChainService ruleChainService; - @After - public void after() { - tenantService.deleteTenant(tenantId); - } + private IdComparator idComparator = new IdComparator<>(); @Test public void testSaveEdge() { @@ -204,12 +197,6 @@ public abstract class BaseEdgeServiceTest extends AbstractServiceTest { @Test public void testFindEdgesByTenantId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - List edges = new ArrayList<>(); for (int i = 0; i < 178; i++) { Edge edge = constructEdge(tenantId, "Edge " + i, "default"); @@ -238,8 +225,6 @@ public abstract class BaseEdgeServiceTest extends AbstractServiceTest { pageData = edgeService.findEdgesByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test @@ -388,12 +373,6 @@ public abstract class BaseEdgeServiceTest extends AbstractServiceTest { @Test public void testFindEdgesByTenantIdAndCustomerId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - Customer customer = new Customer(); customer.setTitle("Test customer"); customer.setTenantId(tenantId); @@ -429,8 +408,6 @@ public abstract class BaseEdgeServiceTest extends AbstractServiceTest { pageData = edgeService.findEdgesByTenantIdAndCustomerId(tenantId, customerId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceRegistryTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceRegistryTest.java index 81a512dc95..87b6bbdd80 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceRegistryTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceRegistryTest.java @@ -28,7 +28,7 @@ import org.thingsboard.server.dao.rule.RuleChainService; public abstract class BaseEntityServiceRegistryTest extends AbstractServiceTest { @Autowired - private EntityServiceRegistry entityServiceRegistry; + EntityServiceRegistry entityServiceRegistry; @Test public void givenAllEntityTypes_whenGetServiceByEntityTypeCalled_thenAllBeansExists() { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceTest.java index 7c80bef095..1af63c0ed7 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceTest.java @@ -21,9 +21,7 @@ import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomUtils; import org.hamcrest.Matchers; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.ResultSetExtractor; @@ -31,7 +29,6 @@ import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.StringUtils; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.id.CustomerId; @@ -73,8 +70,13 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.EntitySearchDirection; import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter; import org.thingsboard.server.common.data.relation.RelationTypeGroup; +import org.thingsboard.server.dao.asset.AssetService; import org.thingsboard.server.dao.attributes.AttributesService; +import org.thingsboard.server.dao.device.DeviceService; +import org.thingsboard.server.dao.edge.EdgeService; +import org.thingsboard.server.dao.entity.EntityService; import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity; +import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.dao.sql.relation.RelationRepository; import org.thingsboard.server.dao.timeseries.TimeseriesService; @@ -100,30 +102,21 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest { static final int ENTITY_COUNT = 5; @Autowired - private AttributesService attributesService; - + AssetService assetService; @Autowired - private TimeseriesService timeseriesService; - - private TenantId tenantId; - + AttributesService attributesService; @Autowired - private RelationRepository relationRepository; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } - - @After - public void after() { - tenantService.deleteTenant(tenantId); - } - + DeviceService deviceService; + @Autowired + EdgeService edgeService; + @Autowired + EntityService entityService; + @Autowired + RelationRepository relationRepository; + @Autowired + RelationService relationService; + @Autowired + TimeseriesService timeseriesService; @Test public void testCountEntitiesByQuery() throws InterruptedException { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseOtaPackageServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseOtaPackageServiceTest.java index c89e7c4b69..d430e1945a 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseOtaPackageServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseOtaPackageServiceTest.java @@ -19,16 +19,14 @@ import com.datastax.oss.driver.api.core.uuid.Uuids; import org.junit.After; import org.junit.Assert; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.OtaPackage; import org.thingsboard.server.common.data.OtaPackageInfo; import org.thingsboard.server.common.data.StringUtils; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.TenantId; @@ -36,7 +34,11 @@ import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileConfiguration; +import org.thingsboard.server.dao.device.DeviceProfileService; +import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.ota.OtaPackageService; +import org.thingsboard.server.dao.tenant.TenantProfileService; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -44,6 +46,7 @@ import java.util.Collections; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.thingsboard.server.common.data.ota.OtaPackageType.FIRMWARE; public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { @@ -60,28 +63,25 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { private final IdComparator idComparator = new IdComparator<>(); - private TenantId tenantId; - private DeviceProfileId deviceProfileId; + @Autowired + DeviceProfileService deviceProfileService; + @Autowired + DeviceService deviceService; + @Autowired + OtaPackageService otaPackageService; + @Autowired + TenantProfileService tenantProfileService; + @Before public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - DeviceProfile deviceProfile = this.createDeviceProfile(tenantId, "Device Profile"); DeviceProfile savedDeviceProfile = deviceProfileService.saveDeviceProfile(deviceProfile); Assert.assertNotNull(savedDeviceProfile); deviceProfileId = savedDeviceProfile.getId(); } - @SuppressWarnings("deprecation") - @Rule - public ExpectedException thrown = ExpectedException.none(); - @After public void after() { tenantService.deleteTenant(tenantId); @@ -99,9 +99,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { createAndSaveFirmware(tenantId, "1"); Assert.assertEquals(1, otaPackageService.sumDataSizeByTenantId(tenantId)); - thrown.expect(DataValidationException.class); - thrown.expectMessage(String.format("Failed to create the ota package, files size limit is exhausted %d bytes!", DATA_SIZE)); - createAndSaveFirmware(tenantId, "2"); + assertThatThrownBy(() -> createAndSaveFirmware(tenantId, "2")) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("Failed to create the ota package, files size limit is exhausted %d bytes!", DATA_SIZE); } @Test @@ -243,9 +243,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksum(CHECKSUM); firmware.setData(DATA); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage should be assigned to tenant!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage should be assigned to tenant!"); } @Test @@ -261,9 +261,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksum(CHECKSUM); firmware.setData(DATA); - thrown.expect(DataValidationException.class); - thrown.expectMessage("Type should be specified!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("Type should be specified!"); } @Test @@ -279,9 +279,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksum(CHECKSUM); firmware.setData(DATA); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage title should be specified!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage title should be specified!"); } @Test @@ -297,9 +297,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksum(CHECKSUM); firmware.setData(DATA); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage file name should be specified!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage file name should be specified!"); } @Test @@ -315,9 +315,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksum(CHECKSUM); firmware.setData(DATA); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage content type should be specified!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage content type should be specified!"); } @Test @@ -333,9 +333,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksumAlgorithm(CHECKSUM_ALGORITHM); firmware.setChecksum(CHECKSUM); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage data should be specified!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage data should be specified!"); } @Test @@ -352,9 +352,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksum(CHECKSUM); firmware.setData(DATA); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage is referencing to non-existent tenant!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage is referencing to non-existent tenant!"); } @Test @@ -371,9 +371,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksum(CHECKSUM); firmware.setData(DATA); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage is referencing to non-existent device profile!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage is referencing to non-existent device profile!"); } @Test @@ -389,9 +389,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmware.setChecksumAlgorithm(CHECKSUM_ALGORITHM); firmware.setData(DATA); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage checksum should be specified!"); - otaPackageService.saveOtaPackage(firmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(firmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage checksum should be specified!"); } @Test @@ -411,17 +411,17 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { newFirmwareInfo.setTitle(TITLE); newFirmwareInfo.setVersion(VERSION); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage with such title and version already exists!"); - otaPackageService.saveOtaPackageInfo(newFirmwareInfo, false); + assertThatThrownBy(() -> otaPackageService.saveOtaPackageInfo(newFirmwareInfo, false)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage with such title and version already exists!"); } @Test public void testSaveFirmwareWithExistingTitleAndVersion() { createAndSaveFirmware(tenantId, VERSION); - thrown.expect(DataValidationException.class); - thrown.expectMessage("OtaPackage with such title and version already exists!"); - createAndSaveFirmware(tenantId, VERSION); + assertThatThrownBy(() -> createAndSaveFirmware(tenantId, VERSION)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("OtaPackage with such title and version already exists!"); } @Test @@ -436,9 +436,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { Device savedDevice = deviceService.saveDevice(device); try { - thrown.expect(DataValidationException.class); - thrown.expectMessage("The otaPackage referenced by the devices cannot be deleted!"); - otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId()); + assertThatThrownBy(() -> otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId())) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("The otaPackage referenced by the devices cannot be deleted!"); } finally { deviceService.deleteDevice(tenantId, savedDevice.getId()); otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId()); @@ -448,12 +448,12 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { @Test public void testUpdateDeviceProfileId() { OtaPackage savedFirmware = createAndSaveFirmware(tenantId, VERSION); + savedFirmware.setDeviceProfileId(null); try { - thrown.expect(DataValidationException.class); - thrown.expectMessage("Updating otaPackage deviceProfile is prohibited!"); - savedFirmware.setDeviceProfileId(null); - otaPackageService.saveOtaPackage(savedFirmware); + assertThatThrownBy(() -> otaPackageService.saveOtaPackage(savedFirmware)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("Updating otaPackage deviceProfile is prohibited!"); } finally { otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId()); } @@ -482,9 +482,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { deviceProfileService.saveDeviceProfile(savedDeviceProfile); try { - thrown.expect(DataValidationException.class); - thrown.expectMessage("The otaPackage referenced by the device profile cannot be deleted!"); - otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId()); + assertThatThrownBy(() -> otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId())) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("The otaPackage referenced by the device profile cannot be deleted!"); } finally { deviceProfileService.deleteDeviceProfile(tenantId, savedDeviceProfile.getId()); } @@ -636,12 +636,18 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmwareInfo.setType(FIRMWARE); firmwareInfo.setTitle(TITLE); firmwareInfo.setVersion(VERSION); + firmwareInfo.setUrl(" "); - thrown.expect(DataValidationException.class); - thrown.expectMessage("Ota package URL should be specified!"); - otaPackageService.saveOtaPackageInfo(firmwareInfo, true); + assertThatThrownBy(() -> otaPackageService.saveOtaPackageInfo(firmwareInfo, true)) + .as("firmwareInfo url set whitespaces") + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("Ota package URL should be specified!"); + firmwareInfo.setUrl(""); - otaPackageService.saveOtaPackageInfo(firmwareInfo, true); + assertThatThrownBy(() -> otaPackageService.saveOtaPackageInfo(firmwareInfo, true)) + .as("firmwareInfo url is empty") + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("Ota package URL should be specified!"); } @Test @@ -655,12 +661,10 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmwareInfo.setTenantId(tenantId); OtaPackageInfo savedFirmwareInfo = otaPackageService.saveOtaPackageInfo(firmwareInfo, true); - - thrown.expect(DataValidationException.class); - thrown.expectMessage("Updating otaPackage URL is prohibited!"); - savedFirmwareInfo.setUrl("https://newurl.com"); - otaPackageService.saveOtaPackageInfo(savedFirmwareInfo, true); + assertThatThrownBy(() -> otaPackageService.saveOtaPackageInfo(savedFirmwareInfo, true)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("Updating otaPackage URL is prohibited!"); } @Test @@ -673,10 +677,9 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmwareInfo.setUrl(URL); firmwareInfo.setTenantId(tenantId); - thrown.expect(DataValidationException.class); - thrown.expectMessage("title length must be equal or less than 255"); - - otaPackageService.saveOtaPackageInfo(firmwareInfo, true); + assertThatThrownBy(() -> otaPackageService.saveOtaPackageInfo(firmwareInfo, true)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("title length must be equal or less than 255"); } @Test @@ -687,11 +690,11 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { firmwareInfo.setUrl(URL); firmwareInfo.setTenantId(tenantId); firmwareInfo.setTitle(TITLE); - firmwareInfo.setVersion(StringUtils.random(257)); - thrown.expectMessage("version length must be equal or less than 255"); - otaPackageService.saveOtaPackageInfo(firmwareInfo, true); + assertThatThrownBy(() -> otaPackageService.saveOtaPackageInfo(firmwareInfo, true)) + .isInstanceOf(DataValidationException.class) + .hasMessageContaining("version length must be equal or less than 255"); } private OtaPackage createAndSaveFirmware(TenantId tenantId, String version) { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseQueueServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseQueueServiceTest.java index af2f067c2e..9d2c2bac5a 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseQueueServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseQueueServiceTest.java @@ -20,6 +20,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.TenantProfile; @@ -35,6 +36,8 @@ import org.thingsboard.server.common.data.queue.SubmitStrategyType; import org.thingsboard.server.common.data.tenant.profile.TenantProfileData; import org.thingsboard.server.common.data.tenant.profile.TenantProfileQueueConfiguration; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.queue.QueueService; +import org.thingsboard.server.dao.tenant.TenantProfileService; import java.util.ArrayList; import java.util.Collections; @@ -42,6 +45,11 @@ import java.util.List; public abstract class BaseQueueServiceTest extends AbstractServiceTest { + @Autowired + TenantProfileService tenantProfileService; + @Autowired + QueueService queueService; + private IdComparator idComparator = new IdComparator<>(); private TenantId tenantId; @@ -83,7 +91,7 @@ public abstract class BaseQueueServiceTest extends AbstractServiceTest { Tenant tenant = new Tenant(); tenant.setTitle("My tenant"); - tenant.setTenantProfileId(tenantProfileId); + tenant.setTenantProfileId(tenantProfileId); //custom profile Tenant savedTenant = tenantService.saveTenant(tenant); Assert.assertNotNull(savedTenant); tenantId = savedTenant.getId(); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationServiceTest.java index c920b86bd5..d60a896aec 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationServiceTest.java @@ -23,6 +23,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.id.AssetId; import org.thingsboard.server.common.data.id.DeviceId; @@ -33,6 +34,7 @@ import org.thingsboard.server.common.data.relation.RelationEntityTypeFilter; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.common.data.relation.RelationsSearchParameters; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.relation.RelationService; import java.util.ArrayList; import java.util.Collections; @@ -42,6 +44,9 @@ import java.util.concurrent.ExecutionException; public abstract class BaseRelationServiceTest extends AbstractServiceTest { + @Autowired + RelationService relationService; + @Before public void before() { } diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRuleChainServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRuleChainServiceTest.java index 16901119a6..e3c5234942 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRuleChainServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRuleChainServiceTest.java @@ -17,11 +17,10 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.edge.Edge; @@ -34,7 +33,9 @@ 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.rule.RuleChainService; import java.io.IOException; import java.util.ArrayList; @@ -46,25 +47,14 @@ import java.util.List; */ public abstract class BaseRuleChainServiceTest extends AbstractServiceTest { + @Autowired + EdgeService edgeService; + @Autowired + RuleChainService ruleChainService; + private IdComparator idComparator = new IdComparator<>(); private IdComparator ruleNodeIdComparator = new IdComparator<>(); - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } - - @After - public void after() { - tenantService.deleteTenant(tenantId); - } - @Test public void testSaveRuleChain() throws IOException { RuleChain ruleChain = new RuleChain(); @@ -133,12 +123,6 @@ public abstract class BaseRuleChainServiceTest extends AbstractServiceTest { @Test public void testFindRuleChainsByTenantId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - List ruleChains = new ArrayList<>(); for (int i = 0; i < 165; i++) { RuleChain ruleChain = new RuleChain(); @@ -169,8 +153,6 @@ public abstract class BaseRuleChainServiceTest extends AbstractServiceTest { pageData = ruleChainService.findTenantRuleChainsByType(tenantId, RuleChainType.CORE, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - - tenantService.deleteTenant(tenantId); } @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantProfileServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantProfileServiceTest.java index 926f680e40..6d41da2965 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantProfileServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantProfileServiceTest.java @@ -18,8 +18,10 @@ package org.thingsboard.server.dao.service; import com.fasterxml.jackson.databind.node.NullNode; import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.EntityInfo; import org.thingsboard.server.common.data.Tenant; @@ -36,6 +38,7 @@ import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileCon import org.thingsboard.server.common.data.tenant.profile.TenantProfileData; import org.thingsboard.server.common.data.tenant.profile.TenantProfileQueueConfiguration; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.tenant.TenantProfileService; import java.util.ArrayList; import java.util.Collections; @@ -44,9 +47,20 @@ import java.util.stream.Collectors; public abstract class BaseTenantProfileServiceTest extends AbstractServiceTest { + @Autowired + TenantProfileService tenantProfileService; + private IdComparator idComparator = new IdComparator<>(); private IdComparator tenantProfileInfoIdComparator = new IdComparator<>(); + @Before + public void before() { + //this test requires no Tenants in the database + tenantId = null; + tenantService.deleteTenants(); + tenantProfileService.deleteTenantProfiles(TenantId.SYS_TENANT_ID); + } + @After public void after() { tenantProfileService.deleteTenantProfiles(TenantId.SYS_TENANT_ID); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantServiceTest.java index 3f8c33c5e7..938272c0a8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantServiceTest.java @@ -23,24 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.mock.mockito.SpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.cache.TbTransactionalCache; -import org.thingsboard.server.common.data.Customer; -import org.thingsboard.server.common.data.Dashboard; -import org.thingsboard.server.common.data.DashboardInfo; -import org.thingsboard.server.common.data.Device; -import org.thingsboard.server.common.data.DeviceProfile; -import org.thingsboard.server.common.data.DeviceProfileType; -import org.thingsboard.server.common.data.DeviceTransportType; -import org.thingsboard.server.common.data.EntityView; -import org.thingsboard.server.common.data.OtaPackage; -import org.thingsboard.server.common.data.OtaPackageInfo; -import org.thingsboard.server.common.data.ResourceType; -import org.thingsboard.server.common.data.StringUtils; -import org.thingsboard.server.common.data.TbResource; -import org.thingsboard.server.common.data.TbResourceInfo; -import org.thingsboard.server.common.data.Tenant; -import org.thingsboard.server.common.data.TenantInfo; -import org.thingsboard.server.common.data.TenantProfile; -import org.thingsboard.server.common.data.User; +import org.thingsboard.server.common.data.*; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.device.profile.DeviceProfileData; import org.thingsboard.server.common.data.device.profile.MqttDeviceProfileTransportConfiguration; @@ -54,8 +37,23 @@ import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleChainType; import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.common.data.widget.WidgetsBundle; +import org.thingsboard.server.dao.asset.AssetService; +import org.thingsboard.server.dao.customer.CustomerService; +import org.thingsboard.server.dao.dashboard.DashboardService; +import org.thingsboard.server.dao.device.DeviceProfileService; +import org.thingsboard.server.dao.device.DeviceService; +import org.thingsboard.server.dao.edge.EdgeService; +import org.thingsboard.server.dao.entityview.EntityViewService; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.ota.OtaPackageService; +import org.thingsboard.server.dao.resource.ResourceService; +import org.thingsboard.server.dao.rpc.RpcService; +import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.tenant.TenantDao; +import org.thingsboard.server.dao.tenant.TenantProfileService; +import org.thingsboard.server.dao.usagerecord.ApiUsageStateService; +import org.thingsboard.server.dao.user.UserService; +import org.thingsboard.server.dao.widget.WidgetsBundleService; import java.util.ArrayList; import java.util.Collections; @@ -69,16 +67,45 @@ import static org.mockito.Mockito.verify; public abstract class BaseTenantServiceTest extends AbstractServiceTest { - private IdComparator idComparator = new IdComparator<>(); - @SpyBean - protected TenantDao tenantDao; + TenantDao tenantDao; @Autowired - protected TbTransactionalCache cache; - + ApiUsageStateService apiUsageStateService; + @Autowired + AssetService assetService; + @Autowired + CustomerService customerService; + @Autowired + DashboardService dashboardService; + @Autowired + DeviceProfileService deviceProfileService; + @Autowired + DeviceService deviceService; + @Autowired + EdgeService edgeService; + @Autowired + EntityViewService entityViewService; + @Autowired + OtaPackageService otaPackageService; @Autowired - protected TbTransactionalCache existsTenantCache; + ResourceService resourceService; + @Autowired + RpcService rpcService; + @Autowired + RuleChainService ruleChainService; + @Autowired + TbTransactionalCache existsTenantCache; + @Autowired + TbTransactionalCache cache; + @Autowired + TenantProfileService tenantProfileService; + @Autowired + UserService userService; + @Autowired + WidgetsBundleService widgetsBundleService; + + private final IdComparator idComparator = new IdComparator<>(); @Test public void testSaveTenant() { @@ -150,6 +177,7 @@ public abstract class BaseTenantServiceTest extends AbstractServiceTest { @Test public void testFindTenants() { + tenantService.deleteTenants(); List tenants = new ArrayList<>(); PageLink pageLink = new PageLink(17); PageData pageData = tenantService.findTenants(pageLink); @@ -264,7 +292,7 @@ public abstract class BaseTenantServiceTest extends AbstractServiceTest { @Test public void testFindTenantInfos() { - + tenantService.deleteTenants(); List tenants = new ArrayList<>(); PageLink pageLink = new PageLink(17); PageData pageData = tenantService.findTenantInfos(pageLink); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseUserServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseUserServiceTest.java index 49ececc8e4..14917f6807 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseUserServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseUserServiceTest.java @@ -15,11 +15,11 @@ */ package org.thingsboard.server.dao.service; -import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.StringUtils; @@ -33,7 +33,9 @@ import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.common.data.security.UserSettings; +import org.thingsboard.server.dao.customer.CustomerService; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.user.UserService; import java.util.ArrayList; import java.util.Collections; @@ -41,19 +43,17 @@ import java.util.List; public abstract class BaseUserServiceTest extends AbstractServiceTest { + @Autowired + CustomerService customerService; + @Autowired + UserService userService; + private IdComparator idComparator = new IdComparator<>(); - private TenantId tenantId; private UserSettings userSettings; @Before public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - User tenantAdmin = new User(); tenantAdmin.setAuthority(Authority.TENANT_ADMIN); tenantAdmin.setTenantId(tenantId); @@ -75,11 +75,6 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { userSettings = createUserSettings(customerUser.getId()); } - @After - public void after() { - tenantService.deleteTenant(tenantId); - } - @Test public void testFindUserByEmail() { User user = userService.findUserByEmail(SYSTEM_TENANT_ID, "sysadmin@thingsboard.org"); @@ -209,17 +204,13 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { Assert.assertEquals(1, users.size()); Assert.assertEquals(tenantAdminUser, users.get(0)); - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); + TenantId secondTenantId = createTenant(); List tenantAdmins = new ArrayList<>(); for (int i = 0; i < 124; i++) { User user = new User(); user.setAuthority(Authority.TENANT_ADMIN); - user.setTenantId(tenantId); + user.setTenantId(secondTenantId); user.setEmail("testTenant" + i + "@thingsboard.org"); tenantAdmins.add(userService.saveUser(user)); } @@ -227,7 +218,7 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { List loadedTenantAdmins = new ArrayList<>(); PageLink pageLink = new PageLink(33); do { - pageData = userService.findTenantAdmins(tenantId, pageLink); + pageData = userService.findTenantAdmins(secondTenantId, pageLink); loadedTenantAdmins.addAll(pageData.getData()); if (pageData.hasNext()) { pageLink = pageLink.nextPageLink(); @@ -239,10 +230,10 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { Assert.assertEquals(tenantAdmins, loadedTenantAdmins); - tenantService.deleteTenant(tenantId); + tenantService.deleteTenant(secondTenantId); pageLink = new PageLink(33); - pageData = userService.findTenantAdmins(tenantId, pageLink); + pageData = userService.findTenantAdmins(secondTenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); @@ -250,12 +241,6 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { @Test public void testFindTenantAdminsByEmail() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - String email1 = "testEmail1"; List tenantAdminsEmail1 = new ArrayList<>(); @@ -332,8 +317,6 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { pageData = userService.findTenantAdmins(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertEquals(0, pageData.getData().size()); - - tenantService.deleteTenant(tenantId); } @Test @@ -346,12 +329,6 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { Assert.assertEquals(1, users.size()); Assert.assertEquals(customerUser, users.get(0)); - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - Customer customer = new Customer(); customer.setTitle("Test customer"); customer.setTenantId(tenantId); @@ -394,12 +371,6 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { @Test public void testFindCustomerUsersByEmail() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); - Customer customer = new Customer(); customer.setTitle("Test customer"); customer.setTenantId(tenantId); @@ -485,8 +456,6 @@ public abstract class BaseUserServiceTest extends AbstractServiceTest { pageData = userService.findCustomerUsers(tenantId, customerId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertEquals(0, pageData.getData().size()); - - tenantService.deleteTenant(tenantId); } private UserSettings createUserSettings(UserId userId) { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseWidgetTypeServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseWidgetTypeServiceTest.java index 04cc1d8412..b04053f6d9 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseWidgetTypeServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseWidgetTypeServiceTest.java @@ -18,18 +18,18 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; -import org.thingsboard.server.common.data.Tenant; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.widget.WidgetType; import org.thingsboard.server.common.data.widget.WidgetTypeDetails; import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.widget.WidgetTypeService; +import org.thingsboard.server.dao.widget.WidgetsBundleService; import java.io.IOException; import java.util.ArrayList; @@ -38,23 +38,12 @@ import java.util.List; public abstract class BaseWidgetTypeServiceTest extends AbstractServiceTest { - private IdComparator idComparator = new IdComparator<>(); - - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } + @Autowired + WidgetsBundleService widgetsBundleService; + @Autowired + WidgetTypeService widgetTypeService; - @After - public void after() { - tenantService.deleteTenant(tenantId); - } + private IdComparator idComparator = new IdComparator<>(); @Test public void testSaveWidgetType() throws IOException { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseWidgetsBundleServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseWidgetsBundleServiceTest.java index c28f5face7..8f04eaec62 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseWidgetsBundleServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseWidgetsBundleServiceTest.java @@ -16,18 +16,17 @@ package org.thingsboard.server.dao.service; import com.datastax.oss.driver.api.core.uuid.Uuids; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; -import org.thingsboard.server.common.data.Tenant; +import org.springframework.beans.factory.annotation.Autowired; 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.widget.WidgetsBundle; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.model.ModelConstants; +import org.thingsboard.server.dao.widget.WidgetsBundleService; import java.io.IOException; import java.util.ArrayList; @@ -36,23 +35,10 @@ import java.util.List; public abstract class BaseWidgetsBundleServiceTest extends AbstractServiceTest { - private IdComparator idComparator = new IdComparator<>(); - - private TenantId tenantId; - - @Before - public void before() { - Tenant tenant = new Tenant(); - tenant.setTitle("My tenant"); - Tenant savedTenant = tenantService.saveTenant(tenant); - Assert.assertNotNull(savedTenant); - tenantId = savedTenant.getId(); - } + @Autowired + WidgetsBundleService widgetsBundleService; - @After - public void after() { - tenantService.deleteTenant(tenantId); - } + private IdComparator idComparator = new IdComparator<>(); @Test public void testSaveWidgetsBundle() throws IOException { @@ -249,11 +235,6 @@ public abstract class BaseWidgetsBundleServiceTest extends AbstractServiceTest { @Test public void testFindTenantWidgetsBundlesByTenantId() { - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); List widgetsBundles = new ArrayList<>(); for (int i=0;i<127;i++) { @@ -286,7 +267,6 @@ public abstract class BaseWidgetsBundleServiceTest extends AbstractServiceTest { Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); - tenantService.deleteTenant(tenantId); } @Test @@ -294,11 +274,6 @@ public abstract class BaseWidgetsBundleServiceTest extends AbstractServiceTest { List systemWidgetsBundles = widgetsBundleService.findSystemWidgetsBundles(tenantId); - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); TenantId systemTenantId = TenantId.fromUUID(ModelConstants.NULL_UUID); List createdWidgetsBundles = new ArrayList<>(); @@ -371,8 +346,6 @@ public abstract class BaseWidgetsBundleServiceTest extends AbstractServiceTest { Collections.sort(loadedWidgetsBundles, idComparator); Assert.assertEquals(systemWidgetsBundles, loadedWidgetsBundles); - - tenantService.deleteTenant(tenantId); } @Test @@ -380,11 +353,6 @@ public abstract class BaseWidgetsBundleServiceTest extends AbstractServiceTest { List systemWidgetsBundles = widgetsBundleService.findSystemWidgetsBundles(tenantId); - Tenant tenant = new Tenant(); - tenant.setTitle("Test tenant"); - tenant = tenantService.saveTenant(tenant); - - TenantId tenantId = tenant.getId(); TenantId systemTenantId = TenantId.fromUUID(ModelConstants.NULL_UUID); List createdWidgetsBundles = new ArrayList<>(); @@ -432,8 +400,6 @@ public abstract class BaseWidgetsBundleServiceTest extends AbstractServiceTest { Collections.sort(loadedWidgetsBundles, idComparator); Assert.assertEquals(systemWidgetsBundles, loadedWidgetsBundles); - - tenantService.deleteTenant(tenantId); } } diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java index 4b0cf9a1b1..1b0825aff3 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java @@ -19,6 +19,7 @@ import com.datastax.oss.driver.api.core.uuid.Uuids; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.EventInfo; import org.thingsboard.server.common.data.event.Event; import org.thingsboard.server.common.data.event.EventType; @@ -31,6 +32,7 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.SortOrder; import org.thingsboard.server.common.data.page.TimePageLink; +import org.thingsboard.server.dao.event.EventService; import org.thingsboard.server.dao.service.AbstractServiceTest; import java.text.ParseException; @@ -39,6 +41,10 @@ import java.util.List; import static org.apache.commons.lang3.time.DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT; public abstract class BaseEventServiceTest extends AbstractServiceTest { + + @Autowired + EventService eventService; + long timeBeforeStartTime; long startTime; long eventTime; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java index 924f515143..962dc7e246 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java @@ -21,6 +21,7 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.EntityView; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.DeviceId; @@ -39,7 +40,9 @@ import org.thingsboard.server.common.data.kv.ReadTsKvQueryResult; import org.thingsboard.server.common.data.kv.StringDataEntry; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.objects.TelemetryEntityView; +import org.thingsboard.server.dao.entityview.EntityViewService; import org.thingsboard.server.dao.service.AbstractServiceTest; +import org.thingsboard.server.dao.timeseries.TimeseriesService; import java.util.ArrayList; import java.util.Arrays; @@ -59,6 +62,13 @@ import static org.junit.Assert.assertNotNull; @Slf4j public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { + + @Autowired + TimeseriesService tsService; + + @Autowired + EntityViewService entityViewService; + static final int MAX_TIMEOUT = 30; private static final String STRING_KEY = "stringKey"; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java index cd4ca51698..6384e17426 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java @@ -16,7 +16,6 @@ package org.thingsboard.server.msa.ui.base; import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; @@ -34,7 +33,8 @@ import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; -@Slf4j +import static org.assertj.core.api.Assertions.fail; + abstract public class AbstractBasePage { public static final long WAIT_TIMEOUT = TimeUnit.SECONDS.toMillis(30); protected WebDriver driver; @@ -59,8 +59,7 @@ abstract public class AbstractBasePage { try { return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(locator))); } catch (WebDriverException e) { - log.error("No visibility element: " + locator); - return null; + return fail("No visibility element: " + locator); } } @@ -68,8 +67,7 @@ abstract public class AbstractBasePage { try { return wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(locator))); } catch (WebDriverException e) { - log.error("No presence element: " + locator); - return null; + return fail("No presence element: " + locator); } } @@ -77,8 +75,7 @@ abstract public class AbstractBasePage { try { return wait.until(ExpectedConditions.elementToBeClickable(By.xpath(locator))); } catch (WebDriverException e) { - log.error("No clickable element: " + locator); - return null; + return fail("No clickable element: " + locator); } } @@ -87,8 +84,7 @@ abstract public class AbstractBasePage { wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(locator))); return driver.findElements(By.xpath(locator)); } catch (WebDriverException e) { - log.error("No visibility elements: " + locator); - return null; + return fail("No visibility elements: " + locator); } } @@ -97,8 +93,7 @@ abstract public class AbstractBasePage { wait.until(ExpectedConditions.elementToBeClickable(By.xpath(locator))); return driver.findElements(By.xpath(locator)); } catch (WebDriverException e) { - log.error("No clickable elements: " + locator); - return null; + return fail("No clickable elements: " + locator); } } @@ -106,7 +101,7 @@ abstract public class AbstractBasePage { try { wait.until(ExpectedConditions.urlContains(urlPath)); } catch (WebDriverException e) { - log.error("This URL path is missing"); + fail("This URL path is missing"); } } @@ -122,7 +117,7 @@ abstract public class AbstractBasePage { try { return wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOfElementLocated(By.xpath(locator)))); } catch (WebDriverException e) { - throw new AssertionError("Element is present"); + return fail("Element is present"); } } @@ -130,7 +125,7 @@ abstract public class AbstractBasePage { try { return wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath(locator)))); } catch (WebDriverException e) { - throw new AssertionError("Elements is present"); + return fail("Elements is present"); } } @@ -138,7 +133,7 @@ abstract public class AbstractBasePage { try { wait.until(ExpectedConditions.numberOfWindowsToBe(tabNumber)); } catch (WebDriverException e) { - log.error("No tabs with this number"); + fail("No tabs with this number: " + tabNumber); } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java index 29574a1942..3820563a8a 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java @@ -18,7 +18,6 @@ package org.thingsboard.server.msa.ui.base; import io.github.bonigarcia.wdm.WebDriverManager; import io.qameta.allure.Allure; import lombok.extern.slf4j.Slf4j; -import org.openqa.selenium.By; import org.openqa.selenium.Dimension; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.OutputType; @@ -48,7 +47,6 @@ import java.io.ByteArrayInputStream; import java.net.MalformedURLException; import java.net.URL; import java.time.Duration; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static org.thingsboard.server.msa.TestProperties.getBaseUiUrl; @@ -73,6 +71,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { testRestClient.login(TENANT_EMAIL, TENANT_PASSWORD); ChromeOptions options = new ChromeOptions(); options.setAcceptInsecureCerts(true); + options.addArguments("-remote-allow-origins=*"); //temporary fix after updating google chrome if (instance.isActive()) { RemoteWebDriver remoteWebDriver = new RemoteWebDriver(new URL(REMOTE_WEBDRIVER_HOST), options); remoteWebDriver.setFileDetector(new LocalFileDetector()); @@ -82,12 +81,12 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { driver = new ChromeDriver(options); } driver.manage().window().setSize(dimension); - openLocalhost(); + openBaseUiUrl(); } @BeforeMethod public void open() { - openHomePage(); + openBaseUiUrl(); } @AfterMethod @@ -101,12 +100,13 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { driver.quit(); } - public void openLocalhost() { - driver.get(getBaseUiUrl()); + public String getJwtTokenFromLocalStorage() { + js = (JavascriptExecutor) driver; + return (String) js.executeScript("return window.localStorage.getItem('jwt_token');"); } - public void openHomePage() { - driver.get(getBaseUiUrl() + "/home"); + public void openBaseUiUrl() { + driver.get(getBaseUiUrl()); } public String getUrl() { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java index de9e9d5bac..1d69ddd5fc 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java @@ -31,18 +31,18 @@ public class CustomerPageElements extends OtherPageElementsHelper { private static final String CITY = ENTITY + "/../..//mat-cell[contains(@class,'city')]/span"; private static final String TITLES = "//mat-cell[contains(@class,'cdk-column-title')]/span"; protected static final String EDIT_MENU_DASHBOARD_FIELD = "//input[@formcontrolname='dashboard']"; - private static final String EDIT_MENU_DASHBOARD = "//div[@class='cdk-overlay-pane']//span/span"; - private static final String MANAGE_CUSTOMERS_USERS_BTN = ENTITY + "/../..//mat-icon[contains(text(),' account_circle')]/../.."; - private static final String MANAGE_CUSTOMERS_ASSETS_BTN = ENTITY + "/../..//mat-icon[contains(text(),' domain')]/../.."; - private static final String MANAGE_CUSTOMERS_DEVICES_BTN = ENTITY + "/../..//mat-icon[contains(text(),' devices_other')]/../.."; - private static final String MANAGE_CUSTOMERS_DASHBOARDS_BTN = ENTITY + "/../..//mat-icon[contains(text(),' dashboard')]/../.."; - private static final String MANAGE_CUSTOMERS_EDGE_BTN = ENTITY + "/../..//mat-icon[contains(text(),' router')]/../.."; + private static final String EDIT_MENU_DASHBOARD = "//div[@class='cdk-overlay-pane']//span/span[contains(text(),'%s')]"; + private static final String MANAGE_CUSTOMERS_USERS_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),' account_circle')]"; + private static final String MANAGE_CUSTOMERS_ASSETS_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),' domain')]/parent::button"; + private static final String MANAGE_CUSTOMERS_DEVICES_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),'devices_other')]/parent::button"; + private static final String MANAGE_CUSTOMERS_DASHBOARDS_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),'dashboard')]/parent::button"; + private static final String MANAGE_CUSTOMERS_EDGE_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),'router')]/parent::button"; private static final String ADD_USER_EMAIL = "//tb-add-user-dialog//input[@formcontrolname='email']"; private static final String ACTIVATE_WINDOW_OK_BTN = "//span[contains(text(),'OK')]"; private static final String USER_LOGIN_BTN = "//mat-icon[@data-mat-icon-name='login']"; private static final String USERS_WIDGET = "//tb-widget"; private static final String SELECT_COUNTRY_MENU = "//mat-form-field//mat-select[@formcontrolname='country']"; - private static final String COUNTRIES = "//span[@class='mat-option-text']"; + private static final String COUNTRIES = "//span[@class='mdc-list-item__primary-text']"; protected static final String INPUT_FIELD = "//input[@formcontrolname='%s']"; protected static final String INPUT_FIELD_NAME_TITLE = "title"; private static final String INPUT_FIELD_NAME_CITY = "city"; @@ -54,7 +54,7 @@ public class CustomerPageElements extends OtherPageElementsHelper { private static final String INPUT_FIELD_NAME_NUMBER = "phoneNumber"; private static final String INPUT_FIELD_NAME_ASSIGNED_LIST = "entity"; private static final String ASSIGNED_BTN = "//button[@type='submit']"; - private static final String HIDE_HOME_DASHBOARD_TOOLBAR = "//mat-checkbox[@formcontrolname='homeDashboardHideToolbar']/label"; + private static final String HIDE_HOME_DASHBOARD_TOOLBAR = "//mat-checkbox[@formcontrolname='homeDashboardHideToolbar']//label"; private static final String FILTER_BTN = "//tb-filters-edit"; private static final String TIME_BTN = "//tb-timewindow"; private static final String CUSTOMER_ICON_HEADER = "//tb-breadcrumb//span[contains(text(),'Customer %s')]"; @@ -104,8 +104,8 @@ public class CustomerPageElements extends OtherPageElementsHelper { return waitUntilVisibilityOfElementLocated(EDIT_MENU_DASHBOARD_FIELD); } - public WebElement editMenuDashboard() { - return waitUntilElementToBeClickable(EDIT_MENU_DASHBOARD); + public WebElement editMenuDashboard(String dashboardName) { + return waitUntilElementToBeClickable(String.format(EDIT_MENU_DASHBOARD, dashboardName)); } public WebElement phoneNumberEntityView() { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageHelper.java index d657388354..030bf630cb 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageHelper.java @@ -17,6 +17,7 @@ package org.thingsboard.server.msa.ui.pages; import lombok.extern.slf4j.Slf4j; import org.openqa.selenium.By; +import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.ui.ExpectedConditions; @@ -111,11 +112,9 @@ public class CustomerPageHelper extends CustomerPageElements { titleFieldEntityView().sendKeys(newTitle); } - public void chooseDashboard() { + public void chooseDashboard(String dashboardName) { editMenuDashboardField().click(); - sleep(0.5); - editMenuDashboard().click(); - sleep(0.5); + editMenuDashboard(dashboardName).click(); } public void createCustomersUser() { @@ -156,4 +155,9 @@ public class CustomerPageHelper extends CustomerPageElements { public void addCustomerViewEnterName(CharSequence keysToEnter) { enterText(titleFieldAddEntityView(), keysToEnter); } + + public void enterPhoneNumber(String number) { + phoneNumberEntityView().sendKeys(number); + phoneNumberEntityView().sendKeys(Keys.TAB); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DashboardPageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DashboardPageHelper.java index e6ec13fd1f..6449cf0cbb 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DashboardPageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DashboardPageHelper.java @@ -33,8 +33,8 @@ public class DashboardPageHelper extends DashboardPageElements { } public void assignedCustomer(String title) { - manageAssignedEntityListField().click(); - manageAssignedEntity(title).click(); - manageAssignedUpdateBtn().click(); + jsClick(manageAssignedEntityListField()); + jsClick(manageAssignedEntity(title)); + jsClick(manageAssignedUpdateBtn()); } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OpenRuleChainPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OpenRuleChainPageElements.java index 9a51392690..6fd114ad1d 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OpenRuleChainPageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OpenRuleChainPageElements.java @@ -24,8 +24,7 @@ public class OpenRuleChainPageElements extends AbstractBasePage { super(driver); } - private static final String DONE_BTN = "//mat-icon[contains(text(),'done')]/../.."; - private static final String DONE_BTN_DISABLE = "//mat-icon[contains(text(),'done')]/../parent::button[@disabled='true']"; + private static final String DONE_BTN = "//mat-icon[contains(text(),'done')]/parent::button"; private static final String INPUT_NODE = "//div[@class='tb-rule-node tb-input-type']"; private static final String HEAD_RULE_CHAIN_NAME = "//div[@class='tb-breadcrumb']/span[2]"; @@ -37,10 +36,6 @@ public class OpenRuleChainPageElements extends AbstractBasePage { return waitUntilVisibilityOfElementLocated(HEAD_RULE_CHAIN_NAME); } - public String getDoneBtnDisable() { - return DONE_BTN_DISABLE; - } - public WebElement doneBtn() { return waitUntilElementToBeClickable(DONE_BTN); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OpenRuleChainPageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OpenRuleChainPageHelper.java index 1a87102687..7bba9586dc 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OpenRuleChainPageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OpenRuleChainPageHelper.java @@ -16,6 +16,7 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; public class OpenRuleChainPageHelper extends OpenRuleChainPageElements { public OpenRuleChainPageHelper(WebDriver driver) { @@ -32,7 +33,7 @@ public class OpenRuleChainPageHelper extends OpenRuleChainPageElements { return headName; } - public void waitUntilDoneBtnDisable() { - waitUntilVisibilityOfElementLocated(getDoneBtnDisable()); + public void waitUntilBtnDisable(WebElement element) { + waitUntilAttributeContains(element, "disabled", "true"); } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElements.java index 99e737dba1..7cb5da3bc6 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElements.java @@ -28,7 +28,7 @@ public class OtherPageElements extends AbstractBasePage { } protected static final String ENTITY = "//mat-row//span[contains(text(),'%s')]"; - protected static final String DELETE_BTN = ENTITY + "/../..//mat-icon[contains(text(),' delete')]/../.."; + protected static final String DELETE_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),'delete')]/ancestor::button"; protected static final String DETAILS_BTN = ENTITY + "/../..//mat-icon[contains(text(),'edit')]/../.."; private static final String ENTITY_COUNT = "//div[@class='mat-paginator-range-label']"; private static final String WARNING_DELETE_POPUP_YES = "//tb-confirm-dialog//button[2]"; @@ -37,11 +37,11 @@ public class OtherPageElements extends AbstractBasePage { private static final String HELP_BTN = "//mat-icon[contains(text(),'help')]/ancestor::button"; private static final String CHECKBOX = "//mat-row//span[contains(text(),'%s')]/../..//mat-checkbox"; private static final String CHECKBOXES = "//tbody//mat-checkbox"; - private static final String DELETE_SELECTED_BTN = "//span[contains(text(),'selected')]//..//mat-icon/../.."; + private static final String DELETE_SELECTED_BTN = "//div[@class='mat-toolbar-tools']//mat-icon[contains(text(),'delete')]/parent::button"; private static final String DELETE_BTNS = "//mat-icon[contains(text(),' delete')]/../.."; private static final String MARKS_CHECKBOX = "//mat-row[contains (@class,'mat-selected')]//mat-checkbox[contains(@class, 'checked')]"; private static final String SELECT_ALL_CHECKBOX = "//thead//mat-checkbox"; - private static final String ALL_ENTITY = "//mat-row[@class='mat-row cdk-row mat-row-select ng-star-inserted']"; + private static final String ALL_ENTITY = "//mat-row[@class='mat-mdc-row mdc-data-table__row cdk-row mat-row-select ng-star-inserted']"; private static final String EDIT_PENCIL_BTN = "//tb-details-panel//mat-icon[contains(text(),'edit')]/ancestor::button"; private static final String NAME_FIELD_EDIT_VIEW = "//input[@formcontrolname='name']"; private static final String HEADER_NAME_VIEW = "//header//div[@class='tb-details-title']/span"; @@ -50,14 +50,13 @@ public class OtherPageElements extends AbstractBasePage { private static final String DESCRIPTION_ADD_ENTITY_VIEW = "//tb-add-entity-dialog//textarea"; private static final String DEBUG_CHECKBOX_EDIT = "//mat-checkbox[@formcontrolname='debugMode']"; private static final String DEBUG_CHECKBOX_VIEW = "//mat-checkbox[@formcontrolname='debugMode']//input"; - private static final String CLOSE_ENTITY_VIEW_BTN = "//header//mat-icon[contains(text(),'close')]/../.."; - private static final String SEARCH_BTN = "//mat-toolbar//mat-icon[contains(text(),'search')]/.." + - "/parent::button[@class='mat-focus-indicator mat-tooltip-trigger mat-icon-button mat-button-base ng-star-inserted']"; + private static final String CLOSE_ENTITY_VIEW_BTN = "//header//mat-icon[contains(text(),'close')]/parent::button"; + private static final String SEARCH_BTN = "//mat-toolbar//mat-icon[contains(text(),'search')]/ancestor::button[contains(@class,'ng-star')]"; private static final String SORT_BY_NAME_BTN = "//div[contains(text(),'Name')]"; private static final String SORT_BY_TITLE_BTN = "//div[contains(text(),'Title')]"; private static final String SORT_BY_TIME_BTN = "//div[contains(text(),'Created time')]/.."; private static final String CREATED_TIME = "//tbody[@role='rowgroup']//mat-cell[2]/span"; - private static final String PLUS_BTN = "//mat-icon[contains(text(),'add')]/../parent::button"; + private static final String PLUS_BTN = "//mat-icon[contains(text(),'add')]/ancestor::button"; private static final String CREATE_VIEW_ADD_BTN = "//span[contains(text(),'Add')]/.."; private static final String WARNING_MESSAGE = "//tb-snack-bar-component/div/div"; private static final String ERROR_MESSAGE = "//mat-error"; @@ -66,7 +65,7 @@ public class OtherPageElements extends AbstractBasePage { private static final String ENTITY_FROM_LIST = "//div[@role='listbox']/mat-option//span[contains(text(),'%s')]"; protected static final String ADD_ENTITY_VIEW = "//tb-add-entity-dialog"; protected static final String STATE_CONTROLLER = "//tb-entity-state-controller"; - private static final String SEARCH_FIELD = "//input[contains (@data-placeholder,'Search')]"; + private static final String SEARCH_FIELD = "//input[contains (@placeholder,'Search')]"; private static final String BROWSE_FILE = "//input[@class='file-input']"; private static final String IMPORT_BROWSE_FILE = "//mat-dialog-container//span[contains(text(),'Import')]/.."; private static final String IMPORTING_FILE = "//div[contains(text(),'%s')]"; @@ -158,7 +157,7 @@ public class OtherPageElements extends AbstractBasePage { } public WebElement debugCheckboxView() { - return waitUntilVisibilityOfElementLocated(DEBUG_CHECKBOX_VIEW); + return waitUntilPresenceOfElementLocated(DEBUG_CHECKBOX_VIEW); } public WebElement closeEntityViewBtn() { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElementsHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElementsHelper.java index 45a0dddc98..815e118a9b 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElementsHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElementsHelper.java @@ -62,48 +62,22 @@ public class OtherPageElementsHelper extends OtherPageElements { } public String deleteRuleChainTrash(String entityName) { - String s = ""; - if (deleteBtn(entityName) != null) { - deleteBtn(entityName).click(); - warningPopUpYesBtn().click(); - return entityName; - } else { - for (int i = 0; i < deleteBtns().size(); i++) { - if (deleteBtns().get(i).isEnabled()) { - deleteBtns().get(i).click(); - warningPopUpYesBtn().click(); - if (elementIsNotPresent(getWarningMessage())) { - s = driver.findElements(By.xpath(getDeleteBtns() - + "/../../../mat-cell/following-sibling::mat-cell/following-sibling::mat-cell[contains(@class,'cdk-column-name')]/span")).get(i).getText(); - break; - } - } - } - return s; - } + deleteBtn(entityName).click(); + warningPopUpYesBtn().click(); + return entityName; } public String deleteSelected(String entityName) { - String s = ""; - if (deleteBtn(entityName) != null) { - checkBox(entityName).click(); - deleteSelectedBtn().click(); - warningPopUpYesBtn().click(); - return entityName; - } else { - for (int i = 0; i < checkBoxes().size(); i++) { - if (checkBoxes().get(i).isDisplayed()) { - s = driver.findElements(By.xpath(getCheckboxes() + "/../../mat-cell/following-sibling::mat-cell/following-sibling::mat-cell[contains(@class,'cdk-column-name')]/span")).get(i).getText(); - checkBox(s).click(); - deleteSelectedBtn().click(); - warningPopUpYesBtn().click(); - if (elementIsNotPresent(getWarningMessage())) { - break; - } - } - } - return s; - } + checkBox(entityName).click(); + jsClick(deleteSelectedBtn()); + warningPopUpYesBtn().click(); + return entityName; + } + + public void deleteSelected(int countOfCheckBoxes) { + clickOnCheckBoxes(countOfCheckBoxes); + jsClick(deleteSelectedBtn()); + warningPopUpYesBtn().click(); } public void searchEntity(String namePath) { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/RuleChainsPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/RuleChainsPageElements.java index b34c5ccb86..c1b72efbeb 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/RuleChainsPageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/RuleChainsPageElements.java @@ -25,7 +25,7 @@ public class RuleChainsPageElements extends OtherPageElementsHelper { super(driver); } - private static final String MAKE_ROOT_BTN = ENTITY + "/../..//mat-icon[contains(text(),' flag')]/../.."; + private static final String MAKE_ROOT_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),'flag')]/ancestor::button"; private static final String ROOT = ENTITY + "/../..//mat-icon[text() = 'check_box']"; private static final String ROOT_DISABLE = ENTITY + "/../..//mat-icon[text() = 'check_box_outline_blank']"; private static final String CREATED_TIME = ENTITY + "/../..//mat-cell/span[contains(text(),'%s')]"; @@ -35,7 +35,7 @@ public class RuleChainsPageElements extends OtherPageElementsHelper { private static final String DELETE_RULE_CHAIN_FROM_VIEW_BTN = "//span[contains(text(),' Delete')]"; private static final String IMPORT_RULE_CHAIN_BTN = "//span[contains(text(),'Import rule chain')]"; private static final String OPEN_RULE_CHAIN_FROM_VIEW = "//span[contains(text(),'Open rule chain')]"; - private static final String MAKE_ROOT_FROM_VIEW = "(//span[contains(text(),' Make rule chain root ')]/..)[1]"; + private static final String MAKE_ROOT_FROM_VIEW = "//span[contains(text(),' Make rule chain root ')]/parent::button"; private static final String ROOT_ACTIVE_CHECKBOXES = "//mat-icon[text() = 'check_box']"; private static final String ALL_NAMES = "//mat-icon[contains(text(),'check')]/../../../mat-cell[contains(@class,'name')]/span"; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assetProfileSmoke/CreateAssetProfileTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assetProfileSmoke/CreateAssetProfileTest.java index cb7d70f33f..01e1139328 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assetProfileSmoke/CreateAssetProfileTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assetProfileSmoke/CreateAssetProfileTest.java @@ -167,7 +167,7 @@ public class CreateAssetProfileTest extends AbstractDriverBaseTest { String urlPath = "docs/user-guide/asset-profiles/"; sideBarMenuView.openAssetProfiles(); - profilesPage.allEntity().get(0).click(); + profilesPage.profileNames().get(0).click(); profilesPage.goToProfileHelpPage(); Assert.assertTrue(urlContains(urlPath)); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/CustomerEditMenuTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/CustomerEditMenuTest.java index c47ae92468..76a4abb65d 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/CustomerEditMenuTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/CustomerEditMenuTest.java @@ -63,7 +63,7 @@ public class CustomerEditMenuTest extends AbstractDriverBaseTest { @BeforeMethod public void reLogin() { - if (getUrl().contains("/login")) { + if (getJwtTokenFromLocalStorage() == null) { loginPage.authorizationTenant(); } } @@ -147,14 +147,14 @@ public class CustomerEditMenuTest extends AbstractDriverBaseTest { dashboardPage.assignedCustomer(customerName); sideBarMenuView.customerBtn().click(); customerPage.entity(customerName).click(); - customerPage.editPencilBtn().click(); - customerPage.chooseDashboard(); + jsClick(customerPage.editPencilBtn()); + customerPage.chooseDashboard(dashboardPage.getDashboardTitle()); customerPage.doneBtnEditView().click(); customerPage.setDashboardFromView(); customerPage.closeEntityViewBtn().click(); - customerPage.manageCustomersUserBtn(customerName).click(); + jsClick(customerPage.manageCustomersUserBtn(customerName)); customerPage.createCustomersUser(); - customerPage.userLoginBtn().click(); + jsClick(customerPage.userLoginBtn()); Assert.assertNotNull(customerPage.usersWidget()); Assert.assertTrue(customerPage.usersWidget().isDisplayed()); @@ -173,14 +173,14 @@ public class CustomerEditMenuTest extends AbstractDriverBaseTest { customerPage.assignedDashboard(); sideBarMenuView.customerBtn().click(); customerPage.entity(customerName).click(); - customerPage.editPencilBtn().click(); - customerPage.chooseDashboard(); + jsClick(customerPage.editPencilBtn()); + customerPage.chooseDashboard(customerPage.getDashboard()); customerPage.doneBtnEditView().click(); customerPage.setDashboardFromView(); customerPage.closeEntityViewBtn().click(); - customerPage.manageCustomersUserBtn(customerName).click(); + jsClick(customerPage.manageCustomersUserBtn(customerName)); customerPage.createCustomersUser(); - customerPage.userLoginBtn().click(); + jsClick(customerPage.userLoginBtn()); Assert.assertNotNull(customerPage.usersWidget()); Assert.assertTrue(customerPage.usersWidget().isDisplayed()); @@ -199,15 +199,15 @@ public class CustomerEditMenuTest extends AbstractDriverBaseTest { customerPage.assignedDashboard(); sideBarMenuView.customerBtn().click(); customerPage.entity(customerName).click(); - customerPage.editPencilBtn().click(); - customerPage.chooseDashboard(); + jsClick(customerPage.editPencilBtn()); + customerPage.chooseDashboard(customerPage.getDashboard()); customerPage.hideHomeDashboardToolbarCheckbox().click(); customerPage.doneBtnEditView().click(); customerPage.setDashboardFromView(); customerPage.closeEntityViewBtn().click(); - customerPage.manageCustomersUserBtn(customerName).click(); + jsClick(customerPage.manageCustomersUserBtn(customerName)); customerPage.createCustomersUser(); - customerPage.userLoginBtn().click(); + jsClick(customerPage.userLoginBtn()); Assert.assertNotNull(customerPage.usersWidget()); Assert.assertTrue(customerPage.usersWidget().isDisplayed()); @@ -243,11 +243,9 @@ public class CustomerEditMenuTest extends AbstractDriverBaseTest { sideBarMenuView.customerBtn().click(); customerPage.entityTitles().get(0).click(); customerPage.editPencilBtn().click(); - customerPage.phoneNumberEntityView().sendKeys(number); - boolean doneBtnIsEnable = customerPage.doneBtnEditViewVisible().isEnabled(); - customerPage.doneBtnEditViewVisible().click(); + customerPage.enterPhoneNumber(number); - Assert.assertFalse(doneBtnIsEnable); + Assert.assertFalse(customerPage.doneBtnEditViewVisible().isEnabled()); Assert.assertNotNull(customerPage.errorMessage()); Assert.assertTrue(customerPage.errorMessage().isDisplayed()); Assert.assertEquals(customerPage.errorMessage().getText(), PHONE_NUMBER_ERROR_MESSAGE); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteCustomerTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteCustomerTest.java index 3f535ce113..67b0e5ef9f 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteCustomerTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteCustomerTest.java @@ -77,9 +77,9 @@ public class DeleteCustomerTest extends AbstractDriverBaseTest { sideBarMenuView.customerBtn().click(); customerPage.entity(customerName).click(); - customerPage.customerViewDeleteBtn().click(); + jsClick(customerPage.customerViewDeleteBtn()); customerPage.warningPopUpYesBtn().click(); - customerPage.refreshBtn().click(); + jsClick(customerPage.refreshBtn()); Assert.assertTrue(customerPage.entityIsNotPresent(customerName)); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteSeveralCustomerTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteSeveralCustomerTest.java index 635505b64a..c198ad36fc 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteSeveralCustomerTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteSeveralCustomerTest.java @@ -49,9 +49,7 @@ public class DeleteSeveralCustomerTest extends AbstractDriverBaseTest { testRestClient.postCustomer(defaultCustomerPrototype(title2)); sideBarMenuView.customerBtn().click(); - customerPage.clickOnCheckBoxes(2); - customerPage.deleteSelectedBtn().click(); - customerPage.warningPopUpYesBtn().click(); + customerPage.deleteSelected(2); customerPage.refreshBtn().click(); Assert.assertTrue(customerPage.customerIsNotPresent(title1)); @@ -63,7 +61,7 @@ public class DeleteSeveralCustomerTest extends AbstractDriverBaseTest { public void selectAllCustomers() { sideBarMenuView.customerBtn().click(); customerPage.selectAllCheckBox().click(); - customerPage.deleteSelectedBtn().click(); + jsClick(customerPage.deleteSelectedBtn()); Assert.assertNotNull(customerPage.warningPopUpTitle()); Assert.assertTrue(customerPage.warningPopUpTitle().isDisplayed()); @@ -79,9 +77,7 @@ public class DeleteSeveralCustomerTest extends AbstractDriverBaseTest { testRestClient.postCustomer(defaultCustomerPrototype(title2)); sideBarMenuView.customerBtn().click(); - customerPage.clickOnCheckBoxes(2); - customerPage.deleteSelectedBtn().click(); - customerPage.warningPopUpYesBtn().click(); + customerPage.deleteSelected(2); Assert.assertTrue(customerPage.customerIsNotPresent(title1)); Assert.assertTrue(customerPage.customerIsNotPresent(title2)); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersAssetsTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersAssetsTest.java index 405a028a15..80467b1075 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersAssetsTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersAssetsTest.java @@ -56,7 +56,7 @@ public class ManageCustomersAssetsTest extends AbstractDriverBaseTest { sideBarMenuView.customerBtn().click(); customerPage.setCustomerName(); customerPage.entity(customerPage.getCustomerName()).click(); - customerPage.manageCustomersAssetsBtnView().click(); + jsClick(customerPage.manageCustomersAssetsBtnView()); Assert.assertTrue(urlContains(manage.toLowerCase())); Assert.assertNotNull(customerPage.customerAssetsIconHeader()); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersDashboardsTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersDashboardsTest.java index f1f27c96cf..27d682918e 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersDashboardsTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersDashboardsTest.java @@ -55,7 +55,7 @@ public class ManageCustomersDashboardsTest extends AbstractDriverBaseTest { sideBarMenuView.customerBtn().click(); customerPage.setCustomerName(); customerPage.entity(customerPage.getCustomerName()).click(); - customerPage.manageCustomersDashboardsBtnView().click(); + jsClick(customerPage.manageCustomersDashboardsBtnView()); Assert.assertTrue(urlContains(manage.toLowerCase())); Assert.assertNotNull(customerPage.customerDashboardIconHeader()); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersDevicesTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersDevicesTest.java index fde5b87e52..f6a6e4c433 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersDevicesTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersDevicesTest.java @@ -55,7 +55,7 @@ public class ManageCustomersDevicesTest extends AbstractDriverBaseTest { sideBarMenuView.customerBtn().click(); customerPage.setCustomerName(); customerPage.entity(customerPage.getCustomerName()).click(); - customerPage.manageCustomersDeviceBtnView().click(); + jsClick(customerPage.manageCustomersDeviceBtnView()); Assert.assertTrue(urlContains(manage.toLowerCase())); Assert.assertNotNull(customerPage.customerDevicesIconHeader()); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersEdgesTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersEdgesTest.java index 184f506584..a32ab02b7a 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersEdgesTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersEdgesTest.java @@ -56,7 +56,7 @@ public class ManageCustomersEdgesTest extends AbstractDriverBaseTest { sideBarMenuView.customerBtn().click(); customerPage.setCustomerName(); customerPage.entity(customerPage.getCustomerName()).click(); - customerPage.manageCustomersEdgeBtnView().click(); + jsClick(customerPage.manageCustomersEdgeBtnView()); Assert.assertTrue(urlContains("edgeInstances")); Assert.assertNotNull(customerPage.customerEdgeIconHeader()); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersUsersTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersUsersTest.java index 9b8a7b8eef..632f76422e 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersUsersTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/ManageCustomersUsersTest.java @@ -42,7 +42,7 @@ public class ManageCustomersUsersTest extends AbstractDriverBaseTest { public void openWindowByRightCornerBtn() { sideBarMenuView.customerBtn().click(); customerPage.setCustomerName(); - customerPage.manageCustomersUserBtn(customerPage.getCustomerName()).click(); + jsClick(customerPage.manageCustomersUserBtn(customerPage.getCustomerName())); Assert.assertTrue(urlContains("user")); Assert.assertNotNull(customerPage.customerUserIconHeader()); @@ -56,7 +56,7 @@ public class ManageCustomersUsersTest extends AbstractDriverBaseTest { sideBarMenuView.customerBtn().click(); customerPage.setCustomerName(); customerPage.entity(customerPage.getCustomerName()).click(); - customerPage.manageCustomersUserBtnView().click(); + jsClick(customerPage.manageCustomersUserBtnView()); Assert.assertTrue(urlContains("user")); Assert.assertNotNull(customerPage.customerUserIconHeader()); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileTest.java index b983b7fe5f..4e57dc8c11 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileTest.java @@ -173,7 +173,7 @@ public class CreateDeviceProfileTest extends AbstractDriverBaseTest { String urlPath = "docs/user-guide/device-profiles/"; sideBarMenuView.openDeviceProfiles(); - profilesPage.allEntity().get(0).click(); + profilesPage.profileNames().get(0).click(); profilesPage.goToProfileHelpPage(); Assert.assertTrue(urlContains(urlPath)); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/CreateRuleChainImportTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/CreateRuleChainImportTest.java index 14d3a0a6cd..c3a0a88ff1 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/CreateRuleChainImportTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/CreateRuleChainImportTest.java @@ -16,6 +16,7 @@ package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; import io.qameta.allure.Description; +import org.openqa.selenium.WebElement; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; @@ -100,8 +101,9 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest { ruleChainsPage.openImportRuleChainView(); ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportRuleChain); ruleChainsPage.importBrowseFileBtn().click(); - openRuleChainPage.doneBtn().click(); - openRuleChainPage.waitUntilDoneBtnDisable(); + WebElement doneBtn = openRuleChainPage.doneBtn(); + doneBtn.click(); + //openRuleChainPage.waitUntilBtnDisable(doneBtn); ruleChainName = IMPORT_RULE_CHAIN_NAME; sideBarMenuView.ruleChainsBtn().click(); @@ -120,8 +122,9 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest { ruleChainsPage.openImportRuleChainView(); ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportRuleChain); ruleChainsPage.importBrowseFileBtn().click(); - openRuleChainPage.doneBtn().click(); - openRuleChainPage.waitUntilDoneBtnDisable(); + WebElement doneBtn = openRuleChainPage.doneBtn(); + doneBtn.click(); + //openRuleChainPage.waitUntilBtnDisable(doneBtn); sideBarMenuView.ruleChainsBtn().click(); boolean entityNotNull = ruleChainsPage.entity(ruleChainName) != null; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteRuleChainTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteRuleChainTest.java index 078a807185..d7e9065ddb 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteRuleChainTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteRuleChainTest.java @@ -76,7 +76,7 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest { sideBarMenuView.ruleChainsBtn().click(); ruleChainsPage.detailsBtn(ENTITY_NAME).click(); String deletedRuleChain = ruleChainsPage.deleteRuleChainFromView(ruleChainName); - ruleChainsPage.refreshBtn().click(); + jsClick(ruleChainsPage.refreshBtn()); Assert.assertTrue(ruleChainsPage.entityIsNotPresent(deletedRuleChain)); } @@ -145,7 +145,7 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest { sideBarMenuView.ruleChainsBtn().click(); ruleChainsPage.detailsBtn(deletedRuleChain).click(); - ruleChainsPage.deleteBtnFromView().click(); + jsClick(ruleChainsPage.deleteBtnFromView()); ruleChainsPage.warningPopUpYesBtn().click(); Assert.assertNotNull(ruleChainsPage.entity(deletedRuleChain)); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteSeveralRuleChainsTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteSeveralRuleChainsTest.java index 612efee64c..cbfe27462f 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteSeveralRuleChainsTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteSeveralRuleChainsTest.java @@ -49,9 +49,7 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest { testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); sideBarMenuView.ruleChainsBtn().click(); - ruleChainsPage.clickOnCheckBoxes(2); - ruleChainsPage.deleteSelectedBtn().click(); - ruleChainsPage.warningPopUpYesBtn().click(); + ruleChainsPage.deleteSelected(2); ruleChainsPage.refreshBtn().click(); Assert.assertTrue(ruleChainsPage.ruleChainsIsNotPresent(ruleChainName)); @@ -66,7 +64,7 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest { sideBarMenuView.ruleChainsBtn().click(); ruleChainsPage.selectAllCheckBox().click(); - ruleChainsPage.deleteSelectedBtn().click(); + jsClick(ruleChainsPage.deleteSelectedBtn()); ruleChainsPage.warningPopUpYesBtn().click(); ruleChainsPage.refreshBtn().click(); @@ -99,9 +97,7 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest { testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); sideBarMenuView.ruleChainsBtn().click(); - ruleChainsPage.clickOnCheckBoxes(2); - ruleChainsPage.deleteSelectedBtn().click(); - ruleChainsPage.warningPopUpYesBtn().click(); + ruleChainsPage.deleteSelected(2); Assert.assertTrue(ruleChainsPage.ruleChainsIsNotPresent(ruleChainName)); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/MakeRuleChainRootTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/MakeRuleChainRootTest.java index 7ad3fad982..6b6bbc43bd 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/MakeRuleChainRootTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/MakeRuleChainRootTest.java @@ -75,7 +75,7 @@ public class MakeRuleChainRootTest extends AbstractDriverBaseTest { ruleChainsPage.setRuleChainNameWithoutRoot(0); String ruleChain = ruleChainsPage.getRuleChainName(); ruleChainsPage.detailsBtn(ruleChain).click(); - ruleChainsPage.makeRootFromViewBtn().click(); + jsClick(ruleChainsPage.makeRootFromViewBtn()); ruleChainsPage.warningPopUpYesBtn().click(); ruleChainsPage.closeEntityViewBtn().click(); diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java index 851d285e0e..6c3d80dade 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java @@ -32,6 +32,8 @@ import org.thingsboard.server.common.data.plugin.ComponentType; import org.thingsboard.server.common.data.script.ScriptLanguage; import org.thingsboard.server.common.msg.TbMsg; +import java.util.Objects; + @Slf4j @RuleNode( type = ComponentType.ACTION, @@ -54,8 +56,12 @@ public class TbLogNode implements TbNode { @Override public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException { this.config = TbNodeUtils.convert(configuration, TbLogNodeConfiguration.class); - this.standard = new TbLogNodeConfiguration().defaultConfiguration().getJsScript().equals(config.getJsScript()); - this.scriptEngine = this.standard ? null : ctx.createScriptEngine(config.getScriptLang(), + this.standard = isStandard(config); + this.scriptEngine = this.standard ? null : createScriptEngine(ctx, config); + } + + ScriptEngine createScriptEngine(TbContext ctx, TbLogNodeConfiguration config) { + return ctx.createScriptEngine(config.getScriptLang(), ScriptLanguage.TBEL.equals(config.getScriptLang()) ? config.getTbelScript() : config.getJsScript()); } @@ -83,6 +89,18 @@ public class TbLogNode implements TbNode { }, MoreExecutors.directExecutor()); //usually js responses runs on js callback executor } + boolean isStandard(TbLogNodeConfiguration conf) { + Objects.requireNonNull(conf, "node config is null"); + final TbLogNodeConfiguration defaultConfig = new TbLogNodeConfiguration().defaultConfiguration(); + switch (conf.getScriptLang()) { + case JS: return defaultConfig.getJsScript().equals(conf.getJsScript()); + case TBEL: return defaultConfig.getTbelScript().equals(conf.getTbelScript()); + default: + log.warn("No rule to define isStandard script for script language [{}], assuming that is non-standard", conf.getScriptLang()); + return false; + } + } + void logStandard(TbContext ctx, TbMsg msg) { log.info(toLogMessage(msg)); ctx.tellSuccess(msg); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbLogNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbLogNodeTest.java index 0df5921d4d..21e99af819 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbLogNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbLogNodeTest.java @@ -17,14 +17,29 @@ package org.thingsboard.rule.engine.action; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.thingsboard.common.util.JacksonUtil; +import org.thingsboard.rule.engine.api.TbContext; +import org.thingsboard.rule.engine.api.TbNodeConfiguration; +import org.thingsboard.rule.engine.api.TbNodeException; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.script.ScriptLanguage; import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.TbMsgMetaData; import java.util.Collections; import java.util.Map; +import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; @Slf4j public class TbLogNodeTest { @@ -61,6 +76,7 @@ public class TbLogNodeTest { "Incoming metadata:\n" + "{}"); } + @Test void givenNullDataMsg_whenToLog_thenReturnString() { TbLogNode node = new TbLogNode(); @@ -77,4 +93,50 @@ public class TbLogNodeTest { "{}"); } + @ParameterizedTest + @EnumSource(ScriptLanguage.class) + void givenDefaultConfig_whenIsStandardForEachScriptLanguage_thenTrue(ScriptLanguage scriptLanguage) throws TbNodeException { + + TbLogNodeConfiguration config = new TbLogNodeConfiguration().defaultConfiguration(); + config.setScriptLang(scriptLanguage); + TbLogNode node = spy(new TbLogNode()); + TbNodeConfiguration tbNodeConfiguration = new TbNodeConfiguration(JacksonUtil.valueToTree(config)); + TbContext ctx = mock(TbContext.class); + node.init(ctx, tbNodeConfiguration); + + assertThat(node.isStandard(config)).as("Script is standard for language " + scriptLanguage).isTrue(); + verify(node, never()).createScriptEngine(any(), any()); + verify(ctx, never()).createScriptEngine(any(), anyString()); + + } + + @Test + void givenScriptEngineEnum_whenNewAdded_thenFailed() { + assertThat(ScriptLanguage.values().length).as("only two ScriptLanguage supported").isEqualTo(2); + } + + @Test + void givenScriptEngineLangJs_whenCreateScriptEngine_thenSupplyJsScript(){ + TbLogNodeConfiguration configJs = new TbLogNodeConfiguration().defaultConfiguration(); + configJs.setScriptLang(ScriptLanguage.JS); + configJs.setJsScript(configJs.getJsScript() + " // This is JS script " + UUID.randomUUID()); + TbLogNode node = new TbLogNode(); + TbContext ctx = mock(TbContext.class); + node.createScriptEngine(ctx, configJs); + verify(ctx).createScriptEngine(ScriptLanguage.JS, configJs.getJsScript()); + verifyNoMoreInteractions(ctx); + } + + @Test + void givenScriptEngineLangTbel_whenCreateScriptEngine_thenSupplyTbelScript(){ + TbLogNodeConfiguration configTbel = new TbLogNodeConfiguration().defaultConfiguration(); + configTbel.setScriptLang(ScriptLanguage.TBEL); + configTbel.setTbelScript(configTbel.getTbelScript() + " // This is TBEL script " + UUID.randomUUID()); + TbLogNode node = new TbLogNode(); + TbContext ctx = mock(TbContext.class); + node.createScriptEngine(ctx, configTbel); + verify(ctx).createScriptEngine(ScriptLanguage.TBEL, configTbel.getTbelScript()); + verifyNoMoreInteractions(ctx); + } + }