Merge pull request #7044 from volodymyr-babak/bug/edge-firmware-id-missing
[3.4.1] Firmware ID not synced from cloud to edge in device / device profiles
This commit is contained in:
commit
d24e399ae0
@ -59,6 +59,10 @@ public class DeviceMsgConstructor {
|
||||
if (device.getAdditionalInfo() != null) {
|
||||
builder.setAdditionalInfo(JacksonUtil.toString(device.getAdditionalInfo()));
|
||||
}
|
||||
if (device.getFirmwareId() != null) {
|
||||
builder.setFirmwareIdMSB(device.getFirmwareId().getId().getMostSignificantBits())
|
||||
.setFirmwareIdLSB(device.getFirmwareId().getId().getLeastSignificantBits());
|
||||
}
|
||||
if (conflictName != null) {
|
||||
builder.setConflictName(conflictName);
|
||||
}
|
||||
|
||||
@ -20,9 +20,9 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
||||
import org.thingsboard.server.queue.util.DataDecodingEncodingService;
|
||||
import org.thingsboard.server.gen.edge.v1.DeviceProfileUpdateMsg;
|
||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
|
||||
import org.thingsboard.server.queue.util.DataDecodingEncodingService;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@ -66,6 +66,10 @@ public class DeviceProfileMsgConstructor {
|
||||
if (deviceProfile.getImage() != null) {
|
||||
builder.setImage(ByteString.copyFrom(deviceProfile.getImage().getBytes(StandardCharsets.UTF_8)));
|
||||
}
|
||||
if (deviceProfile.getFirmwareId() != null) {
|
||||
builder.setFirmwareIdMSB(deviceProfile.getFirmwareId().getId().getMostSignificantBits())
|
||||
.setFirmwareIdLSB(deviceProfile.getFirmwareId().getId().getLeastSignificantBits());
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
||||
@ -33,13 +33,16 @@ public class OtaPackageMsgConstructor {
|
||||
.setMsgType(msgType)
|
||||
.setIdMSB(otaPackage.getId().getId().getMostSignificantBits())
|
||||
.setIdLSB(otaPackage.getId().getId().getLeastSignificantBits())
|
||||
.setDeviceProfileIdMSB(otaPackage.getDeviceProfileId().getId().getMostSignificantBits())
|
||||
.setDeviceProfileIdLSB(otaPackage.getDeviceProfileId().getId().getLeastSignificantBits())
|
||||
.setType(otaPackage.getType().name())
|
||||
.setTitle(otaPackage.getTitle())
|
||||
.setVersion(otaPackage.getVersion())
|
||||
.setTag(otaPackage.getTag());
|
||||
|
||||
if (otaPackage.getDeviceProfileId() != null) {
|
||||
builder.setDeviceProfileIdMSB(otaPackage.getDeviceProfileId().getId().getMostSignificantBits())
|
||||
.setDeviceProfileIdLSB(otaPackage.getDeviceProfileId().getId().getLeastSignificantBits());
|
||||
}
|
||||
|
||||
if (otaPackage.getUrl() != null) {
|
||||
builder.setUrl(otaPackage.getUrl());
|
||||
}
|
||||
|
||||
@ -71,10 +71,10 @@ import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventType;
|
||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
||||
import org.thingsboard.server.common.data.id.EdgeId;
|
||||
import org.thingsboard.server.common.data.id.EntityId;
|
||||
import org.thingsboard.server.common.data.id.EntityIdFactory;
|
||||
import org.thingsboard.server.common.data.id.QueueId;
|
||||
import org.thingsboard.server.common.data.id.RuleChainId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.ota.ChecksumAlgorithm;
|
||||
@ -207,13 +207,6 @@ abstract public class BaseEdgeTest extends AbstractControllerTest {
|
||||
verifyEdgeConnectionAndInitialData();
|
||||
}
|
||||
|
||||
private QueueId getRandomQueueId() throws Exception {
|
||||
List<Queue> ruleEngineQueues = doGetTypedWithPageLink("/api/queues?serviceType={serviceType}&",
|
||||
new TypeReference<PageData<Queue>>() {}, new PageLink(100), ServiceType.TB_RULE_ENGINE.name())
|
||||
.getData();
|
||||
return ruleEngineQueues.get(0).getId();
|
||||
}
|
||||
|
||||
@After
|
||||
public void afterTest() throws Exception {
|
||||
try {
|
||||
@ -388,6 +381,21 @@ abstract public class BaseEdgeTest extends AbstractControllerTest {
|
||||
Assert.assertEquals(deviceProfileUpdateMsg.getIdLSB(), deviceProfile.getUuidId().getLeastSignificantBits());
|
||||
|
||||
// 2
|
||||
OtaPackageInfo firmwareOtaPackageInfo = saveOtaPackageInfo(deviceProfile.getId());
|
||||
edgeImitator.expectMessageAmount(1);
|
||||
Assert.assertTrue(edgeImitator.waitForMessages());
|
||||
|
||||
deviceProfile.setFirmwareId(firmwareOtaPackageInfo.getId());
|
||||
edgeImitator.expectMessageAmount(1);
|
||||
deviceProfile = doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class);
|
||||
Assert.assertTrue(edgeImitator.waitForMessages());
|
||||
latestMessage = edgeImitator.getLatestMessage();
|
||||
Assert.assertTrue(latestMessage instanceof DeviceProfileUpdateMsg);
|
||||
deviceProfileUpdateMsg = (DeviceProfileUpdateMsg) latestMessage;
|
||||
Assert.assertEquals(firmwareOtaPackageInfo.getUuidId().getMostSignificantBits(), deviceProfileUpdateMsg.getFirmwareIdMSB());
|
||||
Assert.assertEquals(firmwareOtaPackageInfo.getUuidId().getLeastSignificantBits(), deviceProfileUpdateMsg.getFirmwareIdLSB());
|
||||
|
||||
// 3
|
||||
edgeImitator.expectMessageAmount(1);
|
||||
doDelete("/api/deviceProfile/" + deviceProfile.getUuidId())
|
||||
.andExpect(status().isOk());
|
||||
@ -1867,18 +1875,30 @@ abstract public class BaseEdgeTest extends AbstractControllerTest {
|
||||
|
||||
private Device saveDeviceOnCloudAndVerifyDeliveryToEdge() throws Exception {
|
||||
edgeImitator.expectMessageAmount(1);
|
||||
Device savedDevice = saveDevice(RandomStringUtils.randomAlphanumeric(15), "Default");
|
||||
OtaPackageInfo firmwareOtaPackageInfo = saveOtaPackageInfo(thermostatDeviceProfile.getId());
|
||||
Assert.assertTrue(edgeImitator.waitForMessages());
|
||||
|
||||
Device savedDevice = saveDevice(RandomStringUtils.randomAlphanumeric(15), thermostatDeviceProfile.getName());
|
||||
savedDevice.setFirmwareId(firmwareOtaPackageInfo.getId());
|
||||
savedDevice = doPost("/api/device", savedDevice, Device.class);
|
||||
|
||||
// wait until device UPDATED event is sent to edge notification service
|
||||
// to avoid edge notification service to send device UPDATED event before ASSIGNED_TO_EDGE
|
||||
Thread.sleep(500);
|
||||
|
||||
edgeImitator.expectMessageAmount(1);
|
||||
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());
|
||||
Assert.assertEquals(firmwareOtaPackageInfo.getUuidId().getMostSignificantBits(), deviceUpdateMsg.getFirmwareIdMSB());
|
||||
Assert.assertEquals(firmwareOtaPackageInfo.getUuidId().getLeastSignificantBits(), deviceUpdateMsg.getFirmwareIdLSB());
|
||||
return savedDevice;
|
||||
}
|
||||
|
||||
@ -1904,7 +1924,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest {
|
||||
return asset;
|
||||
}
|
||||
|
||||
private Device saveDevice(String deviceName, String type) throws Exception {
|
||||
private Device saveDevice(String deviceName, String type) {
|
||||
Device device = new Device();
|
||||
device.setName(deviceName);
|
||||
device.setType(type);
|
||||
@ -1918,6 +1938,20 @@ abstract public class BaseEdgeTest extends AbstractControllerTest {
|
||||
return doPost("/api/asset", asset, Asset.class);
|
||||
}
|
||||
|
||||
private OtaPackageInfo saveOtaPackageInfo(DeviceProfileId deviceProfileId) {
|
||||
SaveOtaPackageInfoRequest firmwareInfo = new SaveOtaPackageInfoRequest();
|
||||
firmwareInfo.setDeviceProfileId(deviceProfileId);
|
||||
firmwareInfo.setType(FIRMWARE);
|
||||
firmwareInfo.setTitle("Firmware Edge " + RandomStringUtils.randomAlphanumeric(3));
|
||||
firmwareInfo.setVersion("v1.0");
|
||||
firmwareInfo.setTag("My firmware #1 v1.0");
|
||||
firmwareInfo.setUsesUrl(true);
|
||||
firmwareInfo.setUrl("http://localhost:8080/v1/package");
|
||||
firmwareInfo.setAdditionalInfo(JacksonUtil.newObjectNode());
|
||||
firmwareInfo.setChecksumAlgorithm(ChecksumAlgorithm.SHA256);
|
||||
return doPost("/api/otaPackage", firmwareInfo, OtaPackageInfo.class);
|
||||
}
|
||||
|
||||
private EdgeEvent constructEdgeEvent(TenantId tenantId, EdgeId edgeId, EdgeEventActionType edgeEventAction, UUID entityId, EdgeEventType edgeEventType, JsonNode entityBody) {
|
||||
EdgeEvent edgeEvent = new EdgeEvent();
|
||||
edgeEvent.setEdgeId(edgeId);
|
||||
|
||||
@ -198,6 +198,8 @@ message DeviceUpdateMsg {
|
||||
optional string label = 10;
|
||||
optional string additionalInfo = 11;
|
||||
optional string conflictName = 12;
|
||||
optional int64 firmwareIdMSB = 13;
|
||||
optional int64 firmwareIdLSB = 14;
|
||||
}
|
||||
|
||||
message DeviceProfileUpdateMsg {
|
||||
@ -216,6 +218,8 @@ message DeviceProfileUpdateMsg {
|
||||
bytes profileDataBytes = 13;
|
||||
optional string provisionDeviceKey = 14;
|
||||
optional bytes image = 15;
|
||||
optional int64 firmwareIdMSB = 16;
|
||||
optional int64 firmwareIdLSB = 17;
|
||||
}
|
||||
|
||||
message DeviceCredentialsUpdateMsg {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user