SM: Add identify app from cynara client tests 52/88552/2
authorZofia Abramowska <z.abramowska@samsung.com>
Fri, 16 Sep 2016 10:11:10 +0000 (12:11 +0200)
committerZofia Abramowska <z.abramowska@samsung.com>
Wed, 21 Sep 2016 13:44:34 +0000 (15:44 +0200)
Change-Id: Ia1a167d3efdf851dea9de317dd428f50c68e46b7

src/security-manager-tests/common/sm_api.cpp
src/security-manager-tests/common/sm_api.h
src/security-manager-tests/test_cases_credentials.cpp

index 620d76c..f356efb 100644 (file)
@@ -259,6 +259,41 @@ void getPkgIdByPid(pid_t pid, std::string *pkgId, std::string *appId, lib_retcod
     }
 }
 
+void getPkgIdByCynaraClient(const std::string &client, std::string *pkgId, std::string *appId,
+                            lib_retcode expectedResult)
+{
+    char *pkg_Id = nullptr;
+    char *app_Id = nullptr;
+
+    int result = security_manager_identify_app_from_cynara_client(client.c_str(),
+                    pkgId == nullptr ? nullptr : &pkg_Id,
+                    appId == nullptr ? nullptr : &app_Id);
+
+    RUNNER_ASSERT_MSG((lib_retcode)result == expectedResult,
+                      "getting pkg id from pid returned wrong value."
+                          << " client: " << client << ";"
+                          << " Result: " << result << ";"
+                          << " Expected result: " << expectedResult);
+
+    if (pkgId && result == SECURITY_MANAGER_SUCCESS) {
+        RUNNER_ASSERT_MSG(pkg_Id != nullptr, "getting pkg and app id did not allocate memory");
+    }
+
+    if (appId && result == SECURITY_MANAGER_SUCCESS) {
+        RUNNER_ASSERT_MSG(app_Id != nullptr, "getting pkg and app id did not allocate memory");
+    }
+
+    if (pkg_Id) {
+        *pkgId = pkg_Id;
+        free(pkg_Id);
+    }
+
+    if (app_Id) {
+        *appId = app_Id;
+        free(app_Id);
+    }
+}
+
 void appHasPrivilege(const char *appId, const char *privilege, uid_t user, int &value, lib_retcode expectedResult)
 {
     int result = security_manager_app_has_privilege(appId, privilege, user, &value);
index 86cfd7d..5266a36 100644 (file)
@@ -46,6 +46,7 @@ void applySharing(const SharingRequest &req, lib_retcode expectedResult = SECURI
 void dropSharing(const SharingRequest &req, lib_retcode expectedResult = SECURITY_MANAGER_SUCCESS);
 void getPkgIdBySocket(int socketFd, std::string *pkgId, std::string *appId, lib_retcode expectedResult = SECURITY_MANAGER_SUCCESS);
 void getPkgIdByPid(pid_t pid, std::string *pkgId, std::string *appId, lib_retcode expectedResult = SECURITY_MANAGER_SUCCESS);
+void getPkgIdByCynaraClient(const std::string &client, std::string *pkgId, std::string *appId, lib_retcode expectedResult = SECURITY_MANAGER_SUCCESS);
 void appHasPrivilege(const char *appId, const char *privilege, uid_t user, int &value, lib_retcode expectedResult = SECURITY_MANAGER_SUCCESS);
 void getSecurityManagerGroups(char ***groups, size_t *groups_count, lib_retcode expectedResult = SECURITY_MANAGER_SUCCESS);
 void registerPaths(const PathsRequest& req, lib_retcode expectedResult = SECURITY_MANAGER_SUCCESS);
index 5efc166..504a516 100644 (file)
@@ -21,6 +21,7 @@
 #include <unistd.h>
 
 #include <access_provider.h>
+#include <cynara_helpers_creds.h>
 #include <dpl/test/test_runner.h>
 #include <memory.h>
 #include <passwd_access.h>
@@ -342,3 +343,123 @@ RUNNER_CHILD_TEST(security_manager_52e_get_id_by_pid)
 
     Api::uninstall(requestUninst);
 }
+
+RUNNER_CHILD_TEST(security_manager_53a_get_id_by_cynara_client)
+{
+    const char *const sm_app_id = "sm_test_53a_app";
+    const char *const sm_pkg_id = "sm_test_53a_pkg";
+
+    InstallRequest requestInst;
+    requestInst.setAppId(sm_app_id);
+    requestInst.setPkgId(sm_pkg_id);
+
+    Api::install(requestInst);
+
+    std::string smackLabel = generateProcessLabel(sm_app_id, sm_pkg_id);
+
+    clientTestTemplate([&] (int sock, pid_t) {
+        std::string rcvPkgId, rcvAppId;
+        CStringPtr cynaraClient(CynaraHelperCredentials::socketGetClient(sock, CLIENT_METHOD_SMACK));
+        RUNNER_ASSERT_MSG(cynaraClient, "Cynara client from socket returned NULL");
+        Api::getPkgIdByCynaraClient(cynaraClient.get(), &rcvPkgId, &rcvAppId);
+        RUNNER_ASSERT_MSG(rcvPkgId == sm_pkg_id, "pkgIds don't match ret = " << rcvPkgId
+                          << "; expected = " << sm_pkg_id);
+        RUNNER_ASSERT_MSG(rcvAppId == sm_app_id, "appIds don't match ret = " << rcvAppId
+                          << "; expected = " << sm_app_id);
+    }, "tcsmc53a", smackLabel);
+
+    InstallRequest requestUninst;
+    requestUninst.setAppId(sm_app_id);
+
+    Api::uninstall(requestUninst);
+}
+
+RUNNER_CHILD_TEST(security_manager_53b_get_id_by_cynara_client_wrong_client)
+{
+
+    std::string rcvPkgId, rcvAppId;
+    Api::getPkgIdByCynaraClient("NotAnApp", &rcvPkgId, &rcvAppId,
+                                SECURITY_MANAGER_ERROR_NO_SUCH_OBJECT);
+}
+
+RUNNER_CHILD_TEST(security_manager_53c_get_id_by_cynara_client_only_pkgid)
+{
+    const char *const sm_app_id = "sm_test_53c_app";
+    const char *const sm_pkg_id = "sm_test_53c_pkg";
+
+    InstallRequest requestInst;
+    requestInst.setAppId(sm_app_id);
+    requestInst.setPkgId(sm_pkg_id);
+
+    Api::install(requestInst);
+
+    std::string smackLabel = generateProcessLabel(sm_app_id, sm_pkg_id);
+
+    clientTestTemplate([&] (int sock, pid_t) {
+        std::string rcvPkgId;
+        CStringPtr cynaraClient(CynaraHelperCredentials::socketGetClient(sock, CLIENT_METHOD_SMACK));
+        RUNNER_ASSERT_MSG(cynaraClient, "Cynara client from socket returned NULL");
+        Api::getPkgIdByCynaraClient(cynaraClient.get(), &rcvPkgId, nullptr);
+        RUNNER_ASSERT_MSG(rcvPkgId == sm_pkg_id, "pkgIds don't match ret = " << rcvPkgId
+                          << "; expected = " << sm_pkg_id);
+    }, "tcsm28c", smackLabel);
+
+    InstallRequest requestUninst;
+    requestUninst.setAppId(sm_app_id);
+
+    Api::uninstall(requestUninst);
+}
+
+RUNNER_CHILD_TEST(security_manager_53d_get_id_by_cynara_client_only_appid)
+{
+    const char *const sm_app_id = "sm_test_53d_app";
+    const char *const sm_pkg_id = "sm_test_53d_pkg";
+
+    InstallRequest requestInst;
+    requestInst.setAppId(sm_app_id);
+    requestInst.setPkgId(sm_pkg_id);
+
+    Api::install(requestInst);
+
+    std::string smackLabel = generateProcessLabel(sm_app_id, sm_pkg_id);
+
+    clientTestTemplate([&] (int sock, pid_t) {
+        std::string rcvAppId;
+        CStringPtr cynaraClient(CynaraHelperCredentials::socketGetClient(sock, CLIENT_METHOD_SMACK));
+        RUNNER_ASSERT_MSG(cynaraClient, "Cynara client from socket returned NULL");
+        Api::getPkgIdByCynaraClient(cynaraClient.get(), nullptr, &rcvAppId);
+        RUNNER_ASSERT_MSG(rcvAppId == sm_app_id, "appIds don't match ret = " << rcvAppId
+                          << "; expected = " << sm_app_id);
+    }, "tcsm28d", smackLabel);
+
+    InstallRequest requestUninst;
+    requestUninst.setAppId(sm_app_id);
+
+    Api::uninstall(requestUninst);
+}
+
+RUNNER_CHILD_TEST(security_manager_53e_get_id_by_cynara_client_nulls)
+{
+    const char *const sm_app_id = "sm_test_53e_app";
+    const char *const sm_pkg_id = "sm_test_53e_pkg";
+
+    InstallRequest requestInst;
+    requestInst.setAppId(sm_app_id);
+    requestInst.setPkgId(sm_pkg_id);
+
+    Api::install(requestInst);
+
+    std::string smackLabel = generateProcessLabel(sm_app_id, sm_pkg_id);
+
+    clientTestTemplate([&] (int sock, pid_t) {
+        std::string rcvAppId;
+        CStringPtr cynaraClient(CynaraHelperCredentials::socketGetClient(sock, CLIENT_METHOD_SMACK));
+        RUNNER_ASSERT_MSG(cynaraClient, "Cynara client from socket returned NULL");
+        Api::getPkgIdByCynaraClient(cynaraClient.get(), nullptr, nullptr, SECURITY_MANAGER_ERROR_INPUT_PARAM);
+    }, "tcsm28e", smackLabel);
+
+    InstallRequest requestUninst;
+    requestUninst.setAppId(sm_app_id);
+
+    Api::uninstall(requestUninst);
+}