lwm2m: add test SW with objectId = 19
This commit is contained in:
parent
cf69df895f
commit
452699a4fe
@ -56,6 +56,7 @@ public abstract class AbstractOtaLwM2MIntegrationTest extends AbstractLwM2MInteg
|
||||
protected static final String CLIENT_ENDPOINT_WITHOUT_FW_INFO = "WithoutFirmwareInfoDevice";
|
||||
protected static final String CLIENT_ENDPOINT_OTA5 = "Ota5_Device";
|
||||
protected static final String CLIENT_ENDPOINT_OTA9 = "Ota9_Device";
|
||||
protected static final String CLIENT_ENDPOINT_OTA9_19 = "Ota9_Device_19";
|
||||
protected List<OtaPackageUpdateStatus> expectedStatuses;
|
||||
|
||||
protected final String OBSERVE_ATTRIBUTES_WITH_PARAMS_OTA5 =
|
||||
@ -155,6 +156,33 @@ public abstract class AbstractOtaLwM2MIntegrationTest extends AbstractLwM2MInteg
|
||||
" ],\n" +
|
||||
" \"attributeLwm2m\": {}\n" +
|
||||
" }";
|
||||
protected final String OBSERVE_ATTRIBUTES_WITH_PARAMS_OTA9_19 =
|
||||
|
||||
" {\n" +
|
||||
" \"keyName\": {\n" +
|
||||
" \"/9_1.1/0/0\": \"pkgname\",\n" +
|
||||
" \"/9_1.1/0/1\": \"pkgversion\",\n" +
|
||||
" \"/9_1.1/0/7\": \"updateState\",\n" +
|
||||
" \"/9_1.1/0/9\": \"updateResult\",\n" +
|
||||
" \"/19_1.1/0/0\": \"dataRead\"\n" +
|
||||
" },\n" +
|
||||
" \"observe\": [\n" +
|
||||
" \"/9_1.1/0/0\",\n" +
|
||||
" \"/9_1.1/0/1\",\n" +
|
||||
" \"/9_1.1/0/7\",\n" +
|
||||
" \"/9_1.1/0/9\",\n" +
|
||||
" \"/19_1.1/0/0\"\n" +
|
||||
" ],\n" +
|
||||
" \"attribute\": [],\n" +
|
||||
" \"telemetry\": [\n" +
|
||||
" \"/9_1.1/0/0\",\n" +
|
||||
" \"/9_1.1/0/1\",\n" +
|
||||
" \"/9_1.1/0/7\",\n" +
|
||||
" \"/9_1.1/0/9\",\n" +
|
||||
" \"/19_1.1/0/0\"\n" +
|
||||
" ],\n" +
|
||||
" \"attributeLwm2m\": {}\n" +
|
||||
" }";
|
||||
|
||||
public AbstractOtaLwM2MIntegrationTest() {
|
||||
setResources(this.RESOURCES_OTA);
|
||||
@ -176,14 +204,14 @@ public abstract class AbstractOtaLwM2MIntegrationTest extends AbstractLwM2MInteg
|
||||
return savaData("/api/otaPackage/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, "SHA256");
|
||||
}
|
||||
|
||||
protected OtaPackageInfo createSoftware(DeviceProfileId deviceProfileId) throws Exception {
|
||||
protected OtaPackageInfo createSoftware(DeviceProfileId deviceProfileId, String version) throws Exception {
|
||||
String CHECKSUM = "4bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459a";
|
||||
|
||||
OtaPackageInfo swInfo = new OtaPackageInfo();
|
||||
swInfo.setDeviceProfileId(deviceProfileId);
|
||||
swInfo.setType(SOFTWARE);
|
||||
swInfo.setTitle("My sw");
|
||||
swInfo.setVersion("v1.0");
|
||||
swInfo.setVersion(version);
|
||||
|
||||
OtaPackageInfo savedFirmwareInfo = doPost("/api/otaPackage", swInfo, OtaPackageInfo.class);
|
||||
|
||||
|
||||
@ -121,14 +121,13 @@ public class Ota5LwM2MIntegrationTest extends AbstractOtaLwM2MIntegrationTest {
|
||||
|
||||
|
||||
/**
|
||||
* ObjectId = 19
|
||||
* ObjectId = 19/65533/0
|
||||
* {
|
||||
* "title" : "BC68J01",
|
||||
* "version" : "10",
|
||||
* "fileChecksumSHA256" : "f2a08d4963e981c78f2a99f62d8439af4437a72ea7267a8c01d013c072c01ded",
|
||||
* "fileSize" : 59832,
|
||||
* "fileName" : "FW_BC68JAR01A10_TO_BC68JAR01A09_09.bin",
|
||||
* "packageType" : "FIRMWARE"
|
||||
* "title" : "My firmware",
|
||||
* "version" : "fw.v.1.5.0-update",
|
||||
* "checksum" : "4bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459a",
|
||||
* "fileSize" : 1,
|
||||
* "fileName" : "filename.txt"
|
||||
* }
|
||||
* to base64
|
||||
* /5/0/5 -> Update Result (Res); 5/0/3 -> State;
|
||||
|
||||
@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.Test;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.OtaPackageInfo;
|
||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MDeviceCredentials;
|
||||
import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration;
|
||||
import org.thingsboard.server.common.data.kv.TsKvEntry;
|
||||
@ -35,7 +36,11 @@ import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.INIT
|
||||
import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.QUEUED;
|
||||
import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.UPDATED;
|
||||
import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.VERIFIED;
|
||||
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.BINARY_APP_DATA_CONTAINER;
|
||||
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.LwM2MProfileBootstrapConfigType.NONE;
|
||||
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_0;
|
||||
import static org.thingsboard.server.transport.lwm2m.server.ota.DefaultLwM2MOtaUpdateService.FW_INSTANCE_ID;
|
||||
import static org.thingsboard.server.transport.lwm2m.server.ota.DefaultLwM2MOtaUpdateService.SW_INSTANCE_ID;
|
||||
|
||||
@Slf4j
|
||||
public class Ota9LwM2MIntegrationTest extends AbstractOtaLwM2MIntegrationTest {
|
||||
@ -50,14 +55,15 @@ public class Ota9LwM2MIntegrationTest extends AbstractOtaLwM2MIntegrationTest {
|
||||
* */
|
||||
@Test
|
||||
public void testSoftwareUpdateByObject9() throws Exception {
|
||||
String clientEndpoint = this.CLIENT_ENDPOINT_OTA9;
|
||||
Lwm2mDeviceProfileTransportConfiguration transportConfiguration = getTransportConfiguration(OBSERVE_ATTRIBUTES_WITH_PARAMS_OTA9, getBootstrapServerCredentialsNoSec(NONE));
|
||||
DeviceProfile deviceProfile = createLwm2mDeviceProfile("profileFor" + this.CLIENT_ENDPOINT_OTA9, transportConfiguration);
|
||||
LwM2MDeviceCredentials deviceCredentials = getDeviceCredentialsNoSec(createNoSecClientCredentials(this.CLIENT_ENDPOINT_OTA9));
|
||||
final Device device = createLwm2mDevice(deviceCredentials, this.CLIENT_ENDPOINT_OTA9, deviceProfile.getId());
|
||||
createNewClient(SECURITY_NO_SEC, null, false, this.CLIENT_ENDPOINT_OTA9, device.getId().getId().toString());
|
||||
DeviceProfile deviceProfile = createLwm2mDeviceProfile("profileFor" + clientEndpoint, transportConfiguration);
|
||||
LwM2MDeviceCredentials deviceCredentials = getDeviceCredentialsNoSec(createNoSecClientCredentials(clientEndpoint));
|
||||
final Device device = createLwm2mDevice(deviceCredentials, clientEndpoint, deviceProfile.getId());
|
||||
createNewClient(SECURITY_NO_SEC, null, false, clientEndpoint, device.getId().getId().toString());
|
||||
awaitObserveReadAll(4, device.getId().getId().toString());
|
||||
|
||||
device.setSoftwareId(createSoftware(deviceProfile.getId()).getId());
|
||||
device.setSoftwareId(createSoftware(deviceProfile.getId(), "v1.0").getId());
|
||||
final Device savedDevice = doPost("/api/device", device, Device.class); //sync call
|
||||
|
||||
assertThat(savedDevice).as("saved device").isNotNull();
|
||||
@ -70,4 +76,47 @@ public class Ota9LwM2MIntegrationTest extends AbstractOtaLwM2MIntegrationTest {
|
||||
.until(() -> getFwSwStateTelemetryFromAPI(device.getId().getId(), "sw_state"), this::predicateForStatuses);
|
||||
log.warn("Object9: Got the ts: {}", ts);
|
||||
}
|
||||
/**
|
||||
* ObjectId = 19/65534/0
|
||||
* {
|
||||
* "title" : "My sw",
|
||||
* "version" : "v1.0.19",
|
||||
* "checksum" : "4bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459a",
|
||||
* "fileSize" : 1,
|
||||
* "fileName" : "filename.txt"
|
||||
* }
|
||||
* => Start -> INITIAL (State=0) -> DOWNLOAD STARTED;
|
||||
* => PKG / URI Write -> DOWNLOAD STARTED (Res=1 (Downloading) && State=1) -> DOWNLOADED
|
||||
* => PKG Written -> DOWNLOADED (Res=1 Initial && State=2) -> DELIVERED;
|
||||
* => PKG integrity verified -> DELIVERED (Res=3 (Successfully Downloaded and package integrity verified) && State=3) -> INSTALLED;
|
||||
* => Install -> INSTALLED (Res=2 SW successfully installed) && State=4) -> Start
|
||||
*
|
||||
* */
|
||||
@Test
|
||||
public void testSoftwareUpdateByObject9WithObject19_Ok() throws Exception {
|
||||
String clientEndpoint = this.CLIENT_ENDPOINT_OTA9_19;
|
||||
Lwm2mDeviceProfileTransportConfiguration transportConfiguration = getTransportConfiguration19(OBSERVE_ATTRIBUTES_WITH_PARAMS_OTA9_19, getBootstrapServerCredentialsNoSec(NONE));
|
||||
DeviceProfile deviceProfile = createLwm2mDeviceProfile("profileFor" + clientEndpoint, transportConfiguration);
|
||||
LwM2MDeviceCredentials deviceCredentials = getDeviceCredentialsNoSec(createNoSecClientCredentials(clientEndpoint));
|
||||
final Device device = createLwm2mDevice(deviceCredentials, clientEndpoint, deviceProfile.getId());
|
||||
createNewClient(SECURITY_NO_SEC, null, false, clientEndpoint, device.getId().getId().toString());
|
||||
awaitObserveReadAll(5, device.getId().getId().toString());
|
||||
OtaPackageInfo otaPackageInfo = createSoftware(deviceProfile.getId(), "v1.0.19");
|
||||
device.setSoftwareId(otaPackageInfo.getId());
|
||||
final Device savedDevice = doPost("/api/device", device, Device.class); //sync call
|
||||
|
||||
assertThat(savedDevice).as("saved device").isNotNull();
|
||||
assertThat(getDeviceFromAPI(device.getId().getId())).as("fetched device").isEqualTo(savedDevice);
|
||||
|
||||
expectedStatuses = List.of(
|
||||
QUEUED, INITIATED, DOWNLOADING, DOWNLOADING, DOWNLOADING, DOWNLOADED, VERIFIED, UPDATED);
|
||||
List<TsKvEntry> ts = await("await on timeseries")
|
||||
.atMost(TIMEOUT, TimeUnit.SECONDS)
|
||||
.until(() -> getFwSwStateTelemetryFromAPI(device.getId().getId(), "sw_state"), this::predicateForStatuses);
|
||||
|
||||
String ver_Id_19 = lwM2MTestClient.getLeshanClient().getObjectTree().getModel().getObjectModel(BINARY_APP_DATA_CONTAINER).version;
|
||||
String resourceIdVer = "/" + BINARY_APP_DATA_CONTAINER + "_" + ver_Id_19 + "/" + SW_INSTANCE_ID + "/" + RESOURCE_ID_0;
|
||||
resultReadOtaParams_19(resourceIdVer, otaPackageInfo);
|
||||
log.warn("Object9: Got the ts: {}", ts);
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,9 +108,9 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
|
||||
public static final String FW_RESULT_ID = "/5/0/5";
|
||||
public static final String FW_NAME_ID = "/5/0/6";
|
||||
public static final String FW_VER_ID = "/5/0/7";
|
||||
public static final int FW_INSTANCE_ID = 65534;
|
||||
public static final int FW_INSTANCE_ID = 65533;
|
||||
public static final String FW_INFO_19_INSTANCE_ID = "/19/" + FW_INSTANCE_ID;
|
||||
public static final int SW_INSTANCE_ID = 65535;
|
||||
public static final int SW_INSTANCE_ID = 65534;
|
||||
public static final String SW_INFO_19_INSTANCE_ID = "/19/" + SW_INSTANCE_ID;
|
||||
public static final String OTA_INFO_19_TITLE = "title";
|
||||
public static final String OTA_INFO_19_VERSION = "version";
|
||||
@ -551,6 +551,10 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
|
||||
if (TransportProtos.ResponseStatus.SUCCESS.equals(response.getResponseStatus())) {
|
||||
UUID otaPackageId = new UUID(response.getOtaPackageIdMSB(), response.getOtaPackageIdLSB());
|
||||
LwM2MSoftwareUpdateStrategy strategy = info.getStrategy();
|
||||
Boolean useObject19ForOta = clientContext.getProfile(client.getProfileId()).getClientLwM2mSettings().getUseObject19ForOta();
|
||||
if (useObject19ForOta != null && useObject19ForOta){
|
||||
sendInfoFwToObject19ForOta(client, convertObjectIdToVersionedId(SW_INFO_19_INSTANCE_ID, client), response, otaPackageId);
|
||||
}
|
||||
switch (strategy) {
|
||||
case BINARY:
|
||||
startUpdateUsingBinary(client, convertObjectIdToVersionedId(SW_PACKAGE_ID, client), otaPackageId);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user