security-manager-tests: use full proper path for applications 60/36060/3
authorRafal Krypa <r.krypa@samsung.com>
Thu, 26 Feb 2015 14:25:53 +0000 (15:25 +0100)
committerRafal Krypa <r.krypa@samsung.com>
Mon, 2 Mar 2015 14:49:11 +0000 (15:49 +0100)
Changing function appDirPath to generate proper application path using
pkgId and appId values. Previous implementation tried to install all
applications directly into TZ_USER_APP directory, which was incorrect.

Change-Id: Iabdffd20ca37b6e2fb2c9ecb50d9ba58b16a857b
Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
tests/common/tests_common.cpp
tests/common/tests_common.h
tests/security-manager-tests/security_manager_tests.cpp

index 8e60c2b4f1abb73ca204f2014c299cb1c1610194..a8afc7ba908a51fcac8575a6bc2760ed84c2a3d1 100644 (file)
@@ -187,10 +187,20 @@ int files_compare(int fd1, int fd2)
 
 void mkdirSafe(const std::string &path, mode_t mode)
 {
-    RUNNER_ASSERT_ERRNO_MSG(0 == mkdir(path.c_str(), mode),
+    RUNNER_ASSERT_ERRNO_MSG(0 == mkdir(path.c_str(), mode) || errno == EEXIST,
                             "mkdir for <" << path << "> with mode <" << mode << "> failed");
 }
 
+void mktreeSafe(const std::string &path, mode_t mode)
+{
+    // Create subsequent parent directories
+    // Assume that path is absolute - i.e. starts with '/'
+    for (size_t pos = 0; (pos = path.find("/", pos + 1)) != std::string::npos; )
+        mkdirSafe(path.substr(0, pos).c_str(), mode);
+
+    mkdirSafe(path, mode);
+}
+
 void creatSafe(const std::string &path, mode_t mode)
 {
     RUNNER_ASSERT_ERRNO_MSG(-1 != creat(path.c_str(), mode),
index 88c8205f419dc544b75cac6eddbddb6b8eb500cc..52c05008b6e92b8d0e0d7ae984c209c0d8c8ae10 100644 (file)
@@ -49,6 +49,7 @@ void remove_process_group(const char* group_name);
 std::string formatCstr(const char *cstr);
 int files_compare(int fd1, int fd2);
 void mkdirSafe(const std::string &path, mode_t mode);
+void mktreeSafe(const std::string &path, mode_t mode);
 void creatSafe(const std::string &path, mode_t mode);
 void symlinkSafe(const std::string &targetPath, const std::string &linkPath);
 void removeDir(const std::string &path);
index 7a23d2c36c446b98f9b61502c45f9b6c6ba57046..d7faca82f5949bf15e9ed176ae10f15bc3c1872e 100644 (file)
@@ -596,7 +596,8 @@ static uid_t getGlobalUserId(void)
     return tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
 }
 
-static const std::string appDirPath(const TemporaryTestUser &user)
+static const std::string appDirPath(const TemporaryTestUser &user,
+        const std::string &appId, const std::string &pkgId)
 {
     struct tzplatform_context *tzCtxPtr = nullptr;
 
@@ -612,7 +613,7 @@ static const std::string appDirPath(const TemporaryTestUser &user)
                       "tzplatform_context_getenv failed"
                           << "for getting sys rw app of user <" << user.getUserName() << ">");
 
-    return appDir;
+    return std::string(appDir) + "/" + pkgId + "/" + appId;
 }
 
 static const std::string nonAppDirPath(const TemporaryTestUser &user)
@@ -674,7 +675,7 @@ static void createTestDir(const std::string &dir)
     mode_t execFileMode = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH;
     mode_t normalFileMode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;
 
-    mkdirSafe(dir, dirMode);
+    mktreeSafe(dir, dirMode);
     creatSafe(dir + "/" + EXEC_FILE, execFileMode);
     creatSafe(dir + "/" + NORMAL_FILE, normalFileMode);
     symlinkSafe(dir + "/" + EXEC_FILE, dir + "/" + LINK_PREFIX + EXEC_FILE);
@@ -692,9 +693,10 @@ static void createInnerAppDir(const std::string &dir, const std::string &nonAppD
                 dir + "/" + LINK_PREFIX + "non_app_" + NORMAL_FILE);
 }
 
