From b5d0ea36be27e6183c2bda8fc832123e5d9f8d1a Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Sun, 12 Apr 2026 19:49:28 -0700 Subject: [PATCH] [test] add `testResetInstance()` to simulate device reset (#12878) This commit introduces `testResetInstance()` in the unit test platform layer to finalize an existing `ot::Instance` and re-initialize it using the same underlying memory buffer, simulating a device reset. This commit also updates `test_routing_manager.cpp` to use this new function to streamline the test implementation. --- tests/unit/test_platform.cpp | 17 +++++++++++++++++ tests/unit/test_platform.h | 1 + tests/unit/test_routing_manager.cpp | 25 ++++++++++++------------- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/tests/unit/test_platform.cpp b/tests/unit/test_platform.cpp index f74cbaf6c..055693af9 100644 --- a/tests/unit/test_platform.cpp +++ b/tests/unit/test_platform.cpp @@ -75,6 +75,23 @@ ot::Instance *testInitInstance(void) return static_cast(instance); } +ot::Instance *testResetInstance(ot::Instance *aInstance) +{ + otInstanceFinalize(aInstance); + +#if OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE + { + size_t instanceBufferLength = sizeof(ot::Instance); + + aInstance = static_cast(otInstanceInit(aInstance, &instanceBufferLength)); + } +#else + aInstance = static_cast(otInstanceInitSingle()); +#endif + + return aInstance; +} + #if OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE && OPENTHREAD_CONFIG_MULTIPLE_STATIC_INSTANCE_ENABLE ot::Instance *testInitAdditionalInstance(uint8_t id) { diff --git a/tests/unit/test_platform.h b/tests/unit/test_platform.h index c72f7471e..4eedd4edc 100644 --- a/tests/unit/test_platform.h +++ b/tests/unit/test_platform.h @@ -51,6 +51,7 @@ #include "test_util.h" ot::Instance *testInitInstance(void); +ot::Instance *testResetInstance(ot::Instance *aInstance); #if OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE && OPENTHREAD_CONFIG_MULTIPLE_STATIC_INSTANCE_ENABLE ot::Instance *testInitAdditionalInstance(uint8_t id); #endif diff --git a/tests/unit/test_routing_manager.cpp b/tests/unit/test_routing_manager.cpp index d0e9801b3..e14a9ad1c 100644 --- a/tests/unit/test_routing_manager.cpp +++ b/tests/unit/test_routing_manager.cpp @@ -1386,19 +1386,23 @@ void VerifyFavoredOnLinkPrefix(const Ip6::Prefix &aPrefix) VerifyOrQuit(favoredPrefix == aPrefix); } -void InitTest(bool aEnablBorderRouting = false, bool aAfterReset = false) +void InitTest(bool aEnablBorderRouting = false, bool aResetInstance = false) { uint32_t delay = 10000; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Initialize OT instance. - sNow = 0; - sAlarmOn = false; - sInstance = static_cast(testInitInstance()); + sNow = 0; + sAlarmOn = false; - if (aAfterReset) + if (!aResetInstance) { + sInstance = testInitInstance(); + } + else + { + sInstance = testResetInstance(sInstance); delay += 26000; // leader reset sync delay } @@ -4285,9 +4289,7 @@ void TestSavedOnLinkPrefixes(void) Log("Disabling and re-enabling OT Instance"); - testFreeInstance(sInstance); - - InitTest(/* aEnablBorderRouting */ true, /* aAfterReset */ true); + InitTest(/* aEnablBorderRouting */ true, /* aResetInstance */ true); sExpectedPio = kPioAdvertisingLocalOnLink; @@ -4331,9 +4333,7 @@ void TestSavedOnLinkPrefixes(void) Log("Disabling and re-enabling OT Instance"); - testFreeInstance(sInstance); - - InitTest(/* aEnablBorderRouting */ false, /* aAfterReset */ true); + InitTest(/* aEnablBorderRouting */ false, /* aResetInstance */ true); //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Start Routing Manager. @@ -4381,8 +4381,7 @@ void TestSavedOnLinkPrefixes(void) Log("Disabling and re-enabling OT Instance again"); - testFreeInstance(sInstance); - InitTest(/* aEnablBorderRouting */ false, /* aAfterReset */ true); + InitTest(/* aEnablBorderRouting */ false, /* aResetInstance */ true); SuccessOrQuit(sInstance->Get().SetEnabled(true)); AdvanceTime(100);