#include <app_install_helper.h>
#include <memory.h>
-#include <sm_db.h>
#include <sm_request.h>
#include <sm_api.h>
#include <temp_test_user.h>
#include <synchronization_pipe.h>
+#include <dpl/test/safe_cleanup.h>
class ScopedInstaller {
public:
- ScopedInstaller(const AppInstallHelper &appInstallHelper, bool requestUid = true)
- : m_appInstallHelper(appInstallHelper), m_shouldUninstall(true), m_requestUid(requestUid),
+ ScopedInstaller(const AppInstallHelper &app, bool requestUid = true)
+ : m_appId(app.getAppId()),
+ m_uid(app.getUID()),
+ m_installType(app.getInstallType()),
+ m_shouldUninstall(true),
+ m_requestUid(requestUid),
m_creatorPid(getpid())
{
SecurityManagerTest::InstallRequest instReq;
-
- if (m_appInstallHelper.getIsHybrid())
+ instReq.setAppId(app.getAppId());
+ instReq.setPkgId(app.getPkgId());
+ if (app.getIsHybrid())
instReq.setHybrid();
- instReq.setAppId(m_appInstallHelper.getAppId());
- instReq.setPkgId(m_appInstallHelper.getPkgId());
- if (m_appInstallHelper.getInstallType() != SM_APP_INSTALL_NONE)
- instReq.setInstallType(m_appInstallHelper.getInstallType());
+ if (app.getInstallType() != SM_APP_INSTALL_NONE)
+ instReq.setInstallType(app.getInstallType());
if (requestUid)
- instReq.setUid(m_appInstallHelper.getUID());
- if (!m_appInstallHelper.getVersion().empty())
- instReq.setAppTizenVersion(m_appInstallHelper.getVersion());
- if (!m_appInstallHelper.getAuthor().empty())
- instReq.setAuthorId(m_appInstallHelper.getAuthor());
- for (const auto& typePaths : m_appInstallHelper.getDirsMap())
+ instReq.setUid(app.getUID());
+ if (!app.getVersion().empty())
+ instReq.setAppTizenVersion(app.getVersion());
+ if (!app.getAuthor().empty())
+ instReq.setAuthorId(app.getAuthor());
+ for (const auto& typePaths : app.getDirsMap())
for (const auto& path : typePaths.second)
instReq.addPath(path, typePaths.first);
- for (const auto& typePaths : m_appInstallHelper.getFilesMap())
+ for (const auto& typePaths : app.getFilesMap())
for (const auto& path : typePaths.second)
instReq.addPath(path, typePaths.first);
- for (const auto &priv : m_appInstallHelper.getPrivileges()) {
+ for (const auto &priv : app.getPrivileges()) {
instReq.addPrivilege(priv.c_str());
}
SecurityManagerTest::Api::install(instReq);
ScopedInstaller(const ScopedInstaller &) = delete;
ScopedInstaller(ScopedInstaller &&other)
- : m_appInstallHelper(std::move(other.m_appInstallHelper)),
+ : m_appId(std::move(other.m_appId)),
+ m_uid(other.m_uid),
+ m_installType(other.m_installType),
m_shouldUninstall(other.m_shouldUninstall),
m_requestUid(other.m_requestUid),
m_creatorPid(other.m_creatorPid)
{
+ other.m_uid = 0;
other.m_shouldUninstall = false;
other.m_creatorPid = -1;
}
virtual ~ScopedInstaller() {
if (m_creatorPid == getpid())
- uninstallApp();
+ {
+ SafeCleanup::run([this]{ uninstallApp(); });
+ }
}
void uninstallApp() {
if (!m_shouldUninstall)
return;
SecurityManagerTest::InstallRequest uninstReq;
- uninstReq.setAppId(m_appInstallHelper.getAppId());
+ uninstReq.setAppId(m_appId);
if (m_requestUid)
- uninstReq.setUid(m_appInstallHelper.getUID());
-
+ uninstReq.setUid(m_uid);
+ if (m_installType != SM_APP_INSTALL_NONE)
+ uninstReq.setInstallType(m_installType);
SecurityManagerTest::Api::uninstall(uninstReq);
m_shouldUninstall = false;
}
- AppInstallHelper& getAIH() {
- return m_appInstallHelper;
- }
-
protected:
- AppInstallHelper m_appInstallHelper;
+ std::string m_appId;
+ uid_t m_uid;
+ app_install_type m_installType;
bool m_shouldUninstall;
bool m_requestUid;
pid_t m_creatorPid;