-static void generateAppDir(const TemporaryTestUser &user)
+static void generateAppDir(const TemporaryTestUser &user,
+       const std::string &appId, const std::string &pkgId)
 {
-    const std::string dir = appDirPath(user);
+    const std::string dir = appDirPath(user, appId, pkgId);
     const std::string nonAppDir = nonAppDirPath(user);
 
     createInnerAppDir(dir, nonAppDir);
@@ -711,15 +713,17 @@ static void generateNonAppDir(const TemporaryTestUser &user)
     createTestDir(dir + "/inner_dir");
 }
 
-static void createTestDirs(const TemporaryTestUser &user)
+static void createTestDirs(const TemporaryTestUser &user,
+       const std::string &appId, const std::string &pkgId)
 {
-    generateAppDir(user);
+    generateAppDir(user, appId, pkgId);
     generateNonAppDir(user);
 }
 
-static void removeTestDirs(const TemporaryTestUser &user)
+static void removeTestDirs(const TemporaryTestUser &user,
+       const std::string &appId, const std::string &pkgId)
 {
-    removeDir(appDirPath(user));
+    removeDir(appDirPath(user, appId, pkgId));
     removeDir(nonAppDirPath(user));
 }
 
@@ -733,10 +737,10 @@ RUNNER_CHILD_TEST(security_manager_04a_app_install_uninstall_by_app_user_for_sel
     TemporaryTestUser testUser(new_user_name, GUM_USERTYPE_NORMAL, false);
     testUser.create();
 
-    removeTestDirs(testUser);
-    createTestDirs(testUser);
+    removeTestDirs(testUser, sm_app_id, sm_pkg_id);
+    createTestDirs(testUser, sm_app_id, sm_pkg_id);
 
-    const std::string userAppDirPath = appDirPath(testUser);
+    const std::string userAppDirPath = appDirPath(testUser, sm_app_id, sm_pkg_id);
 
     //switch user to non-root
     result = drop_root_privileges(testUser.getUid(), testUser.getGid());
@@ -765,10 +769,10 @@ RUNNER_CHILD_TEST(security_manager_04b_app_install_by_root_for_app_user)
     TemporaryTestUser testUser(new_user_name, GUM_USERTYPE_NORMAL, false);
     testUser.create();
 
-    removeTestDirs(testUser);
-    createTestDirs(testUser);
+    removeTestDirs(testUser, sm_app_id, sm_pkg_id);
+    createTestDirs(testUser, sm_app_id, sm_pkg_id);
 
-    install_and_check(sm_app_id, sm_pkg_id, testUser, appDirPath(testUser), true);
+    install_and_check(sm_app_id, sm_pkg_id, testUser, appDirPath(testUser, sm_app_id, sm_pkg_id), true);
 
     //switch user to non-root - root may not uninstall apps for specified users
     result = drop_root_privileges(testUser.getUid(), testUser.getGid());
@@ -835,8 +839,8 @@ RUNNER_CHILD_TEST(security_manager_07_user_add_app_install)
     test_user.create();
     test_user.getUidString(uid_string);
 
-    removeTestDirs(test_user);
-    createTestDirs(test_user);
+    removeTestDirs(test_user, sm_app_id, sm_pkg_id);
+    createTestDirs(test_user, sm_app_id, sm_pkg_id);
 
     install_app(sm_app_id, sm_pkg_id, test_user.getUid());
 
@@ -863,8 +867,8 @@ RUNNER_CHILD_TEST(security_manager_08_user_double_add_double_remove)
     test_user.create();
     test_user.getUidString(uid_string);
 
-    removeTestDirs(test_user);
-    createTestDirs(test_user);
+    removeTestDirs(test_user, sm_app_id, sm_pkg_id);
+    createTestDirs(test_user, sm_app_id, sm_pkg_id);
 
     addUserRequest.setUid(test_user.getUid());
     addUserRequest.setUserType(SM_USER_TYPE_NORMAL);
@@ -900,8 +904,8 @@ RUNNER_CHILD_TEST(security_manager_09_add_user_offline)
     TemporaryTestUser test_user(new_user_name, GUM_USERTYPE_NORMAL, true);
     test_user.create();
 
-    removeTestDirs(test_user);
-    createTestDirs(test_user);
+    removeTestDirs(test_user, app_id, pkg_id);
+    createTestDirs(test_user, app_id, pkg_id);
 
     install_app(app_id, pkg_id, test_user.getUid());