From 957c1f7d747f88abb72a21e0461e777d9fbfb8ce Mon Sep 17 00:00:00 2001 From: swethasukumarr Date: Mon, 5 Oct 2026 13:32:23 -0400 Subject: [PATCH] RDKEMW-26354 : Add UNLOADED lifecycle state support --- docs/openrpc/the-spec/firebolt-open-rpc.json | 3 ++- include/firebolt/lifecycle.h | 1 + src/json_types/lifecycle.h | 1 + test/component/lifecycleTest.cpp | 25 ++++++++++++++++++++ test/unit/lifecycleTest.cpp | 8 +++++++ 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/docs/openrpc/the-spec/firebolt-open-rpc.json b/docs/openrpc/the-spec/firebolt-open-rpc.json index 8ded70ce..0614ce9d 100644 --- a/docs/openrpc/the-spec/firebolt-open-rpc.json +++ b/docs/openrpc/the-spec/firebolt-open-rpc.json @@ -4966,7 +4966,8 @@ "paused", "suspended", "hibernated", - "terminating" + "terminating", + "unloaded" ] }, "StateChange": { diff --git a/include/firebolt/lifecycle.h b/include/firebolt/lifecycle.h index 3581cda4..5b06a826 100644 --- a/include/firebolt/lifecycle.h +++ b/include/firebolt/lifecycle.h @@ -36,6 +36,7 @@ enum class LifecycleState SUSPENDED, HIBERNATED, TERMINATING, + UNLOADED, }; /** diff --git a/src/json_types/lifecycle.h b/src/json_types/lifecycle.h index 0b130be3..7afa4e24 100644 --- a/src/json_types/lifecycle.h +++ b/src/json_types/lifecycle.h @@ -38,6 +38,7 @@ inline const Firebolt::JSON::EnumType<::Firebolt::Lifecycle::LifecycleState> Lif {"suspended", ::Firebolt::Lifecycle::LifecycleState::SUSPENDED}, {"hibernated", ::Firebolt::Lifecycle::LifecycleState::HIBERNATED}, {"terminating", ::Firebolt::Lifecycle::LifecycleState::TERMINATING}, + {"unloaded", ::Firebolt::Lifecycle::LifecycleState::UNLOADED}, }); class LifecycleState : public Firebolt::JSON::NL_Json_Basic<::Firebolt::Lifecycle::LifecycleState> diff --git a/test/component/lifecycleTest.cpp b/test/component/lifecycleTest.cpp index 40474617..acfd56dd 100644 --- a/test/component/lifecycleTest.cpp +++ b/test/component/lifecycleTest.cpp @@ -132,3 +132,28 @@ TEST_F(LifecycleCTest, subscribeOnState_noValue) auto result = Firebolt::IFireboltAccessor::Instance().LifecycleInterface().unsubscribe(id.value()); verifyUnsubscribeResult(result); } + +TEST_F(LifecycleCTest, subscribeOnState_unloaded) +{ + auto id = Firebolt::IFireboltAccessor::Instance().LifecycleInterface().subscribeOnStateChanged( + [&](const std::vector& changes) + { + EXPECT_TRUE(!changes.empty()); + EXPECT_EQ(changes[0].newState, Firebolt::Lifecycle::LifecycleState::UNLOADED); + EXPECT_EQ(changes[0].oldState, Firebolt::Lifecycle::LifecycleState::TERMINATING); + + { + std::lock_guard lock(mtx); + eventReceived = true; + } + cv.notify_one(); + }); + verifyEventSubscription(id); + + triggerEvent("Lifecycle2.onStateChanged", R"({"value":[{"newState":"unloaded","oldState":"terminating"}]})"); + + verifyEventReceived(mtx, cv, eventReceived); + + auto result = Firebolt::IFireboltAccessor::Instance().LifecycleInterface().unsubscribe(id.value()); + verifyUnsubscribeResult(result); +} \ No newline at end of file diff --git a/test/unit/lifecycleTest.cpp b/test/unit/lifecycleTest.cpp index 51f85709..4bca242b 100644 --- a/test/unit/lifecycleTest.cpp +++ b/test/unit/lifecycleTest.cpp @@ -71,6 +71,14 @@ TEST_F(LifecycleUTest, stateBadResponse) ASSERT_FALSE(result) << "LifecycleImpl::state() did not return an error"; } +TEST_F(LifecycleUTest, stateUnloaded) +{ + mock_with_response("Lifecycle2.state", "unloaded"); + Firebolt::Result result = lifecycleImpl_.state(); + ASSERT_TRUE(result) << "Failed to retrieve current state from Lifecycle.state() method"; + EXPECT_EQ(*result, Firebolt::Lifecycle::LifecycleState::UNLOADED); +} + TEST_F(LifecycleUTest, subscribeOnStateChanged) { EXPECT_CALL(mockHelper, subscribe(_, "Lifecycle2.onStateChanged", _, _))