|
|
|
@ -26,7 +26,6 @@ import com.google.protobuf.AbstractMessage; |
|
|
|
import com.google.protobuf.ByteString; |
|
|
|
import com.google.protobuf.InvalidProtocolBufferException; |
|
|
|
import com.google.protobuf.MessageLite; |
|
|
|
import org.apache.commons.lang3.RandomStringUtils; |
|
|
|
import org.awaitility.Awaitility; |
|
|
|
import org.junit.After; |
|
|
|
import org.junit.Assert; |
|
|
|
@ -48,6 +47,7 @@ import org.thingsboard.server.common.data.EntityType; |
|
|
|
import org.thingsboard.server.common.data.EntityView; |
|
|
|
import org.thingsboard.server.common.data.OtaPackageInfo; |
|
|
|
import org.thingsboard.server.common.data.SaveOtaPackageInfoRequest; |
|
|
|
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.User; |
|
|
|
@ -201,12 +201,36 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
|
|
|
installation(); |
|
|
|
|
|
|
|
edgeImitator = new EdgeImitator("localhost", 7070, edge.getRoutingKey(), edge.getSecret()); |
|
|
|
edgeImitator.expectMessageAmount(14); |
|
|
|
edgeImitator.expectMessageAmount(15); |
|
|
|
edgeImitator.connect(); |
|
|
|
|
|
|
|
requestEdgeRuleChainMetadata(); |
|
|
|
|
|
|
|
verifyEdgeConnectionAndInitialData(); |
|
|
|
} |
|
|
|
|
|
|
|
private void requestEdgeRuleChainMetadata() throws Exception { |
|
|
|
RuleChainId rootRuleChainId = getEdgeRootRuleChainId(); |
|
|
|
RuleChainMetadataRequestMsg.Builder builder = RuleChainMetadataRequestMsg.newBuilder() |
|
|
|
.setRuleChainIdMSB(rootRuleChainId.getId().getMostSignificantBits()) |
|
|
|
.setRuleChainIdLSB(rootRuleChainId.getId().getLeastSignificantBits()); |
|
|
|
testAutoGeneratedCodeByProtobuf(builder); |
|
|
|
UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder() |
|
|
|
.addRuleChainMetadataRequestMsg(builder.build()); |
|
|
|
edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
|
|
|
} |
|
|
|
|
|
|
|
private RuleChainId getEdgeRootRuleChainId() throws Exception { |
|
|
|
List<RuleChain> edgeRuleChains = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/ruleChains?", |
|
|
|
new TypeReference<PageData<RuleChain>>() {}, new PageLink(100)).getData(); |
|
|
|
for (RuleChain edgeRuleChain : edgeRuleChains) { |
|
|
|
if (edgeRuleChain.isRoot()) { |
|
|
|
return edgeRuleChain.getId(); |
|
|
|
} |
|
|
|
} |
|
|
|
throw new RuntimeException("Root rule chain not found"); |
|
|
|
} |
|
|
|
|
|
|
|
@After |
|
|
|
public void afterTest() throws Exception { |
|
|
|
try { |
|
|
|
@ -281,7 +305,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
|
|
|
DeviceUpdateMsg deviceUpdateMsg = deviceUpdateMsgOpt.get(); |
|
|
|
Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceUpdateMsg.getMsgType()); |
|
|
|
UUID deviceUUID = new UUID(deviceUpdateMsg.getIdMSB(), deviceUpdateMsg.getIdLSB()); |
|
|
|
Device device = doGet("/api/device/" + deviceUUID.toString(), Device.class); |
|
|
|
Device device = doGet("/api/device/" + deviceUUID, Device.class); |
|
|
|
Assert.assertNotNull(device); |
|
|
|
List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/devices?", |
|
|
|
new TypeReference<PageData<Device>>() {}, new PageLink(100)).getData(); |
|
|
|
@ -295,7 +319,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
|
|
|
DeviceProfileUpdateMsg deviceProfileUpdateMsg = deviceProfileUpdateMsgOpt.get(); |
|
|
|
Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceProfileUpdateMsg.getMsgType()); |
|
|
|
UUID deviceProfileUUID = new UUID(deviceProfileUpdateMsg.getIdMSB(), deviceProfileUpdateMsg.getIdLSB()); |
|
|
|
DeviceProfile deviceProfile = doGet("/api/deviceProfile/" + deviceProfileUUID.toString(), DeviceProfile.class); |
|
|
|
DeviceProfile deviceProfile = doGet("/api/deviceProfile/" + deviceProfileUUID, DeviceProfile.class); |
|
|
|
Assert.assertNotNull(deviceProfile); |
|
|
|
Assert.assertNotNull(deviceProfile.getProfileData()); |
|
|
|
Assert.assertNotNull(deviceProfile.getProfileData().getAlarms()); |
|
|
|
@ -321,7 +345,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
|
|
|
RuleChainUpdateMsg ruleChainUpdateMsg = ruleChainUpdateMsgOpt.get(); |
|
|
|
Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, ruleChainUpdateMsg.getMsgType()); |
|
|
|
UUID ruleChainUUID = new UUID(ruleChainUpdateMsg.getIdMSB(), ruleChainUpdateMsg.getIdLSB()); |
|
|
|
RuleChain ruleChain = doGet("/api/ruleChain/" + ruleChainUUID.toString(), RuleChain.class); |
|
|
|
RuleChain ruleChain = doGet("/api/ruleChain/" + ruleChainUUID, RuleChain.class); |
|
|
|
Assert.assertNotNull(ruleChain); |
|
|
|
List<RuleChain> edgeRuleChains = doGetTypedWithPageLink("/api/edge/" + edge.getUuidId() + "/ruleChains?", |
|
|
|
new TypeReference<PageData<RuleChain>>() {}, new PageLink(100)).getData(); |
|
|
|
@ -329,6 +353,13 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
|
|
|
|
|
|
|
testAutoGeneratedCodeByProtobuf(ruleChainUpdateMsg); |
|
|
|
|
|
|
|
Optional<RuleChainMetadataUpdateMsg> ruleChainMetadataUpdateOpt = edgeImitator.findMessageByType(RuleChainMetadataUpdateMsg.class); |
|
|
|
Assert.assertTrue(ruleChainMetadataUpdateOpt.isPresent()); |
|
|
|
RuleChainMetadataUpdateMsg ruleChainMetadataUpdateMsg = ruleChainMetadataUpdateOpt.get(); |
|
|
|
Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, ruleChainMetadataUpdateMsg.getMsgType()); |
|
|
|
Assert.assertEquals(ruleChainUpdateMsg.getIdMSB(), ruleChainMetadataUpdateMsg.getRuleChainIdMSB()); |
|
|
|
Assert.assertEquals(ruleChainUpdateMsg.getIdLSB(), ruleChainMetadataUpdateMsg.getRuleChainIdLSB()); |
|
|
|
|
|
|
|
validateAdminSettings(); |
|
|
|
} |
|
|
|
|
|
|
|
@ -1233,7 +1264,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSendDeviceToCloudWithNameThatAlreadyExistsOnCloud() throws Exception { |
|
|
|
String deviceOnCloudName = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String deviceOnCloudName = StringUtils.randomAlphanumeric(15); |
|
|
|
Device deviceOnCloud = saveDevice(deviceOnCloudName, "Default"); |
|
|
|
|
|
|
|
UUID uuid = Uuids.timeBased(); |
|
|
|
@ -1878,7 +1909,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
|
|
|
OtaPackageInfo firmwareOtaPackageInfo = saveOtaPackageInfo(thermostatDeviceProfile.getId()); |
|
|
|
Assert.assertTrue(edgeImitator.waitForMessages()); |
|
|
|
|
|
|
|
Device savedDevice = saveDevice(RandomStringUtils.randomAlphanumeric(15), thermostatDeviceProfile.getName()); |
|
|
|
Device savedDevice = saveDevice(StringUtils.randomAlphanumeric(15), thermostatDeviceProfile.getName()); |
|
|
|
savedDevice.setFirmwareId(firmwareOtaPackageInfo.getId()); |
|
|
|
savedDevice = doPost("/api/device", savedDevice, Device.class); |
|
|
|
|
|
|
|
@ -1942,7 +1973,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
|
|
|
SaveOtaPackageInfoRequest firmwareInfo = new SaveOtaPackageInfoRequest(); |
|
|
|
firmwareInfo.setDeviceProfileId(deviceProfileId); |
|
|
|
firmwareInfo.setType(FIRMWARE); |
|
|
|
firmwareInfo.setTitle("Firmware Edge " + RandomStringUtils.randomAlphanumeric(3)); |
|
|
|
firmwareInfo.setTitle("Firmware Edge " + StringUtils.randomAlphanumeric(3)); |
|
|
|
firmwareInfo.setVersion("v1.0"); |
|
|
|
firmwareInfo.setTag("My firmware #1 v1.0"); |
|
|
|
firmwareInfo.setUsesUrl(true); |
|
|
|
|