Skip to content

Commit a7b3742

Browse files
Mocking process launcher in pgm UT (#844)
* Mocking process launcher in pgm UT * Fixing build
1 parent 5493990 commit a7b3742

4 files changed

Lines changed: 26 additions & 6 deletions

File tree

‎score/launch_manager/src/daemon/src/process_group_manager/details/BUILD‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ lm_cc_test(
446446
"//score/launch_manager/src/daemon/src/alive_monitor:mock_supervision_factory",
447447
"//score/launch_manager/src/daemon/src/configuration:config",
448448
"//score/launch_manager/src/daemon/src/process_group_manager",
449+
"//score/launch_manager/src/daemon/src/process_group_manager:mock_iprocess",
449450
"//score/launch_manager/src/daemon/src/recovery_client:mock_recovery_client",
450451
"//score/launch_manager/src/daemon/src/watchdog:mock_i_watchdog_if",
451452
"@googletest//:gtest_main",

‎score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp‎

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "score/mw/launch_manager/alive_monitor/mock_alive_monitor.hpp"
1717
#include "score/mw/launch_manager/alive_monitor/mock_alive_supervision_handle.hpp"
1818
#include "score/mw/launch_manager/alive_monitor/mock_supervision_factory.hpp"
19+
#include "score/mw/launch_manager/process_group_manager/mock_iprocess.hpp"
1920
#include "score/mw/launch_manager/recovery_client/mock_recovery_client.h"
2021
#include "score/mw/launch_manager/watchdog/mock_IWatchdogIf.hpp"
2122

@@ -115,6 +116,8 @@ GraphConfig takeGraphConfig(Config& config)
115116
class ProcessGroupManagerWatchdogTest : public Test
116117
{
117118
protected:
119+
static constexpr osal::ProcessID kMockPid = 100;
120+
118121
void expectNormalStartup()
119122
{
120123
EXPECT_CALL(*alive_monitor_, init()).WillOnce(Return(true));
@@ -149,14 +152,24 @@ class ProcessGroupManagerWatchdogTest : public Test
149152
auto watchdog = std::make_unique<StrictMock<MockWatchdogIf>>();
150153
watchdog_ = watchdog.get();
151154

155+
// Mock the proc launcher calls
156+
auto process_interface = std::make_unique<NiceMock<osal::MockIProcess>>();
157+
process_interface_ = process_interface.get();
158+
ON_CALL(*process_interface_, startProcess)
159+
.WillByDefault(DoAll(SetArgReferee<0>(kMockPid), Return(osal::OsalReturnType::kSuccess)));
160+
ON_CALL(*process_interface_, waitForkRunning).WillByDefault(Return(osal::OsalReturnType::kSuccess));
161+
ON_CALL(*process_interface_, requestTermination).WillByDefault(Return(osal::OsalReturnType::kSuccess));
162+
ON_CALL(*process_interface_, forceTermination).WillByDefault(Return(osal::OsalReturnType::kFail));
163+
152164
auto config = makeMinimalConfig();
153165

154166
process_group_manager_ = std::make_unique<ProcessGroupManager>(
155167
takeGraphConfig(config),
156168
std::move(alive_monitor),
157169
std::move(recovery_client),
158170
std::move(watchdog),
159-
config.takeWatchdog());
171+
config.takeWatchdog(),
172+
std::move(process_interface));
160173
}
161174

162175
void TearDown() override
@@ -168,6 +181,7 @@ class ProcessGroupManagerWatchdogTest : public Test
168181
MockRecoveryClient* recovery_client_{};
169182
IRecoveryClient::RecoveryRequestCallback recovery_callback_{};
170183
MockWatchdogIf* watchdog_{};
184+
osal::MockIProcess* process_interface_{};
171185
NiceMock<MockSupervisionFactory> factory_{};
172186
std::unique_ptr<ProcessGroupManager> process_group_manager_;
173187
};

‎score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,11 @@ ProcessGroupManager::ProcessGroupManager(
4444
std::unique_ptr<saf::daemon::IAliveMonitor> alive_monitor,
4545
std::shared_ptr<IRecoveryClient> recovery_client,
4646
std::unique_ptr<score::mw::lifecycle::internal::watchdog::IWatchdogIf> watchdog,
47-
std::optional<configuration::WatchdogConfig>&& watchdog_config)
47+
std::optional<configuration::WatchdogConfig>&& watchdog_config,
48+
std::unique_ptr<osal::IProcess> process_interface)
4849
: configuration_(std::move(config)),
4950
watchdog_config_(watchdog_config),
50-
process_interface_(),
51+
process_interface_(std::move(process_interface)),
5152
file_waiter_(),
5253
process_map_(nullptr),
5354
thread_pool_(nullptr),
@@ -148,7 +149,8 @@ bool ProcessGroupManager::initializeProcessGroups()
148149
configuration_.components_.size() + configuration_.run_targets_.size() + 2,
149150
configuration_,
150151
worker_jobs_,
151-
ProcessHandling{&process_interface_, process_map_, &file_waiter_, alive_monitor_->getSupervisionFactory()});
152+
ProcessHandling{
153+
process_interface_.get(), process_map_, &file_waiter_, alive_monitor_->getSupervisionFactory()});
152154

153155
LM_LOG_DEBUG() << "Graph initialized successfully";
154156
return true;

‎score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.hpp‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,15 @@ class ProcessGroupManager final : public IRunTargetControl
7272
/// the Alive Monitor thread of process state changes.
7373
/// @param watchdog A unique pointer to an IWatchdogIf instance serviced during the main loop. May be nullptr in
7474
/// legacy configuration where no watchdog is wired.
75+
/// @param process_interface The interface used to launch and terminate processes. Defaults to the POSIX
76+
/// ProcessLauncher.
7577
ProcessGroupManager(
7678
GraphConfig&& config,
7779
std::unique_ptr<saf::daemon::IAliveMonitor> alive_monitor,
7880
std::shared_ptr<IRecoveryClient> recovery_client,
7981
std::unique_ptr<score::mw::lifecycle::internal::watchdog::IWatchdogIf> watchdog,
80-
std::optional<configuration::WatchdogConfig>&& watchdog_config);
82+
std::optional<configuration::WatchdogConfig>&& watchdog_config,
83+
std::unique_ptr<osal::IProcess> process_interface = std::make_unique<osal::ProcessLauncher>());
8184

8285
/// @brief Initializes the process group manager.
8386
/// Sets up a signal handler for SIGINT and SIGTERM so that the main loop of
@@ -197,7 +200,7 @@ class ProcessGroupManager final : public IRunTargetControl
197200
std::optional<configuration::WatchdogConfig> watchdog_config_;
198201

199202
/// @brief The process interface object associated with the ProcessGroupManager.
200-
osal::ProcessLauncher process_interface_;
203+
std::unique_ptr<osal::IProcess> process_interface_;
201204

202205
/// @brief Waits for FileState ready conditions; injected into ProcessInfoNode via ProcessHandling.
203206
osal::FileWaiter file_waiter_;

0 commit comments

Comments
 (0)