diff --git a/application/src/test/java/org/thingsboard/server/edge/AbstractEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/AbstractEdgeTest.java index 1ce8e3810d..bfe6eb8190 100644 --- a/application/src/test/java/org/thingsboard/server/edge/AbstractEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/AbstractEdgeTest.java @@ -17,8 +17,10 @@ package org.thingsboard.server.edge; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; +import com.google.protobuf.AbstractMessage; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.MessageLite; +import lombok.extern.slf4j.Slf4j; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -104,6 +106,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. "queue.rule-engine.stats.enabled=false", "edges.storage.sleep_between_batches=1000" }) +@Slf4j abstract public class AbstractEdgeTest extends AbstractControllerTest { private static final String THERMOSTAT_DEVICE_PROFILE_NAME = "Thermostat"; @@ -223,53 +226,77 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest { validateEdgeConfiguration(); // 1 message from queue fetcher + validateMsgsCnt(QueueUpdateMsg.class, 1); validateQueues(); // 1 from rule chain fetcher + validateMsgsCnt(RuleChainUpdateMsg.class, 1); UUID ruleChainUUID = validateRuleChains(); // 1 from request message + validateMsgsCnt(RuleChainMetadataUpdateMsg.class, 1); validateRuleChainMetadataUpdates(ruleChainUUID); // 4 messages // - 2 from fetcher - system level ('mail', 'mailTemplates') // - 2 from fetcher - admin level ('mail', 'mailTemplates') + validateMsgsCnt(AdminSettingsUpdateMsg.class, 4); validateAdminSettings(); // 4 messages // - 1 from default profile fetcher // - 2 from device profile fetcher (default and thermostat) // - 1 from device fetcher + validateMsgsCnt(DeviceProfileUpdateMsg.class, 4); validateDeviceProfiles(); // 3 messages // - 1 from default profile fetcher // - 1 message from asset profile fetcher // - 1 message from asset fetcher + validateMsgsCnt(AssetProfileUpdateMsg.class, 3); validateAssetProfiles(); // 1 from device fetcher + validateMsgsCnt(DeviceUpdateMsg.class, 1); validateDevices(); // 1 from asset fetcher + validateMsgsCnt(AssetUpdateMsg.class, 1); validateAssets(); // 1 message from public customer fetcher + validateMsgsCnt(CustomerUpdateMsg.class, 1); validatePublicCustomer(); // 1 message from user fetcher + validateMsgsCnt(UserUpdateMsg.class, 1); validateUsers(); // 1 from tenant fetcher + validateMsgsCnt(TenantUpdateMsg.class, 1); validateTenant(); // 1 from tenant profile fetcher + validateMsgsCnt(TenantProfileUpdateMsg.class, 1); validateTenantProfile(); // 1 message sync completed + validateMsgsCnt(SyncCompletedMsg.class, 1); validateSyncCompleted(); } + private void validateMsgsCnt(Class clazz, int expectedMsgCnt) { + List downlinkMsgsByType = edgeImitator.findAllMessagesByType(clazz); + if (downlinkMsgsByType.size() != expectedMsgCnt) { + List downlinkMsgs = edgeImitator.getDownlinkMsgs(); + for (AbstractMessage downlinkMsg : downlinkMsgs) { + log.error("{}\n{}", downlinkMsg.getClass(), downlinkMsg); + } + Assert.fail("Unexpected message count for " + clazz + "! Expected: " + expectedMsgCnt + ", but found: " + downlinkMsgsByType.size()); + } + } + private void validateEdgeConfiguration() throws Exception { EdgeConfiguration configuration = edgeImitator.getConfiguration(); Assert.assertNotNull(configuration);