From: Zofia Abramowska Date: Fri, 16 Sep 2016 10:11:10 +0000 (+0200) Subject: SM: Add identify app from cynara client tests X-Git-Tag: security-manager_5.5_testing~20^2~45 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ef8e9b1fb69c99356ea3022f87297f921777c261;p=platform%2Fcore%2Ftest%2Fsecurity-tests.git SM: Add identify app from cynara client tests Change-Id: Ia1a167d3efdf851dea9de317dd428f50c68e46b7 --- diff --git a/src/security-manager-tests/common/sm_api.cpp b/src/security-manager-tests/common/sm_api.cpp index 620d76ca..f356efbe 100644 --- a/src/security-manager-tests/common/sm_api.cpp +++ b/src/security-manager-tests/common/sm_api.cpp @@ -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); diff --git a/src/security-manager-tests/common/sm_api.h b/src/security-manager-tests/common/sm_api.h index 86cfd7d4..5266a36e 100644 --- a/src/security-manager-tests/common/sm_api.h +++ b/src/security-manager-tests/common/sm_api.h @@ -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); diff --git a/src/security-manager-tests/test_cases_credentials.cpp b/src/security-manager-tests/test_cases_credentials.cpp index 5efc1662..504a5166 100644 --- a/src/security-manager-tests/test_cases_credentials.cpp +++ b/src/security-manager-tests/test_cases_credentials.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -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); +}