|
|
|
@ -71,6 +71,7 @@ import org.thingsboard.server.common.data.query.NumericFilterPredicate; |
|
|
|
import org.thingsboard.server.common.data.queue.Queue; |
|
|
|
import org.thingsboard.server.common.data.rule.RuleChain; |
|
|
|
import org.thingsboard.server.common.data.rule.RuleChainType; |
|
|
|
import org.thingsboard.server.common.data.security.model.JwtSettings; |
|
|
|
import org.thingsboard.server.controller.AbstractControllerTest; |
|
|
|
import org.thingsboard.server.dao.edge.EdgeEventService; |
|
|
|
import org.thingsboard.server.edge.imitator.EdgeImitator; |
|
|
|
@ -98,6 +99,7 @@ import java.util.List; |
|
|
|
import java.util.Optional; |
|
|
|
import java.util.TreeMap; |
|
|
|
import java.util.UUID; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
|
|
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
|
|
|
|
|
|
|
@ -127,6 +129,13 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest { |
|
|
|
|
|
|
|
@Before |
|
|
|
public void setupEdgeTest() throws Exception { |
|
|
|
loginSysAdmin(); |
|
|
|
|
|
|
|
// get jwt settings from yaml config
|
|
|
|
JwtSettings settings = doGet("/api/admin/jwtSettings", JwtSettings.class); |
|
|
|
// save jwt settings into db
|
|
|
|
doPost("/api/admin/jwtSettings", settings).andExpect(status().isOk()); |
|
|
|
|
|
|
|
loginTenantAdmin(); |
|
|
|
|
|
|
|
installation(); |
|
|
|
@ -173,7 +182,7 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest { |
|
|
|
} catch (Exception ignored) {} |
|
|
|
} |
|
|
|
|
|
|
|
private void installation() { |
|
|
|
private void installation() throws Exception { |
|
|
|
thermostatDeviceProfile = this.createDeviceProfile(THERMOSTAT_DEVICE_PROFILE_NAME, |
|
|
|
createMqttDeviceProfileTransportConfiguration(new JsonTransportPayloadConfiguration(), false)); |
|
|
|
extendDeviceProfileData(thermostatDeviceProfile); |
|
|
|
@ -189,6 +198,9 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest { |
|
|
|
+ "/device/" + savedDevice.getUuidId(), Device.class); |
|
|
|
doPost("/api/edge/" + edge.getUuidId() |
|
|
|
+ "/asset/" + savedAsset.getUuidId(), Asset.class); |
|
|
|
|
|
|
|
// wait until assign device and asset events are fully processed by edge notification service
|
|
|
|
TimeUnit.MILLISECONDS.sleep(500); |
|
|
|
} |
|
|
|
|
|
|
|
protected void extendDeviceProfileData(DeviceProfile deviceProfile) { |
|
|
|
@ -237,25 +249,23 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest { |
|
|
|
validateMsgsCnt(RuleChainMetadataUpdateMsg.class, 1); |
|
|
|
validateRuleChainMetadataUpdates(ruleChainUUID); |
|
|
|
|
|
|
|
// 4 messages
|
|
|
|
// - 2 from fetcher - system level ('mail', 'mailTemplates')
|
|
|
|
// - 2 from fetcher - admin level ('mail', 'mailTemplates')
|
|
|
|
// 4 messages ('general', 'mail', 'connectivity', 'jwt)
|
|
|
|
validateMsgsCnt(AdminSettingsUpdateMsg.class, 4); |
|
|
|
validateAdminSettings(); |
|
|
|
validateAdminSettings(4); |
|
|
|
|
|
|
|
// 4 messages
|
|
|
|
// - 1 from default profile fetcher
|
|
|
|
// - 2 from device profile fetcher (default and thermostat)
|
|
|
|
// - 1 from device fetcher
|
|
|
|
validateMsgsCnt(DeviceProfileUpdateMsg.class, 4); |
|
|
|
validateDeviceProfiles(); |
|
|
|
validateDeviceProfiles(4); |
|
|
|
|
|
|
|
// 3 messages
|
|
|
|
// - 1 from default profile fetcher
|
|
|
|
// - 1 message from asset profile fetcher
|
|
|
|
// - 1 message from asset fetcher
|
|
|
|
validateMsgsCnt(AssetProfileUpdateMsg.class, 3); |
|
|
|
validateAssetProfiles(); |
|
|
|
validateAssetProfiles(3); |
|
|
|
|
|
|
|
// 1 from device fetcher
|
|
|
|
validateMsgsCnt(DeviceUpdateMsg.class, 1); |
|
|
|
@ -326,13 +336,13 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest { |
|
|
|
testAutoGeneratedCodeByProtobuf(tenantProfileUpdateMsg); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateDeviceProfiles() throws Exception { |
|
|
|
private void validateDeviceProfiles(int expectedMsgCnt) throws Exception { |
|
|
|
List<DeviceProfileUpdateMsg> deviceProfileUpdateMsgList = edgeImitator.findAllMessagesByType(DeviceProfileUpdateMsg.class); |
|
|
|
// default msg default device profile from fetcher
|
|
|
|
// default msg device profile from fetcher
|
|
|
|
// thermostat msg from device profile fetcher
|
|
|
|
// thermostat msg from device fetcher
|
|
|
|
Assert.assertEquals(4, deviceProfileUpdateMsgList.size()); |
|
|
|
Assert.assertEquals(expectedMsgCnt, deviceProfileUpdateMsgList.size()); |
|
|
|
Optional<DeviceProfileUpdateMsg> thermostatProfileUpdateMsgOpt = |
|
|
|
deviceProfileUpdateMsgList.stream().filter(dfum -> THERMOSTAT_DEVICE_PROFILE_NAME.equals(dfum.getName())).findAny(); |
|
|
|
Assert.assertTrue(thermostatProfileUpdateMsgOpt.isPresent()); |
|
|
|
@ -413,20 +423,28 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest { |
|
|
|
Assert.assertEquals(expectedRuleChainUUID, ruleChainUUID); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateAdminSettings() { |
|
|
|
private void validateAdminSettings(int expectedMsgCnt) { |
|
|
|
List<AdminSettingsUpdateMsg> adminSettingsUpdateMsgs = edgeImitator.findAllMessagesByType(AdminSettingsUpdateMsg.class); |
|
|
|
Assert.assertEquals(4, adminSettingsUpdateMsgs.size()); |
|
|
|
Assert.assertEquals(expectedMsgCnt, adminSettingsUpdateMsgs.size()); |
|
|
|
|
|
|
|
for (AdminSettingsUpdateMsg adminSettingsUpdateMsg : adminSettingsUpdateMsgs) { |
|
|
|
if (adminSettingsUpdateMsg.getKey().equals("general")) { |
|
|
|
validateGeneralAdminSettings(adminSettingsUpdateMsg); |
|
|
|
} |
|
|
|
if (adminSettingsUpdateMsg.getKey().equals("mail")) { |
|
|
|
validateMailAdminSettings(adminSettingsUpdateMsg); |
|
|
|
} |
|
|
|
if (adminSettingsUpdateMsg.getKey().equals("mailTemplates")) { |
|
|
|
validateMailTemplatesAdminSettings(adminSettingsUpdateMsg); |
|
|
|
if (adminSettingsUpdateMsg.getKey().equals("connectivity")) { |
|
|
|
validateConnectivityAdminSettings(adminSettingsUpdateMsg); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void validateGeneralAdminSettings(AdminSettingsUpdateMsg adminSettingsUpdateMsg) { |
|
|
|
JsonNode jsonNode = JacksonUtil.toJsonNode(adminSettingsUpdateMsg.getJsonValue()); |
|
|
|
Assert.assertNotNull(jsonNode.get("baseUrl")); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateMailAdminSettings(AdminSettingsUpdateMsg adminSettingsUpdateMsg) { |
|
|
|
JsonNode jsonNode = JacksonUtil.toJsonNode(adminSettingsUpdateMsg.getJsonValue()); |
|
|
|
Assert.assertNotNull(jsonNode.get("mailFrom")); |
|
|
|
@ -436,19 +454,19 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest { |
|
|
|
Assert.assertNotNull(jsonNode.get("timeout")); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateMailTemplatesAdminSettings(AdminSettingsUpdateMsg adminSettingsUpdateMsg) { |
|
|
|
private void validateConnectivityAdminSettings(AdminSettingsUpdateMsg adminSettingsUpdateMsg) { |
|
|
|
JsonNode jsonNode = JacksonUtil.toJsonNode(adminSettingsUpdateMsg.getJsonValue()); |
|
|
|
Assert.assertNotNull(jsonNode.get("accountActivated")); |
|
|
|
Assert.assertNotNull(jsonNode.get("accountLockout")); |
|
|
|
Assert.assertNotNull(jsonNode.get("activation")); |
|
|
|
Assert.assertNotNull(jsonNode.get("passwordWasReset")); |
|
|
|
Assert.assertNotNull(jsonNode.get("resetPassword")); |
|
|
|
Assert.assertNotNull(jsonNode.get("test")); |
|
|
|
Assert.assertNotNull(jsonNode.get("http")); |
|
|
|
Assert.assertNotNull(jsonNode.get("https")); |
|
|
|
Assert.assertNotNull(jsonNode.get("mqtt")); |
|
|
|
Assert.assertNotNull(jsonNode.get("mqtts")); |
|
|
|
Assert.assertNotNull(jsonNode.get("coap")); |
|
|
|
Assert.assertNotNull(jsonNode.get("coaps")); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateAssetProfiles() throws Exception { |
|
|
|
private void validateAssetProfiles(int expectedMsgCnt) throws Exception { |
|
|
|
List<AssetProfileUpdateMsg> assetProfileUpdateMsgs = edgeImitator.findAllMessagesByType(AssetProfileUpdateMsg.class); |
|
|
|
Assert.assertEquals(3, assetProfileUpdateMsgs.size()); |
|
|
|
Assert.assertEquals(expectedMsgCnt, assetProfileUpdateMsgs.size()); |
|
|
|
AssetProfileUpdateMsg assetProfileUpdateMsg = assetProfileUpdateMsgs.get(0); |
|
|
|
Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, assetProfileUpdateMsg.getMsgType()); |
|
|
|
UUID assetProfileUUID = new UUID(assetProfileUpdateMsg.getIdMSB(), assetProfileUpdateMsg.getIdLSB()); |
|
|
|
|