Add one-way OTA target migration aliases

This commit is contained in:
mikecarper committed 2026-09-19 08:30:52 -07:00
1 parent 86e8c413cd
commit 5fd9d039f5
7 files changed
+102 -4

No files matched your search

@@ -71,6 +71,15 @@ done
[ "$(get_exact_identity_full_pio_env heltec_v4_r8_sensor)" \
= heltec_v4_r8_sensor ] \
|| fail "V4 R8 sensor should retain its own feature base"
[ "$(get_exact_identity_full_migration_target heltec_v4_r8_repeater_observer_mqtt)" \
= heltec_v4_r8_repeater ] \
|| fail "legacy V4 R8 observer lacks its canonical migration target"
if get_exact_identity_full_migration_target heltec_v4_r8_repeater >/dev/null; then
fail "ordinary V4 R8 target unexpectedly has a migration alias"
fi
if get_exact_identity_full_migration_target heltec_v4_r8_repeater_observer_mqtt_sim >/dev/null; then
fail "simulated observer target unexpectedly received a migration alias"
fi
# Portable images and exact reduced OTA identities must not be consolidated.
for target in heltec_v4_r8_repeater heltec_v4_r8_room_server \
+25
View File
@@ -2443,6 +2443,31 @@ TEST(OtaTransfer, TwoManagersFullTransfer) {
EXPECT_TRUE(mota_check_image_hash_full(m));
}
TEST(OtaTransfer, LegacyIdentityAutomaticallyFetchesItsSuccessor) {
g_q.clear();
OtaManager server, client;
OtaStoreRam<4096> store;
SendTo to_client{&client}, to_server{&server};
const uint32_t legacy_target = SIM_TARGET_ID ^ 0x13579BDFu;
server.begin(/*server's own target irrelevant for serving*/ 0, sim_send, &to_client);
client.begin(legacy_target, sim_send, &to_server);
client.set_auto_migration_target(SIM_TARGET_ID);
client.set_fetch_store(&store);
client.set_autofetch(OtaManager::AUTOFETCH_ANY);
ASSERT_TRUE(server.serve(SIM_MOTA, SIM_MOTA_LEN));
server.announce();
pump(client, &server);
ASSERT_EQ(client.fetchState(), OtaManager::COMPLETE);
MotaManifest migrated;
ASSERT_TRUE(mota_parse(store.data(), store.staged_size(), migrated));
EXPECT_EQ(migrated.target_id, SIM_TARGET_ID);
EXPECT_EQ(client.target(), legacy_target); // identity changes only after reboot/apply
EXPECT_EQ(client.auto_migration_target(), SIM_TARGET_ID);
}
TEST(OtaTransfer, LegacyOneKilobyteV2CodecStillStagesOriginalContainer) {
g_q.clear();
MotaManifest manifest;