From: Rafal Krypa Date: Wed, 20 Apr 2016 15:00:46 +0000 (+0200) Subject: security-manager-tests: Fix security_manager_12_(...) X-Git-Tag: security-manager_5.5_testing~20^2~91 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=959178f77631e65d8fbb6f79f646ca46461e57a6;p=platform%2Fcore%2Ftest%2Fsecurity-tests.git security-manager-tests: Fix security_manager_12_(...) Fix the test fetching entire policy with privacy-manager API. This test incorrectly assumes that the only policy fetched from security-manager is policy for test users and applications created in this test case. But security-manager, when queried for entire policy by admin user fetches policy for all apps, including preloaded. This fix first queries security-manager for existing policy, then adds test users and apps, fetches the policy again and finally analyzes the difference. Change-Id: I5cde709b326b43939dc3a403e49b37d1083bec60 Signed-off-by: Rafal Krypa --- diff --git a/src/security-manager-tests/common/sm_policy_request.cpp b/src/security-manager-tests/common/sm_policy_request.cpp index 043b8d16..debda17b 100644 --- a/src/security-manager-tests/common/sm_policy_request.cpp +++ b/src/security-manager-tests/common/sm_policy_request.cpp @@ -121,6 +121,39 @@ void PolicyEntry::free(void) security_manager_policy_entry_free(m_entry); } +bool PolicyEntry::operator==(const PolicyEntry &other) const +{ + auto cmp = [](const std::pair &a, const std::pair &b)->bool + { + return (a.first) ? (b.first && a.second == b.second) : !b.first; + }; + + return ( + cmp(m_appId, other.m_appId) && + cmp(m_user, other.m_user) && + cmp(m_privilege, other.m_privilege) && + cmp(m_currentLevel, other.m_currentLevel) && + cmp(m_maxLevel, other.m_maxLevel)); +} + +std::string PolicyEntry::toString() const +{ + std::stringstream ss; + auto append = [&](const std::pair &x) + { + if (x.first) + ss << x.second; + ss << '\0'; + }; + + append(m_appId); + append(m_user); + append(m_privilege); + append(m_currentLevel); + append(m_maxLevel); + + return ss.str(); +} PolicyRequest::PolicyRequest() : m_req(nullptr), diff --git a/src/security-manager-tests/common/sm_policy_request.h b/src/security-manager-tests/common/sm_policy_request.h index bd313296..4c121027 100644 --- a/src/security-manager-tests/common/sm_policy_request.h +++ b/src/security-manager-tests/common/sm_policy_request.h @@ -50,6 +50,8 @@ public: void free(void); friend std::ostream& operator<<(std::ostream &, const PolicyEntry&); + bool operator==(const PolicyEntry &) const; + std::string toString() const; private: policy_entry *m_entry; @@ -84,4 +86,13 @@ std::ostream& operator<<(std::ostream &os, const SecurityManagerTest::PolicyRequ } // namespace SecurityManagerTest +namespace std { + +template<> +struct hash { + size_t operator()(const SecurityManagerTest::PolicyEntry &x) const { return hash()(x.toString()); } +}; + +} // namespace std + #endif // SECURITY_MANAGER_TEST_USERREQUEST diff --git a/src/security-manager-tests/security_manager_tests.cpp b/src/security-manager-tests/security_manager_tests.cpp index 4868809d..14016503 100644 --- a/src/security-manager-tests/security_manager_tests.cpp +++ b/src/security-manager-tests/security_manager_tests.cpp @@ -1340,15 +1340,18 @@ RUNNER_MULTIPROCESS_TEST(security_manager_11_privacy_manager_fetch_whole_policy_ RUNNER_MULTIPROCESS_TEST(security_manager_12_privacy_manager_fetch_whole_policy_for_admin_privileged) { + std::vector oldPolicyVec; + Api::getPolicy(PolicyEntry(), oldPolicyVec); + std::unordered_set oldPolicySet(oldPolicyVec.begin(), oldPolicyVec.end()); + //TEST DATA const std::vector usernames = {"sm_test_12_user_name_1", "sm_test_12_user_name_2"}; - unsigned int privileges_count = 0; + unsigned int privileges_count = oldPolicyVec.size(); std::map>> users2AppsMap; std::map> apps2PrivsMap; for (const auto &username : usernames) { - for(unsigned int i = 0; i < MANY_APPS.size(); ++i) { apps2PrivsMap.insert(std::pair>( MANY_APPS.at(i), std::set( @@ -1357,11 +1360,11 @@ RUNNER_MULTIPROCESS_TEST(security_manager_12_privacy_manager_fetch_whole_policy_ privileges_count+=MANY_APPS_PRIVILEGES.at(i).size(); }; - users2AppsMap.insert(std::pair>>(username, apps2PrivsMap)); + users2AppsMap.insert(std::make_pair(username, apps2PrivsMap)); }; - users2AppsMap.at(usernames.at(1)).insert(std::pair>( - PRIVILEGE_MANAGER_APP, std::set{PRIVILEGE_MANAGER_SELF_PRIVILEGE, PRIVILEGE_MANAGER_ADMIN_PRIVILEGE})); + users2AppsMap.at(usernames.at(1)).insert(std::make_pair(PRIVILEGE_MANAGER_APP, + std::set{PRIVILEGE_MANAGER_SELF_PRIVILEGE, PRIVILEGE_MANAGER_ADMIN_PRIVILEGE})); privileges_count += 2; //TEST DATA END @@ -1419,14 +1422,16 @@ RUNNER_MULTIPROCESS_TEST(security_manager_12_privacy_manager_fetch_whole_policy_ RUNNER_ASSERT_MSG(result == 0, "drop_root_privileges failed"); std::vector policyEntries; - PolicyEntry filter; //this call should succeed as the calling user is privileged - Api::getPolicy(filter, policyEntries); + Api::getPolicy(PolicyEntry(), policyEntries); RUNNER_ASSERT_MSG(policyEntries.size() != 0, "Policy is empty"); RUNNER_ASSERT_MSG(policyEntries.size() == privileges_count, "Number of policies doesn't match - should be: " << privileges_count << " and is " << policyEntries.size()); for (const auto &policyEntry : policyEntries) { + if (oldPolicySet.count(policyEntry)) + continue; + std::string user = policyEntry.getUser(); std::string app = policyEntry.getAppId(); std::string privilege = policyEntry.getPrivilege();