From 5e785612eb0c5d4ba590cc3fed1a30eb01ddc3d1 Mon Sep 17 00:00:00 2001 From: William Roebuck <244554584+WilliamRoebuck@users.noreply.github.com> Date: Mon, 31 Aug 2026 10:46:53 +0100 Subject: [PATCH 1/4] Cleanup --- .../src/daemon/src/alive_monitor/IAliveMonitor.hpp | 4 ++-- .../alive_monitor/details/daemon/AliveMonitorImpl.cpp | 4 ++-- .../alive_monitor/details/daemon/AliveMonitorImpl.hpp | 4 ++-- .../daemon/src/alive_monitor/mock_alive_monitor.hpp | 4 ++-- .../daemon/src/process_group_manager/details/BUILD | 1 - .../details/process_group_manager_UT.cpp | 10 +++++----- .../details/process_info_node.cpp | 7 +++---- .../process_group_manager/process_group_manager.cpp | 4 ++-- .../src/daemon/src/supervision_control_client/BUILD | 1 + .../ialive_supervision_handle.hpp | 4 ++++ .../mock_alive_supervision_handle.hpp | 1 + .../supervision_control_client/supervision_handle.hpp | 11 +++++++++++ 12 files changed, 35 insertions(+), 20 deletions(-) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp b/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp index 43579897e..ce5f311d6 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp @@ -26,11 +26,11 @@ class IAliveMonitor /// @brief Start the monitor thread /// @warning Not valid if @c init() failed - virtual void start() = 0; + virtual void startMonitoring() = 0; /// @brief Stop the monitor thread /// @warning Not valid if @c init() failed - virtual void stop() = 0; + virtual void stopMonitoring() = 0; /// @brief Returns an interface for components to register their alive supervision /// @warning Not valid if @c init() failed diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp index b8101db5f..7f4146190 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp @@ -61,14 +61,14 @@ bool AliveMonitorImpl::init() noexcept return false; } -void AliveMonitorImpl::start() noexcept +void AliveMonitorImpl::startMonitoring() noexcept { alive_monitor_thread_ = std::thread([this]() { threadFn(stop_thread_); }); } -void AliveMonitorImpl::stop() noexcept +void AliveMonitorImpl::stopMonitoring() noexcept { stop_thread_.store(true); if (alive_monitor_thread_.joinable()) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp index 4c7c44208..bfc0c713e 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp @@ -48,10 +48,10 @@ class AliveMonitorImpl : public IAliveMonitor const std::size_t supervised_components); /// @brief @see IAliveMonitor definition - void start() noexcept override; + void startMonitoring() noexcept override; /// @brief @see IAliveMonitor definition - void stop() noexcept override; + void stopMonitoring() noexcept override; /// @brief @see IAliveMonitor definition [[nodiscard]] ISupervisionFactory& getSupervisionFactory() const noexcept override; diff --git a/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_monitor.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_monitor.hpp index a405d0e32..100fdde89 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_monitor.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_monitor.hpp @@ -22,8 +22,8 @@ namespace score::mw::lifecycle::internal::saf::daemon class MockAliveMonitor : public IAliveMonitor { public: - MOCK_METHOD(void, start, (), (override)); - MOCK_METHOD(void, stop, (), (override)); + MOCK_METHOD(void, startMonitoring, (), (override)); + MOCK_METHOD(void, stopMonitoring, (), (override)); MOCK_METHOD(ISupervisionFactory&, getSupervisionFactory, (), (const, override)); MOCK_METHOD(bool, init, (), (noexcept, override)); }; diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD b/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD index 36f43800d..0487aa2fa 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD @@ -161,7 +161,6 @@ cc_library( ":icomponent", ":process_handling", ":safe_process_map", - "//score/launch_manager/src/daemon/src/common:alive_interface_path", "//score/launch_manager/src/daemon/src/configuration:component_config", "//score/launch_manager/src/daemon/src/control:control_client_channel", "//score/launch_manager/src/daemon/src/osal:ifile_waiter", diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp index fe98b9b5c..0d24de625 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp @@ -117,7 +117,7 @@ class ProcessGroupManagerWatchdogTest : public Test void expectNormalStartup() { EXPECT_CALL(*alive_monitor_, init()).WillOnce(Return(true)); - EXPECT_CALL(*alive_monitor_, start()); + EXPECT_CALL(*alive_monitor_, startMonitoring()); EXPECT_CALL(*watchdog_, init(_, _)).WillOnce(Return(true)); EXPECT_CALL(*watchdog_, enable()).WillOnce(Return(true)); } @@ -180,7 +180,7 @@ TEST_F(ProcessGroupManagerWatchdogTest, GivenMinimalConfig_ExpectWatchdogMethods InSequence sequence; expectNormalStartup(); EXPECT_CALL(*watchdog_, disable()).Times(1); - EXPECT_CALL(*alive_monitor_, stop()).Times(1); + EXPECT_CALL(*alive_monitor_, stopMonitoring()).Times(1); // When auto initialize_result = process_group_manager_->initialize(); @@ -199,7 +199,7 @@ TEST_F(ProcessGroupManagerWatchdogTest, GivenMinimalConfig_ExpectWatchdogService }); // Called in deinitialize() after run() returns EXPECT_CALL(*watchdog_, disable()).Times(1); - EXPECT_CALL(*alive_monitor_, stop()).Times(1); + EXPECT_CALL(*alive_monitor_, stopMonitoring()).Times(1); // When ASSERT_TRUE(process_group_manager_->initialize()); @@ -223,7 +223,7 @@ TEST_F(ProcessGroupManagerWatchdogTest, GivenMinimalConfig_ExpectWatchdogFired_W process_group_manager_->cancel(); }); EXPECT_CALL(*watchdog_, disable()).Times(1); - EXPECT_CALL(*alive_monitor_, stop()).Times(1); + EXPECT_CALL(*alive_monitor_, stopMonitoring()).Times(1); // When ASSERT_TRUE(process_group_manager_->initialize()); @@ -250,7 +250,7 @@ TEST_F(ProcessGroupManagerWatchdogTest, GivenMinimalConfig_ExpectWatchdogDisable // We are explicitly calling deinitialize() in this test for readability, // so disable() and stop() are expected to be called twice: once in deinitialize() and once in TearDown(). EXPECT_CALL(*watchdog_, disable()).Times(2); - EXPECT_CALL(*alive_monitor_, stop()).Times(2); + EXPECT_CALL(*alive_monitor_, stopMonitoring()).Times(2); // When ASSERT_TRUE(process_group_manager_->initialize()); diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp index c7e78a668..9a43bb1fe 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp @@ -13,7 +13,6 @@ #include "process_info_node.hpp" #include "score/launch_manager/src/daemon/src/configuration/component_config.hpp" -#include "score/mw/launch_manager/common/alive_interface_path.hpp" #include "score/mw/launch_manager/common/log.hpp" #include "score/mw/launch_manager/osal/ifile_waiter.hpp" #include "score/mw/launch_manager/osal/ipc_comms.hpp" @@ -49,9 +48,6 @@ ProcessInfoNode::ProcessInfoNode(configuration::ComponentConfig&& config, Proces LM_LOG_DEBUG() << "Setting up alive supervision for" << identifier_; - config_.deployment_config.environmental_variables.add( - "LCM_ALIVE_INTERFACE_PATH", aliveInterfacePath(identifier_)); - supervision_handle_ = process_handling_.supervision_factory.constructSupervision( identifier_, uid, app_profile.alive_supervision.value()); @@ -63,6 +59,9 @@ ProcessInfoNode::ProcessInfoNode(configuration::ComponentConfig&& config, Proces { LM_LOG_DEBUG() << "Successfully set up alive supervision for" << identifier_; } + + config_.deployment_config.environmental_variables.add( + "LCM_ALIVE_INTERFACE_PATH", supervision_handle_->getConnectionId()); } } diff --git a/score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp b/score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp index e0272242d..306c40e09 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp @@ -104,7 +104,7 @@ bool ProcessGroupManager::initialize() LM_LOG_DEBUG() << "Process Group initialization done"; - alive_monitor_->start(); + alive_monitor_->startMonitoring(); // Watchdog config may not be available if no watchdog is configured if (watchdog_config_.has_value()) @@ -133,7 +133,7 @@ void ProcessGroupManager::deinitialize() event_queue_->stop(); } os_handler_.reset(); - alive_monitor_->stop(); + alive_monitor_->stopMonitoring(); // Join the worker threads before destroying the process groups: a worker may // still be (de)activating a ProcessInfoNode owned by a graph, so tearing the diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/BUILD b/score/launch_manager/src/daemon/src/supervision_control_client/BUILD index 4ee93a681..6126a39b8 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/BUILD +++ b/score/launch_manager/src/daemon/src/supervision_control_client/BUILD @@ -42,6 +42,7 @@ cc_library( deps = [ ":ialive_supervision_handle", ":supervision_event", + "//score/launch_manager/src/daemon/src/common:alive_interface_path", "//score/launch_manager/src/daemon/src/common:identifier_hash", "//score/launch_manager/src/daemon/src/common:log", ], diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp b/score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp index da11c98e2..3e5785377 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp @@ -14,6 +14,7 @@ #define IALIVE_SUPERVISION_HANDLE_HPP_INCLUDED #include +#include namespace score::mw::lifecycle { @@ -30,6 +31,9 @@ class IAliveSupervisionHandle /// @brief Request that the calling process stops supervision at @param time virtual bool deactivateSupervision(timespec time) noexcept = 0; + + /// @brief Get the name of the IPC file alive indications are sent to. + virtual std::string_view getConnectionId() const noexcept = 0; }; } // namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp b/score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp index 0afb5b829..fe34b8439 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp @@ -24,6 +24,7 @@ class MockAliveSupervisionHandle : public IAliveSupervisionHandle public: MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); }; } // namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp b/score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp index 9b465e43e..b5b483acc 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp @@ -13,10 +13,12 @@ #ifndef SUPERVISION_HANDLE_HPP_INCLUDED #define SUPERVISION_HANDLE_HPP_INCLUDED +#include "score/mw/launch_manager/common/alive_interface_path.hpp" #include "score/mw/launch_manager/common/identifier_hash.hpp" #include "score/mw/launch_manager/common/log.hpp" #include "score/mw/launch_manager/supervision_control_client/ialive_supervision_handle.hpp" #include "score/mw/launch_manager/supervision_control_client/supervision_event.hpp" + #include namespace score @@ -39,6 +41,7 @@ class SupervisionHandle : public IAliveSupervisionHandle explicit SupervisionHandle(IdentifierHash process_id, std::shared_ptr buffer) : process_id_(process_id), buffer_(buffer) { + ipc_path_ = std::move(internal::aliveInterfacePath(process_id_)); } /// @brief Request that the calling process begins supervision at @param time @@ -53,6 +56,12 @@ class SupervisionHandle : public IAliveSupervisionHandle return queueSupervisionEvent({process_id_, SupervisionEventType::kDeactivation, time}); } + /// @brief Get the name of the IPC file alive indications are sent to. + std::string_view getConnectionId() const noexcept override + { + return ipc_path_; + } + private: /// @brief Attempts to push a supervision event so that the alive monitor can be informed about it. /// @param[in] f_event The SupervisionEvent to be queued @@ -74,6 +83,8 @@ class SupervisionHandle : public IAliveSupervisionHandle const IdentifierHash process_id_; /// @brief Buffer to push supervision events to std::shared_ptr buffer_; + /// @brief IPC path for alive indications + std::string ipc_path_; }; } // namespace mw::lifecycle From adce77aee3e5e2cd8b43cc5df7541c11b7f7d331 Mon Sep 17 00:00:00 2001 From: William Roebuck <244554584+WilliamRoebuck@users.noreply.github.com> Date: Mon, 31 Aug 2026 11:43:30 +0100 Subject: [PATCH 2/4] Reorganise supervision control client --- .../src/daemon/src/alive_monitor/BUILD | 49 +++++++++- .../src/alive_monitor/IAliveMonitor.hpp | 2 +- .../src/alive_monitor/details/daemon/BUILD | 2 +- .../details/daemon/PhmDaemon.hpp | 2 +- .../src/alive_monitor/details/ifexm/BUILD | 41 +++++++- .../details/ifexm/ObservableEvent.hpp | 2 +- .../details/ifexm/ObservableEventReader.hpp | 2 +- .../ifexm}/supervision_control_client_ut.cpp | 2 +- .../details/ifexm}/supervision_event.hpp | 0 .../details/ifexm}/supervision_handle.hpp | 4 +- .../ialive_supervision_handle.hpp | 0 .../isupervision_factory.hpp | 2 +- .../mock_alive_supervision_handle.hpp | 16 +-- .../mock_supervision_event_publisher.hpp | 32 ++++++ .../mock_supervision_factory.hpp | 2 +- .../src/process_group_manager/details/BUILD | 16 +-- .../details/graph_UT.cpp | 14 ++- .../details/process_group_manager_UT.cpp | 4 +- .../details/process_handling.hpp | 2 +- .../details/process_info_node.hpp | 2 +- .../details/process_info_node_UT.cpp | 4 +- .../src/supervision_control_client/BUILD | 97 ------------------- 22 files changed, 157 insertions(+), 140 deletions(-) rename score/launch_manager/src/daemon/src/{supervision_control_client => alive_monitor/details/ifexm}/supervision_control_client_ut.cpp (98%) rename score/launch_manager/src/daemon/src/{supervision_control_client => alive_monitor/details/ifexm}/supervision_event.hpp (100%) rename score/launch_manager/src/daemon/src/{supervision_control_client => alive_monitor/details/ifexm}/supervision_handle.hpp (95%) rename score/launch_manager/src/daemon/src/{supervision_control_client => alive_monitor}/ialive_supervision_handle.hpp (100%) rename score/launch_manager/src/daemon/src/{supervision_control_client => alive_monitor}/isupervision_factory.hpp (95%) rename score/launch_manager/src/daemon/src/{supervision_control_client => alive_monitor}/mock_alive_supervision_handle.hpp (65%) create mode 100644 score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp rename score/launch_manager/src/daemon/src/{supervision_control_client => alive_monitor}/mock_supervision_factory.hpp (92%) delete mode 100644 score/launch_manager/src/daemon/src/supervision_control_client/BUILD diff --git a/score/launch_manager/src/daemon/src/alive_monitor/BUILD b/score/launch_manager/src/daemon/src/alive_monitor/BUILD index 2ceef92c7..90c1c2bbb 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/BUILD +++ b/score/launch_manager/src/daemon/src/alive_monitor/BUILD @@ -27,7 +27,7 @@ cc_library( strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", visibility = ["//score:__subpackages__"], deps = [ - "//score/launch_manager/src/daemon/src/supervision_control_client:isupervision_factory", + "//score/launch_manager/src/daemon/src/alive_monitor:isupervision_factory", ], ) @@ -43,3 +43,50 @@ cc_library( "@googletest//:gtest_main", ], ) + +cc_library( + name = "ialive_supervision_handle", + hdrs = ["ialive_supervision_handle.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", + visibility = ["//score:__subpackages__"], +) + +cc_library( + name = "isupervision_factory", + hdrs = ["isupervision_factory.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", + visibility = ["//score:__subpackages__"], + deps = [ + "//score/launch_manager/src/daemon/src/alive_monitor/details/ifexm:supervision_handle", + "//score/launch_manager/src/daemon/src/common:identifier_hash", + "//score/launch_manager/src/daemon/src/configuration:component_config", + ], +) + +cc_library( + name = "mock_alive_supervision_handle", + testonly = True, + hdrs = ["mock_alive_supervision_handle.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", + visibility = ["//score:__subpackages__"], + deps = [ + ":ialive_supervision_handle", + "@googletest//:gtest_main", + ], +) + +cc_library( + name = "mock_supervision_factory", + testonly = True, + hdrs = ["mock_supervision_factory.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", + visibility = ["//score:__subpackages__"], + deps = [ + ":isupervision_factory", + "@googletest//:gtest_main", + ], +) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp b/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp index ce5f311d6..98534f482 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp @@ -13,7 +13,7 @@ #ifndef SAF_DAEMON_ALIVE_MONITOR_HPP_INCLUDED #define SAF_DAEMON_ALIVE_MONITOR_HPP_INCLUDED -#include "score/mw/launch_manager/supervision_control_client/isupervision_factory.hpp" +#include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" namespace score::mw::lifecycle::internal::saf::daemon { diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/BUILD b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/BUILD index c29b9df3a..2014d0723 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/BUILD +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/BUILD @@ -51,6 +51,7 @@ cc_library( deps = [ ":phm_daemon_config", ":sw_cluster_handler", + "//score/launch_manager/src/daemon/src/alive_monitor:isupervision_factory", "//score/launch_manager/src/daemon/src/alive_monitor/details/common:einitcode", "//score/launch_manager/src/daemon/src/alive_monitor/details/factory:flat_cfg_factory", "//score/launch_manager/src/daemon/src/alive_monitor/details/ifappl:monitor_if_daemon", @@ -60,7 +61,6 @@ cc_library( "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:cycle_timer", "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:timers_os_clock", "//score/launch_manager/src/daemon/src/common:log", - "//score/launch_manager/src/daemon/src/supervision_control_client:isupervision_factory", ], ) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp index 58f0e2e02..b3b86e2a7 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp @@ -26,8 +26,8 @@ #include "score/mw/launch_manager/alive_monitor/details/timers/CycleTimeValidator.hpp" #include "score/mw/launch_manager/alive_monitor/details/timers/CycleTimer.hpp" #include "score/mw/launch_manager/alive_monitor/details/timers/TimeConversion.hpp" +#include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" #include "score/mw/launch_manager/configuration/config.hpp" -#include "score/mw/launch_manager/supervision_control_client/isupervision_factory.hpp" namespace score::mw::lifecycle::internal::saf::daemon { diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/BUILD b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/BUILD index 2999e2fef..0ab3f030b 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/BUILD +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/BUILD @@ -11,6 +11,7 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* load("@rules_cc//cc:defs.bzl", "cc_library") +load("//tests/utils/bazel:unit_test.bzl", "lm_cc_test") cc_library( name = "observable_event", @@ -20,9 +21,9 @@ cc_library( strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm", visibility = ["//score/launch_manager/src/daemon/src/alive_monitor:__subpackages__"], deps = [ + ":supervision_event", "//score/launch_manager/src/daemon/src/alive_monitor/details/common:observer", "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:timers_os_clock", - "//score/launch_manager/src/daemon/src/supervision_control_client:supervision_event", ], ) @@ -35,10 +36,46 @@ cc_library( visibility = ["//score/launch_manager/src/daemon/src/alive_monitor:__subpackages__"], deps = [ ":observable_event", + ":supervision_event", "//score/launch_manager:error_event", "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:time_conversion", "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:timers_os_clock", "//score/launch_manager/src/daemon/src/common:log", - "//score/launch_manager/src/daemon/src/supervision_control_client:supervision_event", + ], +) + +cc_library( + name = "supervision_event", + hdrs = ["supervision_event.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor/details/ifexm", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm", + visibility = ["//score:__subpackages__"], + deps = [ + "//externals/ipc_dropin", + "//score/launch_manager/src/daemon/src/common:identifier_hash", + ], +) + +cc_library( + name = "supervision_handle", + hdrs = ["supervision_handle.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor/details/ifexm", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm", + visibility = ["//score/launch_manager/src/daemon/src/alive_monitor:__subpackages__"], + deps = [ + ":supervision_event", + "//score/launch_manager/src/daemon/src/alive_monitor:ialive_supervision_handle", + "//score/launch_manager/src/daemon/src/common:alive_interface_path", + "//score/launch_manager/src/daemon/src/common:identifier_hash", + "//score/launch_manager/src/daemon/src/common:log", + ], +) + +lm_cc_test( + name = "supervision_control_client_ut", + srcs = ["supervision_control_client_ut.cpp"], + deps = [ + ":supervision_handle", + "@googletest//:gtest_main", ], ) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEvent.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEvent.hpp index 36d2dcfae..27178ad80 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEvent.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEvent.hpp @@ -18,7 +18,7 @@ #include "score/mw/launch_manager/alive_monitor/details/timers/Timers_OsClock.hpp" #include -#include "score/mw/launch_manager/supervision_control_client/supervision_event.hpp" +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_event.hpp" namespace score::mw::lifecycle::internal::saf::ifexm { diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEventReader.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEventReader.hpp index 6b47e339d..50958598b 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEventReader.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEventReader.hpp @@ -17,8 +17,8 @@ #include #include "score/mw/launch_manager/alive_monitor/details/ifexm/ObservableEvent.hpp" +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_event.hpp" #include "score/mw/launch_manager/alive_monitor/details/timers/Timers_OsClock.hpp" -#include "score/mw/launch_manager/supervision_control_client/supervision_event.hpp" #include "score/result/result.h" diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_control_client_ut.cpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_control_client_ut.cpp similarity index 98% rename from score/launch_manager/src/daemon/src/supervision_control_client/supervision_control_client_ut.cpp rename to score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_control_client_ut.cpp index 410101d9f..d572f0a7f 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_control_client_ut.cpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_control_client_ut.cpp @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -#include "score/mw/launch_manager/supervision_control_client/supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_handle.hpp" #include #include diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_event.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_event.hpp similarity index 100% rename from score/launch_manager/src/daemon/src/supervision_control_client/supervision_event.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_event.hpp diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp similarity index 95% rename from score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp index b5b483acc..790494907 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp @@ -13,11 +13,11 @@ #ifndef SUPERVISION_HANDLE_HPP_INCLUDED #define SUPERVISION_HANDLE_HPP_INCLUDED +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_event.hpp" +#include "score/mw/launch_manager/alive_monitor/ialive_supervision_handle.hpp" #include "score/mw/launch_manager/common/alive_interface_path.hpp" #include "score/mw/launch_manager/common/identifier_hash.hpp" #include "score/mw/launch_manager/common/log.hpp" -#include "score/mw/launch_manager/supervision_control_client/ialive_supervision_handle.hpp" -#include "score/mw/launch_manager/supervision_control_client/supervision_event.hpp" #include diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp similarity index 100% rename from score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/isupervision_factory.hpp b/score/launch_manager/src/daemon/src/alive_monitor/isupervision_factory.hpp similarity index 95% rename from score/launch_manager/src/daemon/src/supervision_control_client/isupervision_factory.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/isupervision_factory.hpp index 38b941eae..5fc850fee 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/isupervision_factory.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/isupervision_factory.hpp @@ -16,9 +16,9 @@ #include #include +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_handle.hpp" #include "score/mw/launch_manager/common/identifier_hash.hpp" #include "score/mw/launch_manager/configuration/component_config.hpp" -#include "score/mw/launch_manager/supervision_control_client/supervision_handle.hpp" namespace score { diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp similarity index 65% rename from score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp index fe34b8439..19ce766ac 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp @@ -13,19 +13,19 @@ #ifndef MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED #define MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED -#include "score/mw/launch_manager/supervision_control_client/ialive_supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/ialive_supervision_handle.hpp" #include namespace score::mw::lifecycle { -class MockAliveSupervisionHandle : public IAliveSupervisionHandle -{ - public: - MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); - MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); - MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); -}; + class MockAliveSupervisionHandle : public IAliveSupervisionHandle + { + public: + MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); + }; } // namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp new file mode 100644 index 000000000..19ce766ac --- /dev/null +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp @@ -0,0 +1,32 @@ +/******************************************************************************** + * Copyright (c) 2026 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +#ifndef MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED +#define MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED + +#include "score/mw/launch_manager/alive_monitor/ialive_supervision_handle.hpp" +#include + +namespace score::mw::lifecycle +{ + + class MockAliveSupervisionHandle : public IAliveSupervisionHandle + { + public: + MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); + }; + +} // namespace score::mw::lifecycle + +#endif // MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/mock_supervision_factory.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_factory.hpp similarity index 92% rename from score/launch_manager/src/daemon/src/supervision_control_client/mock_supervision_factory.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_factory.hpp index 4bb704bed..61bea7766 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/mock_supervision_factory.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_factory.hpp @@ -14,7 +14,7 @@ #ifndef MOCK_SUPERVISION_FACTORY_HPP_INCLUDED #define MOCK_SUPERVISION_FACTORY_HPP_INCLUDED -#include "score/mw/launch_manager/supervision_control_client/isupervision_factory.hpp" +#include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" #include namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD b/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD index 0487aa2fa..5cf50e3f0 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD @@ -145,8 +145,8 @@ cc_library( deps = [ ":safe_process_map", "//score/launch_manager/src/daemon/src/osal:ifile_waiter", + "//score/launch_manager/src/daemon/src/alive_monitor:isupervision_factory", "//score/launch_manager/src/daemon/src/process_group_manager:iprocess", - "//score/launch_manager/src/daemon/src/supervision_control_client:isupervision_factory", ], ) @@ -161,6 +161,7 @@ cc_library( ":icomponent", ":process_handling", ":safe_process_map", + "//score/launch_manager/src/daemon/src/alive_monitor:ialive_supervision_handle", "//score/launch_manager/src/daemon/src/configuration:component_config", "//score/launch_manager/src/daemon/src/control:control_client_channel", "//score/launch_manager/src/daemon/src/osal:ifile_waiter", @@ -168,7 +169,6 @@ cc_library( "//score/launch_manager/src/daemon/src/osal:semaphore", "//score/launch_manager/src/daemon/src/process_group_manager:iprocess", "//score/launch_manager/src/daemon/src/process_group_manager:process_state", - "//score/launch_manager/src/daemon/src/supervision_control_client:ialive_supervision_handle", "@score_baselibs//score/language/futurecpp", ], ) @@ -180,9 +180,9 @@ lm_cc_test( ":process_info_node", ":safe_process_map", "//score/launch_manager/src/daemon/src/osal:mock_ifile_waiter", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_supervision_handle", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_supervision_factory", "//score/launch_manager/src/daemon/src/process_group_manager:mock_iprocess", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_alive_supervision_handle", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_supervision_factory", "@googletest//:gtest_main", ], ) @@ -232,10 +232,10 @@ lm_cc_test( srcs = ["graph_UT.cpp"], deps = [ ":graph", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_supervision_handle", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_supervision_factory", "//score/launch_manager/src/daemon/src/configuration:config", "//score/launch_manager/src/daemon/src/process_group_manager:mock_iprocess", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_alive_supervision_handle", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_supervision_factory", "@googletest//:gtest_main", ], ) @@ -354,11 +354,11 @@ lm_cc_test( srcs = ["process_group_manager_UT.cpp"], deps = [ "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_monitor", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_supervision_handle", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_supervision_factory", "//score/launch_manager/src/daemon/src/configuration:config", "//score/launch_manager/src/daemon/src/process_group_manager", "//score/launch_manager/src/daemon/src/recovery_client:mock_recovery_client", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_alive_supervision_handle", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_supervision_factory", "//score/launch_manager/src/daemon/src/watchdog:mock_i_watchdog_if", "@googletest//:gtest_main", ], diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp index e95f0a0fc..7fc2f5087 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp @@ -20,11 +20,11 @@ #include #include +#include "score/mw/launch_manager/alive_monitor/mock_alive_supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/mock_supervision_factory.hpp" #include "score/mw/launch_manager/configuration/config.hpp" #include "score/mw/launch_manager/process_group_manager/details/graph.hpp" #include "score/mw/launch_manager/process_group_manager/mock_iprocess.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_alive_supervision_handle.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_supervision_factory.hpp" namespace score::mw::lifecycle::internal { @@ -527,9 +527,8 @@ TEST_F(GraphHandleComponentEventTest, failedFirstDuringTransition) // Fail the first job const auto first_job = job_queue_->pop(); - graph_->handleComponentEvent( - ActivationFailed{ - first_job->value().component.get().getIdentifier(), IComponent::ComponentError::kErrorBeforeReady}); + graph_->handleComponentEvent(ActivationFailed{ + first_job->value().component.get().getIdentifier(), IComponent::ComponentError::kErrorBeforeReady}); const auto second_job = job_queue_->pop(); @@ -546,9 +545,8 @@ TEST_F(GraphHandleComponentEventTest, failureFollowedBySuccessFails) // Fail the first job const auto first_job = job_queue_->pop(); - graph_->handleComponentEvent( - ActivationFailed{ - first_job->value().component.get().getIdentifier(), IComponent::ComponentError::kErrorBeforeReady}); + graph_->handleComponentEvent(ActivationFailed{ + first_job->value().component.get().getIdentifier(), IComponent::ComponentError::kErrorBeforeReady}); const auto second_job = job_queue_->pop(); executeJobSuccessfully(second_job->value()); diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp index 0d24de625..2e76a971b 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp @@ -14,9 +14,9 @@ #include "score/mw/launch_manager/process_group_manager/process_group_manager.hpp" #include "score/mw/launch_manager/alive_monitor/mock_alive_monitor.hpp" +#include "score/mw/launch_manager/alive_monitor/mock_alive_supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/mock_supervision_factory.hpp" #include "score/mw/launch_manager/recovery_client/mock_irecovery_client.h" -#include "score/mw/launch_manager/supervision_control_client/mock_alive_supervision_handle.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_supervision_factory.hpp" #include "score/mw/launch_manager/watchdog/mock_IWatchdogIf.hpp" #include diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp index ce3e552c6..544c45784 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp @@ -15,9 +15,9 @@ #define _INCLUDED_PROCESSHANDLING_ #include "score/mw/launch_manager/osal/ifile_waiter.hpp" +#include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" #include "score/mw/launch_manager/process_group_manager/details/safe_process_map.hpp" #include "score/mw/launch_manager/process_group_manager/iprocess.hpp" -#include "score/mw/launch_manager/supervision_control_client/isupervision_factory.hpp" #include namespace score::mw::lifecycle::internal diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.hpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.hpp index ef746e568..b13407650 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.hpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.hpp @@ -15,13 +15,13 @@ #define _INCLUDED_PROCESSINFONODE_ #include "score/launch_manager/src/daemon/src/configuration/component_config.hpp" +#include "score/mw/launch_manager/alive_monitor/ialive_supervision_handle.hpp" #include "score/mw/launch_manager/configuration/component_config.hpp" #include "score/mw/launch_manager/control/control_client_channel.hpp" #include "score/mw/launch_manager/process_group_manager/details/icomponent.hpp" #include "score/mw/launch_manager/process_group_manager/details/process_handling.hpp" #include "score/mw/launch_manager/process_group_manager/details/safe_process_map.hpp" #include "score/mw/launch_manager/process_group_manager/process_state.hpp" -#include "score/mw/launch_manager/supervision_control_client/ialive_supervision_handle.hpp" #include #include #include diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node_UT.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node_UT.cpp index a8d9202c6..940effaa7 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node_UT.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node_UT.cpp @@ -11,12 +11,12 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ +#include "score/mw/launch_manager/alive_monitor/mock_alive_supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/mock_supervision_factory.hpp" #include "score/mw/launch_manager/osal/mock_ifile_waiter.hpp" #include "score/mw/launch_manager/process_group_manager/details/process_info_node.hpp" #include "score/mw/launch_manager/process_group_manager/details/safe_process_map.hpp" #include "score/mw/launch_manager/process_group_manager/mock_iprocess.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_alive_supervision_handle.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_supervision_factory.hpp" #include #include #include diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/BUILD b/score/launch_manager/src/daemon/src/supervision_control_client/BUILD deleted file mode 100644 index 6126a39b8..000000000 --- a/score/launch_manager/src/daemon/src/supervision_control_client/BUILD +++ /dev/null @@ -1,97 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2026 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* -load("@rules_cc//cc:defs.bzl", "cc_library") -load("//tests/utils/bazel:unit_test.bzl", "lm_cc_test") - -cc_library( - name = "supervision_event", - hdrs = ["supervision_event.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - "//externals/ipc_dropin", - "//score/launch_manager/src/daemon/src/common:identifier_hash", - ], -) - -cc_library( - name = "ialive_supervision_handle", - hdrs = ["ialive_supervision_handle.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], -) - -cc_library( - name = "supervision_handle", - hdrs = ["supervision_handle.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - ":ialive_supervision_handle", - ":supervision_event", - "//score/launch_manager/src/daemon/src/common:alive_interface_path", - "//score/launch_manager/src/daemon/src/common:identifier_hash", - "//score/launch_manager/src/daemon/src/common:log", - ], -) - -cc_library( - name = "isupervision_factory", - hdrs = ["isupervision_factory.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - ":supervision_handle", - "//score/launch_manager/src/daemon/src/common:identifier_hash", - "//score/launch_manager/src/daemon/src/configuration:component_config", - ], -) - -cc_library( - name = "mock_alive_supervision_handle", - testonly = True, - hdrs = ["mock_alive_supervision_handle.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - ":ialive_supervision_handle", - "@googletest//:gtest_main", - ], -) - -cc_library( - name = "mock_supervision_factory", - testonly = True, - hdrs = ["mock_supervision_factory.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - ":isupervision_factory", - "@googletest//:gtest_main", - ], -) - -lm_cc_test( - name = "supervision_control_client_ut", - srcs = ["supervision_control_client_ut.cpp"], - deps = [ - ":supervision_handle", - "@googletest//:gtest_main", - ], -) From af3a4343b046fdbd35769ea13d0accd648abd0e0 Mon Sep 17 00:00:00 2001 From: William Roebuck <244554584+WilliamRoebuck@users.noreply.github.com> Date: Mon, 7 Sep 2026 11:30:41 +0100 Subject: [PATCH 3/4] Move to init list --- .../details/ifexm/supervision_handle.hpp | 3 +-- .../alive_monitor/ialive_supervision_handle.hpp | 2 +- .../mock_alive_supervision_handle.hpp | 14 +++++++------- .../mock_supervision_event_publisher.hpp | 14 +++++++------- .../daemon/src/process_group_manager/details/BUILD | 4 ++-- .../src/process_group_manager/details/graph_UT.cpp | 10 ++++++---- .../details/process_handling.hpp | 2 +- 7 files changed, 25 insertions(+), 24 deletions(-) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp index 790494907..7c585f96d 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp @@ -39,9 +39,8 @@ class SupervisionHandle : public IAliveSupervisionHandle /// @param process_id Identifier of the process being supervised. /// @param buffer Buffer to push supervision events to. explicit SupervisionHandle(IdentifierHash process_id, std::shared_ptr buffer) - : process_id_(process_id), buffer_(buffer) + : process_id_(process_id), buffer_(buffer), ipc_path_(std::move(internal::aliveInterfacePath(process_id_))) { - ipc_path_ = std::move(internal::aliveInterfacePath(process_id_)); } /// @brief Request that the calling process begins supervision at @param time diff --git a/score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp index 3e5785377..49e24b7ea 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp @@ -31,7 +31,7 @@ class IAliveSupervisionHandle /// @brief Request that the calling process stops supervision at @param time virtual bool deactivateSupervision(timespec time) noexcept = 0; - + /// @brief Get the name of the IPC file alive indications are sent to. virtual std::string_view getConnectionId() const noexcept = 0; }; diff --git a/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp index 19ce766ac..4d1e3f3e4 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp @@ -19,13 +19,13 @@ namespace score::mw::lifecycle { - class MockAliveSupervisionHandle : public IAliveSupervisionHandle - { - public: - MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); - MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); - MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); - }; +class MockAliveSupervisionHandle : public IAliveSupervisionHandle +{ + public: + MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); +}; } // namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp index 19ce766ac..4d1e3f3e4 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp @@ -19,13 +19,13 @@ namespace score::mw::lifecycle { - class MockAliveSupervisionHandle : public IAliveSupervisionHandle - { - public: - MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); - MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); - MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); - }; +class MockAliveSupervisionHandle : public IAliveSupervisionHandle +{ + public: + MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); +}; } // namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD b/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD index 5cf50e3f0..7d508bb63 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD @@ -144,8 +144,8 @@ cc_library( visibility = ["//score/launch_manager/src/daemon/src/process_group_manager:__pkg__"], deps = [ ":safe_process_map", - "//score/launch_manager/src/daemon/src/osal:ifile_waiter", "//score/launch_manager/src/daemon/src/alive_monitor:isupervision_factory", + "//score/launch_manager/src/daemon/src/osal:ifile_waiter", "//score/launch_manager/src/daemon/src/process_group_manager:iprocess", ], ) @@ -179,9 +179,9 @@ lm_cc_test( deps = [ ":process_info_node", ":safe_process_map", - "//score/launch_manager/src/daemon/src/osal:mock_ifile_waiter", "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_supervision_handle", "//score/launch_manager/src/daemon/src/alive_monitor:mock_supervision_factory", + "//score/launch_manager/src/daemon/src/osal:mock_ifile_waiter", "//score/launch_manager/src/daemon/src/process_group_manager:mock_iprocess", "@googletest//:gtest_main", ], diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp index 7fc2f5087..a04936615 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp @@ -527,8 +527,9 @@ TEST_F(GraphHandleComponentEventTest, failedFirstDuringTransition) // Fail the first job const auto first_job = job_queue_->pop(); - graph_->handleComponentEvent(ActivationFailed{ - first_job->value().component.get().getIdentifier(), IComponent::ComponentError::kErrorBeforeReady}); + graph_->handleComponentEvent( + ActivationFailed{ + first_job->value().component.get().getIdentifier(), IComponent::ComponentError::kErrorBeforeReady}); const auto second_job = job_queue_->pop(); @@ -545,8 +546,9 @@ TEST_F(GraphHandleComponentEventTest, failureFollowedBySuccessFails) // Fail the first job const auto first_job = job_queue_->pop(); - graph_->handleComponentEvent(ActivationFailed{ - first_job->value().component.get().getIdentifier(), IComponent::ComponentError::kErrorBeforeReady}); + graph_->handleComponentEvent( + ActivationFailed{ + first_job->value().component.get().getIdentifier(), IComponent::ComponentError::kErrorBeforeReady}); const auto second_job = job_queue_->pop(); executeJobSuccessfully(second_job->value()); diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp index 544c45784..5f5326609 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp @@ -14,8 +14,8 @@ #ifndef _INCLUDED_PROCESSHANDLING_ #define _INCLUDED_PROCESSHANDLING_ -#include "score/mw/launch_manager/osal/ifile_waiter.hpp" #include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" +#include "score/mw/launch_manager/osal/ifile_waiter.hpp" #include "score/mw/launch_manager/process_group_manager/details/safe_process_map.hpp" #include "score/mw/launch_manager/process_group_manager/iprocess.hpp" #include From f91d44f0e1dd26d904bb77a1dba6c2919ca9c873 Mon Sep 17 00:00:00 2001 From: William Roebuck <244554584+WilliamRoebuck@users.noreply.github.com> Date: Mon, 7 Sep 2026 15:29:27 +0100 Subject: [PATCH 4/4] Move activate supervision --- .../details/process_info_node.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp index 9a43bb1fe..4c3aacab1 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp @@ -111,11 +111,6 @@ IComponent::RequestResult ProcessInfoNode::tryReportSuccess() { reached_ready_.store(true); - if (auto time = getTimeForAliveState()) - { - supervision_handle_->activateSupervision(time.value()); - } - return {RequestState::kSuccess}; } return {IComponent::RequestState::kWaiting}; @@ -529,6 +524,13 @@ IComponent::RequestResult ProcessInfoNode::activate(score::cpp::stop_token stop_ return tryReportSuccess(); } auto res = startProcess(std::move(stop_token)); + if (res.has_value()) + { + if (auto time = getTimeForAliveState()) + { + supervision_handle_->activateSupervision(time.value()); + } + } return res; }