Browse Source

Merge pull request #14950 from thingsboard/lwm2m_fix_bug_testFirmwareUpdateByObject5_Ok

lwm2m - fix bug tests testFirmwareUpdateByObject5_Ok
pull/15010/head
Viacheslav Klimov 8 months ago
committed by GitHub
parent
commit
b7da31ca99
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 52
      application/src/test/java/org/thingsboard/server/transport/lwm2m/client/FwLwM2MDevice.java
  2. 60
      application/src/test/java/org/thingsboard/server/transport/lwm2m/client/SwLwM2MDevice.java

52
application/src/test/java/org/thingsboard/server/transport/lwm2m/client/FwLwM2MDevice.java

@ -140,45 +140,61 @@ public class FwLwM2MDevice extends BaseInstanceEnabler implements Destroyable {
} }
private void startDownloading() { private void startDownloading() {
long delay = 0;
// Step 1: state = 1
scheduler.schedule(() -> { scheduler.schedule(() -> {
try { state.set(1);
state.set(1); fireResourceChange(3);
fireResourceChange(3); log.info("Downloading started: state=[{}]", state.get());
Thread.sleep(100); }, delay, TimeUnit.MILLISECONDS);
state.set(2);
fireResourceChange(3); delay += 100; // next step after 100 ms
} catch (Exception e) {
} // Step 2: state = 2
}, 100, TimeUnit.MILLISECONDS); scheduler.schedule(() -> {
state.set(2);
fireResourceChange(3);
log.info("Downloading in progress: state=[{}]", state.get());
}, delay, TimeUnit.MILLISECONDS);
} }
private void startUpdating(LwM2mServer identity) { private void startUpdating(LwM2mServer identity) {
scheduler.schedule(() -> { scheduler.schedule(() -> {
try { try {
// Update state + result
state.set(3); state.set(3);
fireResourceChange(3); fireResourceChange(3);
Thread.sleep(100);
updateResult.set(1); updateResult.set(1);
fireResourceChange(5); fireResourceChange(5);
this.pkgName = TITLE;
fireResourceChange(6);
this.pkgVersion = TARGET_FW_VERSION;
fireResourceChange(7);
if (this.leshanClient != null) { if (this.leshanClient != null) {
log.info("Stop/reboot LwM2M client {}", this.leshanClient.getEndpoint(identity)); log.info("Stop/reboot LwM2M client {}", this.leshanClient.getEndpoint(identity));
this.leshanClient.stop(false); this.leshanClient.stop(false);
log.info("Start after update fw LwM2M client {}", this.leshanClient.getEndpoint(identity)); log.info("Start after update fw LwM2M client {}", this.leshanClient.getEndpoint(identity));
this.leshanClient.start(); this.leshanClient.start();
this.pkgName = this.pkgNameDef;
this.pkgVersion = this.pkgVersionDef; // Delayed reset pkgName/pkgVersion, after reboot + registration
scheduler.schedule(() -> {
this.pkgName = this.pkgNameDef;
fireResourceChange(6);
this.pkgVersion = this.pkgVersionDef;
fireResourceChange(7);
log.info("FW resources updating to new values: pkgName=[{}], pkgVersion=[{}]",
this.pkgName, this.pkgVersion);
}, 15, TimeUnit.SECONDS); // 15 sec — safe timing
} }
} catch (Exception e) { } catch (Exception e) {
log.error("Error during firmware update", e);
} }
}, 100, TimeUnit.MILLISECONDS); }, 0, TimeUnit.SECONDS); // start immediately, without further delay
} }
protected void setLeshanClient(LeshanClient leshanClient) { protected void setLeshanClient(LeshanClient leshanClient) {
this.leshanClient = leshanClient; this.leshanClient = leshanClient;
} }
} }

60
application/src/test/java/org/thingsboard/server/transport/lwm2m/client/SwLwM2MDevice.java

@ -33,6 +33,8 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import static org.thingsboard.server.controller.AbstractWebTest.TIMEOUT;
@Slf4j @Slf4j
public class SwLwM2MDevice extends BaseInstanceEnabler implements Destroyable { public class SwLwM2MDevice extends BaseInstanceEnabler implements Destroyable {
@ -85,10 +87,7 @@ public class SwLwM2MDevice extends BaseInstanceEnabler implements Destroyable {
log.info("Write on Device resource /{}/{}/{}", getModel().id, getId(), resourceId); log.info("Write on Device resource /{}/{}/{}", getModel().id, getId(), resourceId);
switch (resourceId) { switch (resourceId) {
case 2: case 2, 3:
startDownloading();
return WriteResponse.success();
case 3:
startDownloading(); startDownloading();
return WriteResponse.success(); return WriteResponse.success();
default: default:
@ -123,25 +122,34 @@ public class SwLwM2MDevice extends BaseInstanceEnabler implements Destroyable {
} }
private void startDownloading() { private void startDownloading() {
long delay = 0;
// Step 1: start downloading
scheduler.schedule(() -> { scheduler.schedule(() -> {
try { state.set(1);
state.set(1); updateResult.set(1);
updateResult.set(1); fireResourceChange(7);
fireResourceChange(7); fireResourceChange(9);
fireResourceChange(9); }, delay, TimeUnit.MILLISECONDS);
Thread.sleep(100);
state.set(2); delay += 100;
fireResourceChange(7);
Thread.sleep(100); // Step 2: downloading in progress
state.set(3); scheduler.schedule(() -> {
fireResourceChange(7); state.set(2);
Thread.sleep(100); fireResourceChange(7);
updateResult.set(3); }, delay, TimeUnit.MILLISECONDS);
fireResourceChange(9);
} catch (Exception e) { delay += 100;
} // Step 3: downloading finished
}, 100, TimeUnit.MILLISECONDS); scheduler.schedule(() -> {
state.set(3);
fireResourceChange(7);
updateResult.set(3);
fireResourceChange(9);
}, delay, TimeUnit.MILLISECONDS);
} }
private void startUpdating() { private void startUpdating() {
@ -150,7 +158,13 @@ public class SwLwM2MDevice extends BaseInstanceEnabler implements Destroyable {
updateResult.set(2); updateResult.set(2);
fireResourceChange(7); fireResourceChange(7);
fireResourceChange(9); fireResourceChange(9);
// Optional: delayed log about FW update
scheduler.schedule(() -> {
log.info("FW resources updating to new values: state=[{}], updateResult=[{}]",
state.get(), updateResult.get());
}, 500, TimeUnit.MILLISECONDS);
}, 100, TimeUnit.MILLISECONDS); }, 100, TimeUnit.MILLISECONDS);
} }
} }

Loading…
Cancel
Save