From: Zofia Abramowska Date: Tue, 8 Apr 2025 10:42:07 +0000 (+0200) Subject: security-manager: remove manual forks from ScopedAppLauncher X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F62%2F322762%2F2;p=platform%2Fcore%2Ftest%2Fsecurity-tests.git security-manager: remove manual forks from ScopedAppLauncher Change-Id: If6b88d39a2b6cea4aff073876f54b47bc21efa93 --- diff --git a/src/security-manager-tests/common/scoped_app_launcher.cpp b/src/security-manager-tests/common/scoped_app_launcher.cpp index 6a48b161..1f53fc40 100644 --- a/src/security-manager-tests/common/scoped_app_launcher.cpp +++ b/src/security-manager-tests/common/scoped_app_launcher.cpp @@ -23,32 +23,41 @@ using namespace SecurityManagerTest; ScopedAppLauncher::ScopedAppLauncher(const AppInstallHelper& app, - const std::function& runInAppContext) : - m_uid(app.getUID()), - m_appId(app.getAppId()) + const std::function& runInAppContext) + : m_uid(app.getUID()), + m_gid(app.getGID()), + m_appId(app.getAppId()) { - m_pid = fork(); - RUNNER_ASSERT_ERRNO_MSG(m_pid >= 0, "Fork failed"); - if (m_pid != 0) { - m_syncPipe.claimParentEp(); - m_syncPipe.wait(); - } else { + launch(runInAppContext); +} + +ScopedAppLauncher::ScopedAppLauncher(const AppInstallHelper &app, const TemporaryTestUser &user, + const std::function &runInAppContext) + + : m_uid(user.getUid()), + m_gid(user.getGid()), + m_appId(app.getAppId()) +{ + + launch(runInAppContext); +} + +void ScopedAppLauncher::launch(const std::function &runInAppContext) +{ + m_pid = runInChild([&] { m_syncPipe.claimChildEp(); - try { - RUNNER_ASSERT_ERRNO_MSG(setLauncherSecurityAttributes(app.getUID(), app.getGID()) == 0, - "launcher failed"); - Api::prepareAppCandidate(); - Api::prepareApp(app.getAppId()); - runInAppContext(); - } catch (...) { - m_syncPipe.post(); - throw; - } + RUNNER_ASSERT_ERRNO_MSG(setLauncherSecurityAttributes(m_uid, m_gid) == 0, + "launcher failed"); + Api::prepareAppCandidate(); + Api::prepareApp(m_appId); m_syncPipe.post(); + runInAppContext(); m_syncPipe.wait(); - exit(0); - } + }); + + m_syncPipe.claimParentEp(); + m_syncPipe.wait(); } ScopedAppLauncher::~ScopedAppLauncher() diff --git a/src/security-manager-tests/common/scoped_app_launcher.h b/src/security-manager-tests/common/scoped_app_launcher.h index 133e7c86..970fedff 100644 --- a/src/security-manager-tests/common/scoped_app_launcher.h +++ b/src/security-manager-tests/common/scoped_app_launcher.h @@ -19,19 +19,24 @@ #include #include +#include class ScopedAppLauncher final { public: explicit ScopedAppLauncher(const AppInstallHelper& app, const std::function& runInAppContext = []{}); + ScopedAppLauncher(const AppInstallHelper& app, const TemporaryTestUser& user, + const std::function& runInAppContext = []{}); ~ScopedAppLauncher(); ScopedAppLauncher(const ScopedAppLauncher&) = delete; ScopedAppLauncher& operator=(const ScopedAppLauncher&) = delete; private: + void launch(const std::function& runInAppContext); SynchronizationPipe m_syncPipe; pid_t m_pid; const uid_t m_uid; + const gid_t m_gid; const std::string m_appId; };