diff --git a/application/src/test/java/org/thingsboard/server/edge/BaseEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/BaseEdgeTest.java index 1316f962d5..626bef049a 100644 --- a/application/src/test/java/org/thingsboard/server/edge/BaseEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/BaseEdgeTest.java @@ -34,6 +34,7 @@ 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.cluster.TbClusterService; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.DataConstants; @@ -116,7 +117,6 @@ import org.thingsboard.server.gen.edge.v1.UserUpdateMsg; import org.thingsboard.server.gen.edge.v1.WidgetTypeUpdateMsg; import org.thingsboard.server.gen.edge.v1.WidgetsBundleUpdateMsg; import org.thingsboard.server.gen.transport.TransportProtos; -import org.thingsboard.server.cluster.TbClusterService; import java.util.ArrayList; import java.util.List; @@ -165,7 +165,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { tenantAdmin.setLastName("Downs"); tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1"); - // sleep 1 seconds to avoid CREDENTIALS updated message for the user + // sleep 0.5 second to avoid CREDENTIALS updated message for the user // user credentials is going to be stored and updated event pushed to edge notification service // while service will be processing this event edge could be already added and additional message will be pushed Thread.sleep(500); @@ -176,7 +176,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { edgeImitator.expectMessageAmount(13); edgeImitator.connect(); - testReceivedInitialData(); + verifyEdgeConnectionAndInitialData(); } @After @@ -187,41 +187,10 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { loginSysAdmin(); - doDelete("/api/tenant/" + savedTenant.getId().getId().toString()) + doDelete("/api/tenant/" + savedTenant.getUuidId()) .andExpect(status().isOk()); } - @Test - public void test() throws Exception { - testDevices(); - - testAssets(); - - testRuleChains(); - - testDashboards(); - - testRelations(); - - testAlarms(); - - testEntityView(); - - testCustomerAndNewUser(); - - testWidgetsBundleAndWidgetType(); - - testTimeseries(); - - testAttributes(); - - testRpcCall(); - - testTimeseriesWithFailures(); - - testSendMessagesToCloud(); - } - private void installation() throws Exception { edge = doPost("/api/edge", constructEdge("Test Edge", "test"), Edge.class); @@ -230,12 +199,12 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class); Device savedDevice = saveDevice("Edge Device 1", CUSTOM_DEVICE_PROFILE_NAME); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/device/" + savedDevice.getId().getId().toString(), Device.class); + doPost("/api/edge/" + edge.getUuidId() + + "/device/" + savedDevice.getUuidId(), Device.class); Asset savedAsset = saveAsset("Edge Asset 1"); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/asset/" + savedAsset.getId().getId().toString(), Asset.class); + doPost("/api/edge/" + edge.getUuidId() + + "/asset/" + savedAsset.getUuidId(), Asset.class); } private void extendDeviceProfileData(DeviceProfile deviceProfile) { @@ -267,8 +236,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { profileData.setProvisionConfiguration(new AllowCreateNewDevicesDeviceProfileProvisionConfiguration("123")); } - private void testReceivedInitialData() throws Exception { - log.info("Checking received data"); + private void verifyEdgeConnectionAndInitialData() throws Exception { Assert.assertTrue(edgeImitator.waitForMessages()); EdgeConfiguration configuration = edgeImitator.getConfiguration(); @@ -283,7 +251,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { UUID deviceUUID = new UUID(deviceUpdateMsg.getIdMSB(), deviceUpdateMsg.getIdLSB()); Device device = doGet("/api/device/" + deviceUUID.toString(), Device.class); Assert.assertNotNull(device); - List edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?", + List edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/devices?", new TypeReference>() {}, new PageLink(100)).getData(); Assert.assertTrue(edgeDevices.contains(device)); @@ -310,7 +278,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { UUID assetUUID = new UUID(assetUpdateMsg.getIdMSB(), assetUpdateMsg.getIdLSB()); Asset asset = doGet("/api/asset/" + assetUUID.toString(), Asset.class); Assert.assertNotNull(asset); - List edgeAssets = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/assets?", + List edgeAssets = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/assets?", new TypeReference>() {}, new PageLink(100)).getData(); Assert.assertTrue(edgeAssets.contains(asset)); @@ -323,15 +291,13 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { UUID ruleChainUUID = new UUID(ruleChainUpdateMsg.getIdMSB(), ruleChainUpdateMsg.getIdLSB()); RuleChain ruleChain = doGet("/api/ruleChain/" + ruleChainUUID.toString(), RuleChain.class); Assert.assertNotNull(ruleChain); - List edgeRuleChains = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/ruleChains?", + List edgeRuleChains = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/ruleChains?", new TypeReference>() {}, new PageLink(100)).getData(); Assert.assertTrue(edgeRuleChains.contains(ruleChain)); testAutoGeneratedCodeByProtobuf(ruleChainUpdateMsg); validateAdminSettings(); - - log.info("Received data checked"); } private void validateAdminSettings() throws JsonProcessingException { @@ -367,39 +333,26 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertNotNull(jsonNode.get("test")); } - private void testDevices() throws Exception { - log.info("Testing devices"); - + @Test + public void testDevices() throws Exception { // 1 - edgeImitator.expectMessageAmount(1); - Device savedDevice = saveDevice("Edge Device 2", "Default"); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/device/" + savedDevice.getId().getId().toString(), Device.class); - Assert.assertTrue(edgeImitator.waitForMessages()); - AbstractMessage latestMessage = edgeImitator.getLatestMessage(); - Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); - DeviceUpdateMsg deviceUpdateMsg = (DeviceUpdateMsg) latestMessage; - Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceUpdateMsg.getMsgType()); - Assert.assertEquals(deviceUpdateMsg.getIdMSB(), savedDevice.getUuidId().getMostSignificantBits()); - Assert.assertEquals(deviceUpdateMsg.getIdLSB(), savedDevice.getUuidId().getLeastSignificantBits()); - Assert.assertEquals(deviceUpdateMsg.getName(), savedDevice.getName()); - Assert.assertEquals(deviceUpdateMsg.getType(), savedDevice.getType()); + Device savedDevice = saveDeviceOnCloudAndVerifyDeliveryToEdge(); // 2 edgeImitator.expectMessageAmount(1); - doDelete("/api/edge/" + edge.getId().getId().toString() - + "/device/" + savedDevice.getId().getId().toString(), Device.class); + doDelete("/api/edge/" + edge.getUuidId() + + "/device/" + savedDevice.getUuidId(), Device.class); Assert.assertTrue(edgeImitator.waitForMessages()); - latestMessage = edgeImitator.getLatestMessage(); + AbstractMessage latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); - deviceUpdateMsg = (DeviceUpdateMsg) latestMessage; + DeviceUpdateMsg deviceUpdateMsg = (DeviceUpdateMsg) latestMessage; Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, deviceUpdateMsg.getMsgType()); Assert.assertEquals(deviceUpdateMsg.getIdMSB(), savedDevice.getUuidId().getMostSignificantBits()); Assert.assertEquals(deviceUpdateMsg.getIdLSB(), savedDevice.getUuidId().getLeastSignificantBits()); // 3 edgeImitator.expectMessageAmount(1); - doDelete("/api/device/" + savedDevice.getId().getId().toString()) + doDelete("/api/device/" + savedDevice.getUuidId()) .andExpect(status().isOk()); // we should not get any message because device is not assigned to edge any more Assert.assertFalse(edgeImitator.waitForMessages(1)); @@ -407,8 +360,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 4 edgeImitator.expectMessageAmount(1); savedDevice = saveDevice("Edge Device 3", "Default"); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/device/" + savedDevice.getId().getId().toString(), Device.class); + doPost("/api/edge/" + edge.getUuidId() + + "/device/" + savedDevice.getUuidId(), Device.class); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); @@ -421,7 +374,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 5 edgeImitator.expectMessageAmount(1); - doDelete("/api/device/" + savedDevice.getId().getId().toString()) + doDelete("/api/device/" + savedDevice.getUuidId()) .andExpect(status().isOk()); // in this case we should get messages because device was assigned to edge Assert.assertTrue(edgeImitator.waitForMessages()); @@ -432,17 +385,15 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(deviceUpdateMsg.getIdMSB(), savedDevice.getUuidId().getMostSignificantBits()); Assert.assertEquals(deviceUpdateMsg.getIdLSB(), savedDevice.getUuidId().getLeastSignificantBits()); - log.info("Devices tested successfully"); } - private void testAssets() throws Exception { - log.info("Testing assets"); - + @Test + public void testAssets() throws Exception { // 1 edgeImitator.expectMessageAmount(1); Asset savedAsset = saveAsset("Edge Asset 2"); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/asset/" + savedAsset.getId().getId().toString(), Asset.class); + doPost("/api/edge/" + edge.getUuidId() + + "/asset/" + savedAsset.getUuidId(), Asset.class); Assert.assertTrue(edgeImitator.waitForMessages()); AbstractMessage latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof AssetUpdateMsg); @@ -455,8 +406,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 2 edgeImitator.expectMessageAmount(1); - doDelete("/api/edge/" + edge.getId().getId().toString() - + "/asset/" + savedAsset.getId().getId().toString(), Asset.class); + doDelete("/api/edge/" + edge.getUuidId() + + "/asset/" + savedAsset.getUuidId(), Asset.class); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof AssetUpdateMsg); @@ -467,15 +418,15 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 3 edgeImitator.expectMessageAmount(1); - doDelete("/api/asset/" + savedAsset.getId().getId().toString()) + doDelete("/api/asset/" + savedAsset.getUuidId()) .andExpect(status().isOk()); Assert.assertFalse(edgeImitator.waitForMessages(1)); // 4 edgeImitator.expectMessageAmount(1); savedAsset = saveAsset("Edge Asset 3"); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/asset/" + savedAsset.getId().getId().toString(), Asset.class); + doPost("/api/edge/" + edge.getUuidId() + + "/asset/" + savedAsset.getUuidId(), Asset.class); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof AssetUpdateMsg); @@ -488,7 +439,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 5 edgeImitator.expectMessageAmount(1); - doDelete("/api/asset/" + savedAsset.getId().getId().toString()) + doDelete("/api/asset/" + savedAsset.getUuidId()) .andExpect(status().isOk()); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); @@ -497,21 +448,18 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, assetUpdateMsg.getMsgType()); Assert.assertEquals(assetUpdateMsg.getIdMSB(), savedAsset.getUuidId().getMostSignificantBits()); Assert.assertEquals(assetUpdateMsg.getIdLSB(), savedAsset.getUuidId().getLeastSignificantBits()); - - log.info("Assets tested successfully"); } - private void testRuleChains() throws Exception { - log.info("Testing RuleChains"); - + @Test + public void testRuleChains() throws Exception { // 1 edgeImitator.expectMessageAmount(2); RuleChain ruleChain = new RuleChain(); ruleChain.setName("Edge Test Rule Chain"); ruleChain.setType(RuleChainType.EDGE); RuleChain savedRuleChain = doPost("/api/ruleChain", ruleChain, RuleChain.class); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class); + doPost("/api/edge/" + edge.getUuidId() + + "/ruleChain/" + savedRuleChain.getUuidId(), RuleChain.class); createRuleChainMetadata(savedRuleChain); Assert.assertTrue(edgeImitator.waitForMessages()); Optional ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class); @@ -528,8 +476,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 3 edgeImitator.expectMessageAmount(1); - doDelete("/api/edge/" + edge.getId().getId().toString() - + "/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class); + doDelete("/api/edge/" + edge.getUuidId() + + "/ruleChain/" + savedRuleChain.getUuidId(), RuleChain.class); Assert.assertTrue(edgeImitator.waitForMessages()); ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class); Assert.assertTrue(ruleChainUpdateMsgOpt.isPresent()); @@ -540,11 +488,9 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 4 edgeImitator.expectMessageAmount(1); - doDelete("/api/ruleChain/" + savedRuleChain.getId().getId().toString()) + doDelete("/api/ruleChain/" + savedRuleChain.getUuidId()) .andExpect(status().isOk()); Assert.assertFalse(edgeImitator.waitForMessages(1)); - - log.info("RuleChains tested successfully"); } private void testRuleChainMetadataRequestMsg(RuleChainId ruleChainId) throws Exception { @@ -608,16 +554,15 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { doPost("/api/ruleChain/metadata", ruleChainMetaData, RuleChainMetaData.class); } - private void testDashboards() throws Exception { - log.info("Testing Dashboards"); - + @Test + public void testDashboards() throws Exception { // 1 edgeImitator.expectMessageAmount(1); Dashboard dashboard = new Dashboard(); dashboard.setTitle("Edge Test Dashboard"); Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class); + doPost("/api/edge/" + edge.getUuidId() + + "/dashboard/" + savedDashboard.getUuidId(), Dashboard.class); Assert.assertTrue(edgeImitator.waitForMessages()); AbstractMessage latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof DashboardUpdateMsg); @@ -641,8 +586,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 3 edgeImitator.expectMessageAmount(1); - doDelete("/api/edge/" + edge.getId().getId().toString() - + "/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class); + doDelete("/api/edge/" + edge.getUuidId() + + "/dashboard/" + savedDashboard.getUuidId(), Dashboard.class); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof DashboardUpdateMsg); @@ -653,16 +598,13 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 4 edgeImitator.expectMessageAmount(1); - doDelete("/api/dashboard/" + savedDashboard.getId().getId().toString()) + doDelete("/api/dashboard/" + savedDashboard.getUuidId()) .andExpect(status().isOk()); Assert.assertFalse(edgeImitator.waitForMessages(1)); - - log.info("Dashboards tested successfully"); } - private void testRelations() throws Exception { - log.info("Testing Relations"); - + @Test + public void testRelations() throws Exception { // 1 edgeImitator.expectMessageAmount(1); Device device = findDeviceByName("Edge Device 1"); @@ -710,13 +652,10 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(relationUpdateMsg.getToIdLSB(), relation.getTo().getId().getLeastSignificantBits()); Assert.assertEquals(relationUpdateMsg.getToEntityType(), relation.getTo().getEntityType().name()); Assert.assertEquals(relationUpdateMsg.getTypeGroup(), relation.getTypeGroup().name()); - - log.info("Relations tested successfully"); } - private void testAlarms() throws Exception { - log.info("Testing Alarms"); - + @Test + public void testAlarms() throws Exception { // 1 edgeImitator.expectMessageAmount(1); Device device = findDeviceByName("Edge Device 1"); @@ -739,7 +678,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 2 edgeImitator.expectMessageAmount(1); - doPost("/api/alarm/" + savedAlarm.getId().getId().toString() + "/ack"); + doPost("/api/alarm/" + savedAlarm.getUuidId() + "/ack"); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); @@ -752,7 +691,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 3 edgeImitator.expectMessageAmount(1); - doPost("/api/alarm/" + savedAlarm.getId().getId().toString() + "/clear"); + doPost("/api/alarm/" + savedAlarm.getUuidId() + "/clear"); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); @@ -765,7 +704,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 4 edgeImitator.expectMessageAmount(1); - doDelete("/api/alarm/" + savedAlarm.getId().getId().toString()) + doDelete("/api/alarm/" + savedAlarm.getUuidId()) .andExpect(status().isOk()); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); @@ -776,13 +715,10 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(alarmUpdateMsg.getName(), savedAlarm.getName()); Assert.assertEquals(alarmUpdateMsg.getOriginatorName(), device.getName()); Assert.assertEquals(alarmUpdateMsg.getStatus(), AlarmStatus.CLEARED_ACK.name()); - - log.info("Alarms tested successfully"); } - private void testEntityView() throws Exception { - log.info("Testing EntityView"); - + @Test + public void testEntityView() throws Exception { // 1 edgeImitator.expectMessageAmount(1); Device device = findDeviceByName("Edge Device 1"); @@ -791,8 +727,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { entityView.setType("test"); entityView.setEntityId(device.getId()); EntityView savedEntityView = doPost("/api/entityView", entityView, EntityView.class); - doPost("/api/edge/" + edge.getId().getId().toString() - + "/entityView/" + savedEntityView.getId().getId().toString(), EntityView.class); + doPost("/api/edge/" + edge.getUuidId() + + "/entityView/" + savedEntityView.getUuidId(), EntityView.class); Assert.assertTrue(edgeImitator.waitForMessages()); verifyEntityViewUpdateMsg(savedEntityView, device); @@ -818,8 +754,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 3 edgeImitator.expectMessageAmount(1); - doDelete("/api/edge/" + edge.getId().getId().toString() - + "/entityView/" + savedEntityView.getId().getId().toString(), EntityView.class); + doDelete("/api/edge/" + edge.getUuidId() + + "/entityView/" + savedEntityView.getUuidId(), EntityView.class); Assert.assertTrue(edgeImitator.waitForMessages()); AbstractMessage latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof EntityViewUpdateMsg); @@ -830,11 +766,9 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { edgeImitator.expectMessageAmount(1); - doDelete("/api/entityView/" + savedEntityView.getId().getId().toString()) + doDelete("/api/entityView/" + savedEntityView.getUuidId()) .andExpect(status().isOk()); Assert.assertFalse(edgeImitator.waitForMessages(1)); - - log.info("EntityView tested successfully"); } private void verifyEntityViewUpdateMsg(EntityView entityView, Device device) { @@ -851,16 +785,15 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(entityViewUpdateMsg.getEntityType().name(), device.getId().getEntityType().name()); } - private void testCustomerAndNewUser() throws Exception { - log.info("Testing Customer"); - + @Test + public void testCustomerAndNewUser() throws Exception { // 1 edgeImitator.expectMessageAmount(1); Customer customer = new Customer(); customer.setTitle("Edge Customer 1"); Customer savedCustomer = doPost("/api/customer", customer, Customer.class); - doPost("/api/customer/" + savedCustomer.getId().getId().toString() - + "/edge/" + edge.getId().getId().toString(), Edge.class); + doPost("/api/customer/" + savedCustomer.getUuidId() + + "/edge/" + edge.getUuidId(), Edge.class); Assert.assertTrue(edgeImitator.waitForMessages()); AbstractMessage latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof CustomerUpdateMsg); @@ -893,7 +826,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 3 edgeImitator.expectMessageAmount(1); - doDelete("/api/customer/edge/" + edge.getId().getId().toString(), Edge.class); + doDelete("/api/customer/edge/" + edge.getUuidId(), Edge.class); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof CustomerUpdateMsg); @@ -903,16 +836,13 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(customerUpdateMsg.getIdLSB(), savedCustomer.getUuidId().getLeastSignificantBits()); edgeImitator.expectMessageAmount(1); - doDelete("/api/customer/" + savedCustomer.getId().getId().toString()) + doDelete("/api/customer/" + savedCustomer.getUuidId()) .andExpect(status().isOk()); Assert.assertFalse(edgeImitator.waitForMessages(1)); - - log.info("Customer tested successfully"); } - private void testWidgetsBundleAndWidgetType() throws Exception { - log.info("Testing WidgetsBundle and WidgetType"); - + @Test + public void testWidgetsBundleAndWidgetType() throws Exception { // 1 edgeImitator.expectMessageAmount(1); WidgetsBundle widgetsBundle = new WidgetsBundle(); @@ -951,7 +881,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 3 edgeImitator.expectMessageAmount(1); - doDelete("/api/widgetType/" + savedWidgetType.getId().getId().toString()) + doDelete("/api/widgetType/" + savedWidgetType.getUuidId()) .andExpect(status().isOk()); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); @@ -963,7 +893,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { // 4 edgeImitator.expectMessageAmount(1); - doDelete("/api/widgetsBundle/" + savedWidgetsBundle.getId().getId().toString()) + doDelete("/api/widgetsBundle/" + savedWidgetsBundle.getUuidId()) .andExpect(status().isOk()); Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); @@ -972,13 +902,10 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, widgetsBundleUpdateMsg.getMsgType()); Assert.assertEquals(widgetsBundleUpdateMsg.getIdMSB(), savedWidgetsBundle.getUuidId().getMostSignificantBits()); Assert.assertEquals(widgetsBundleUpdateMsg.getIdLSB(), savedWidgetsBundle.getUuidId().getLeastSignificantBits()); - - log.info("WidgetsBundle and WidgetType tested successfully"); } - private void testTimeseries() throws Exception { - log.info("Testing timeseries"); - + @Test + public void testTimeseries() throws Exception { edgeImitator.expectMessageAmount(1); Device device = findDeviceByName("Edge Device 1"); String timeseriesData = "{\"data\":{\"temperature\":25},\"ts\":" + System.currentTimeMillis() + "}"; @@ -1004,18 +931,15 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { TransportProtos.KeyValueProto keyValueProto = tsKvListProto.getKv(0); Assert.assertEquals("temperature", keyValueProto.getKey()); Assert.assertEquals(25, keyValueProto.getLongV()); - log.info("Timeseries tested successfully"); } - private void testAttributes() throws Exception { - log.info("Testing attributes"); + @Test + public void testAttributes() throws Exception { Device device = findDeviceByName("Edge Device 1"); testAttributesUpdatedMsg(device); testPostAttributesMsg(device); testAttributesDeleteMsg(device); - - log.info("Attributes tested successfully"); } private void testAttributesUpdatedMsg(Device device) throws JsonProcessingException, InterruptedException { @@ -1094,7 +1018,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals("key2", attributeDeleteMsg.getAttributeNames(1)); } - private void testRpcCall() throws Exception { + @Test + public void testRpcCall() throws Exception { Device device = findDeviceByName("Edge Device 1"); ObjectNode body = mapper.createObjectNode(); @@ -1117,9 +1042,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals("test_method", latestDeviceRpcCallMsg.getRequestMsg().getMethod()); } - private void testTimeseriesWithFailures() throws Exception { - log.info("Testing timeseries with failures"); - + @Test + public void testTimeseriesWithFailures() throws Exception { int numberOfTimeseriesToSend = 1000; edgeImitator.setRandomFailuresOnTimeseriesDownlink(true); @@ -1147,7 +1071,6 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { } edgeImitator.setRandomFailuresOnTimeseriesDownlink(false); - log.info("Timeseries with failures tested successfully"); } private boolean isIdxExistsInTheDownlinkList(int idx, List allTelemetryMsgs) { @@ -1165,25 +1088,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { return false; } - private void testSendMessagesToCloud() throws Exception { - log.info("Sending messages to cloud"); - sendDevice(); - sendDeviceWithNameThatAlreadyExistsOnCloud(); - sendRelationRequest(); - sendAlarm(); - sendTelemetry(); - sendRelation(); - sendDeleteDeviceOnEdge(); - sendRuleChainMetadataRequest(); - sendUserCredentialsRequest(); - sendDeviceCredentialsRequest(); - sendDeviceRpcResponse(); - sendDeviceCredentialsUpdate(); - sendAttributesRequest(); - log.info("Messages were sent successfully"); - } - - private void sendDevice() throws Exception { + @Test + public void testSendDeviceToCloud() throws Exception { UUID uuid = Uuids.timeBased(); UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); @@ -1218,7 +1124,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals("Edge Device 2", device.getName()); } - private void sendDeviceWithNameThatAlreadyExistsOnCloud() throws Exception { + @Test + public void testSendDeviceToCloudWithNameThatAlreadyExistsOnCloud() throws Exception { String deviceOnCloudName = RandomStringUtils.randomAlphanumeric(15); Device deviceOnCloud = saveDevice(deviceOnCloudName, "Default"); @@ -1270,7 +1177,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertNotEquals(deviceOnCloudName, device.getName()); } - private void sendRelationRequest() throws Exception { + @Test + public void testSendRelationRequestToCloud() throws Exception { Device device = findDeviceByName("Edge Device 1"); Asset asset = findAssetByName("Edge Asset 1"); @@ -1317,8 +1225,9 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(relation.getTypeGroup().name(), relationUpdateMsg.getTypeGroup()); } - private void sendAlarm() throws Exception { - Device device = findDeviceByName("Edge Device 2"); + @Test + public void testSendAlarmToCloud() throws Exception { + Device device = saveDeviceOnCloudAndVerifyDeliveryToEdge(); UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); AlarmUpdateMsg.Builder alarmUpdateMgBuilder = AlarmUpdateMsg.newBuilder(); @@ -1339,7 +1248,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { List alarms = doGetTypedWithPageLink("/api/alarm/{entityType}/{entityId}?", new TypeReference>() {}, - new PageLink(100), device.getId().getEntityType().name(), device.getId().getId().toString()) + new PageLink(100), device.getId().getEntityType().name(), device.getUuidId()) .getData(); Optional foundAlarm = alarms.stream().filter(alarm -> alarm.getType().equals("alarm from edge")).findAny(); Assert.assertTrue(foundAlarm.isPresent()); @@ -1349,12 +1258,9 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(AlarmSeverity.CRITICAL, alarmInfo.getSeverity()); } - private void sendTelemetry() throws Exception { - List edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?", - new TypeReference>() {}, new PageLink(100)).getData(); - Optional foundDevice = edgeDevices.stream().filter(device1 -> device1.getName().equals("Edge Device 2")).findAny(); - Assert.assertTrue(foundDevice.isPresent()); - Device device = foundDevice.get(); + @Test + public void testSendTelemetryToCloud() throws Exception { + Device device = saveDeviceOnCloudAndVerifyDeliveryToEdge(); edgeImitator.expectResponsesAmount(2); @@ -1402,7 +1308,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(1, timeseries.get(timeseriesKey).size()); Assert.assertEquals(timeseriesValue, timeseries.get(timeseriesKey).get(0).get("value")); - List> attributes = doGetAsyncTyped("/api/plugins/telemetry/DEVICE/" + device.getId() + "/values/attributes/" + DataConstants.SERVER_SCOPE, new TypeReference<>() {}); + String attributeValuesUrl = "/api/plugins/telemetry/DEVICE/" + device.getId() + "/values/attributes/" + DataConstants.SERVER_SCOPE; + List> attributes = doGetAsyncTyped(attributeValuesUrl, new TypeReference<>() {}); Assert.assertEquals(2, attributes.size()); var result = attributes.stream().filter(kv -> kv.get("key").equals(attributesKey)).filter(kv -> kv.get("value").equals(attributesValue)).findFirst(); Assert.assertTrue(result.isPresent()); @@ -1413,15 +1320,10 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { new TypeReference<>() {}); } - private void sendRelation() throws Exception { - List edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?", - new TypeReference>() {}, new PageLink(100)).getData(); - Optional foundDevice1 = edgeDevices.stream().filter(device1 -> device1.getName().equals("Edge Device 1")).findAny(); - Assert.assertTrue(foundDevice1.isPresent()); - Device device1 = foundDevice1.get(); - Optional foundDevice2 = edgeDevices.stream().filter(device2 -> device2.getName().equals("Edge Device 2")).findAny(); - Assert.assertTrue(foundDevice2.isPresent()); - Device device2 = foundDevice2.get(); + @Test + public void testSendRelationToCloud() throws Exception { + Device device1 = saveDeviceOnCloudAndVerifyDeliveryToEdge(); + Device device2 = saveDeviceOnCloudAndVerifyDeliveryToEdge(); UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); RelationUpdateMsg.Builder relationUpdateMsgBuilder = RelationUpdateMsg.newBuilder(); @@ -1444,17 +1346,18 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertTrue(edgeImitator.waitForResponses()); EntityRelation relation = doGet("/api/relation?" + - "&fromId=" + device2.getId().getId().toString() + + "&fromId=" + device2.getUuidId() + "&fromType=" + device2.getId().getEntityType().name() + "&relationType=" + "test" + "&relationTypeGroup=" + RelationTypeGroup.COMMON.name() + - "&toId=" + device1.getId().getId().toString() + + "&toId=" + device1.getUuidId() + "&toType=" + device1.getId().getEntityType().name(), EntityRelation.class); Assert.assertNotNull(relation); } - private void sendDeleteDeviceOnEdge() throws Exception { - Device device = findDeviceByName("Edge Device 2"); + @Test + public void testSendDeleteDeviceOnEdgeToCloud() throws Exception { + Device device = saveDeviceOnCloudAndVerifyDeliveryToEdge(); UplinkMsg.Builder upLinkMsgBuilder = UplinkMsg.newBuilder(); DeviceUpdateMsg.Builder deviceDeleteMsgBuilder = DeviceUpdateMsg.newBuilder(); deviceDeleteMsgBuilder.setMsgType(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE); @@ -1468,15 +1371,16 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { edgeImitator.expectResponsesAmount(1); edgeImitator.sendUplinkMsg(upLinkMsgBuilder.build()); Assert.assertTrue(edgeImitator.waitForResponses()); - device = doGet("/api/device/" + device.getId().getId().toString(), Device.class); + device = doGet("/api/device/" + device.getUuidId(), Device.class); Assert.assertNotNull(device); - List edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?", + List edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/devices?", new TypeReference>() { }, new PageLink(100)).getData(); Assert.assertFalse(edgeDevices.contains(device)); } - private void sendRuleChainMetadataRequest() throws Exception { + @Test + public void testSendRuleChainMetadataRequestToCloud() throws Exception { RuleChainId edgeRootRuleChainId = edge.getRootRuleChainId(); UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); @@ -1503,7 +1407,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { testAutoGeneratedCodeByProtobuf(ruleChainMetadataUpdateMsg); } - private void sendUserCredentialsRequest() throws Exception { + @Test + public void testSendUserCredentialsRequestToCloud() throws Exception { UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); UserCredentialsRequestMsg.Builder userCredentialsRequestMsgBuilder = UserCredentialsRequestMsg.newBuilder(); userCredentialsRequestMsgBuilder.setUserIdMSB(tenantAdmin.getId().getId().getMostSignificantBits()); @@ -1528,10 +1433,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { testAutoGeneratedCodeByProtobuf(userCredentialsUpdateMsg); } - private void sendDeviceCredentialsRequest() throws Exception { + @Test + public void testSendDeviceCredentialsRequestToCloud() throws Exception { Device device = findDeviceByName("Edge Device 1"); - DeviceCredentials deviceCredentials = doGet("/api/device/" + device.getId().getId().toString() + "/credentials", DeviceCredentials.class); + DeviceCredentials deviceCredentials = doGet("/api/device/" + device.getUuidId() + "/credentials", DeviceCredentials.class); UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); DeviceCredentialsRequestMsg.Builder deviceCredentialsRequestMsgBuilder = DeviceCredentialsRequestMsg.newBuilder(); @@ -1557,7 +1463,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertEquals(deviceCredentialsUpdateMsg.getCredentialsId(), deviceCredentials.getCredentialsId()); } - private void sendDeviceRpcResponse() throws Exception { + @Test + public void testSendDeviceRpcResponseToCloud() throws Exception { Device device = findDeviceByName("Edge Device 1"); UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); @@ -1582,7 +1489,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertTrue(edgeImitator.waitForResponses()); } - private void sendDeviceCredentialsUpdate() throws Exception { + @Test + public void testSendDeviceCredentialsUpdateToCloud() throws Exception { Device device = findDeviceByName("Edge Device 1"); UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); @@ -1601,24 +1509,30 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertTrue(edgeImitator.waitForResponses()); } - private void sendAttributesRequest() throws Exception { + @Test + public void testSendAttributesRequestToCloud() throws Exception { Device device = findDeviceByName("Edge Device 1"); - sendAttributesRequest(device, DataConstants.SERVER_SCOPE, "{\"key1\":\"value1\"}", - "key1", "value1", 2); - sendAttributesRequest(device, DataConstants.SHARED_SCOPE, "{\"key2\":\"value2\"}", - "key2", "value2", 1); + sendAttributesRequestAndVerify(device, DataConstants.SERVER_SCOPE, "{\"key1\":\"value1\"}", + "key1", "value1"); + sendAttributesRequestAndVerify(device, DataConstants.SHARED_SCOPE, "{\"key2\":\"value2\"}", + "key2", "value2"); } - private void sendAttributesRequest(Device device, String scope, String attributesDataStr, String expectedKey, - String expectedValue, int expectedSize) throws Exception { + private void sendAttributesRequestAndVerify(Device device, String scope, String attributesDataStr, String expectedKey, + String expectedValue) throws Exception { JsonNode attributesData = mapper.readTree(attributesDataStr); - doPost("/api/plugins/telemetry/DEVICE/" + device.getId().getId().toString() + "/attributes/" + scope, + doPost("/api/plugins/telemetry/DEVICE/" + device.getUuidId() + "/attributes/" + scope, attributesData); // Wait before device attributes saved to database before requesting them from edge - // queue used to save attributes to database - Thread.sleep(500); + Awaitility.await() + .atMost(10, TimeUnit.SECONDS) + .until(() -> { + String urlTemplate = "/api/plugins/telemetry/DEVICE/" + device.getId() + "/keys/attributes/" + scope; + List actualKeys = doGetAsyncTyped(urlTemplate, new TypeReference<>() {}); + return actualKeys != null && !actualKeys.isEmpty() && actualKeys.contains(expectedKey); + }); UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); AttributesRequestMsg.Builder attributesRequestMsgBuilder = AttributesRequestMsg.newBuilder(); @@ -1646,19 +1560,39 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { Assert.assertTrue(latestEntityDataMsg.hasAttributesUpdatedMsg()); TransportProtos.PostAttributeMsg attributesUpdatedMsg = latestEntityDataMsg.getAttributesUpdatedMsg(); - Assert.assertEquals(expectedSize, attributesUpdatedMsg.getKvList().size()); + + boolean found = false; for (TransportProtos.KeyValueProto keyValueProto : attributesUpdatedMsg.getKvList()) { if (keyValueProto.getKey().equals(expectedKey)) { Assert.assertEquals(expectedKey, keyValueProto.getKey()); Assert.assertEquals(expectedValue, keyValueProto.getStringV()); + found = true; } } + Assert.assertTrue("Expected key and value must be found", found); } // Utility methods + private Device saveDeviceOnCloudAndVerifyDeliveryToEdge() throws Exception { + edgeImitator.expectMessageAmount(1); + Device savedDevice = saveDevice(RandomStringUtils.randomAlphanumeric(15), "Default"); + doPost("/api/edge/" + edge.getUuidId() + + "/device/" + savedDevice.getUuidId(), Device.class); + Assert.assertTrue(edgeImitator.waitForMessages()); + AbstractMessage latestMessage = edgeImitator.getLatestMessage(); + Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); + DeviceUpdateMsg deviceUpdateMsg = (DeviceUpdateMsg) latestMessage; + Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceUpdateMsg.getMsgType()); + Assert.assertEquals(deviceUpdateMsg.getIdMSB(), savedDevice.getUuidId().getMostSignificantBits()); + Assert.assertEquals(deviceUpdateMsg.getIdLSB(), savedDevice.getUuidId().getLeastSignificantBits()); + Assert.assertEquals(deviceUpdateMsg.getName(), savedDevice.getName()); + Assert.assertEquals(deviceUpdateMsg.getType(), savedDevice.getType()); + return savedDevice; + } + private Device findDeviceByName(String deviceName) throws Exception { - List edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?", + List edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/devices?", new TypeReference>() { }, new PageLink(100)).getData(); Optional foundDevice = edgeDevices.stream().filter(d -> d.getName().equals(deviceName)).findAny(); @@ -1669,7 +1603,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { } private Asset findAssetByName(String assetName) throws Exception { - List edgeAssets = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/assets?", + List edgeAssets = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/assets?", new TypeReference>() { }, new PageLink(100)).getData();