SM : added ASKUSER policy test cases to privacy_manager test suite
[platform/core/test/security-tests.git] / src / security-manager-tests / test_cases_privacy_manager.cpp
index 0c1d494..7d81a2f 100644 (file)
 #include <dpl/test/test_runner.h>
 #include <memory.h>
 #include <passwd_access.h>
+#include <policy_configuration.h>
+#include <privilege_info.h>
 #include <scoped_label.h>
+#include <scoped_installer.h>
 #include <sm_api.h>
 #include <sm_commons.h>
 #include <sm_policy_request.h>
@@ -1229,3 +1232,156 @@ RUNNER_CHILD_TEST(security_manager_17_privacy_manager_fetch_whole_policy_for_sel
         RUNNER_ASSERT_MSG(policyEntries.size() == 4, "Number of policies doesn't match - should be: 4 and is " << policyEntries.size());
     }
 }
+
+RUNNER_CHILD_TEST(security_manager_18_privacy_manager_privacy_related_privileges_policy_install_remove)
+{
+    TemporaryTestUser user("sm_test_18_username", GUM_USERTYPE_NORMAL);
+    user.create();
+
+    AppInstallHelper helper("sm_test_18",
+                            user.getUid());
+    helper.addPrivileges({
+                             "http://tizen.org/privilege/telephony",
+                             "http://tizen.org/privilege/led",
+                             "http://tizen.org/privilege/callhistory.read", // privacy-related privileges start here
+                             "http://tizen.org/privilege/account.read",
+                             "http://tizen.org/privilege/healthinfo"
+                         });
+
+    PolicyEntry filter (helper.getAppId(), user.getUidString(), SECURITY_MANAGER_ANY);
+    std::vector<PolicyEntry> policyEntries;
+
+    {
+        ScopedInstaller installer(helper);
+        unsigned int privacyNum = 0;
+        for (auto &priv : helper.getPrivileges()) {
+            if (1 == privilege_info_is_privacy(priv.c_str()))
+                ++privacyNum;
+        };
+
+        Api::getPolicy(filter, policyEntries);
+
+        RUNNER_ASSERT_MSG(policyEntries.size() == helper.getPrivileges().size(),
+        "Number of policy entries doesn't match; should be " << helper.getPrivileges().size() << " but is " << policyEntries.size());
+
+        if (PolicyConfiguration::getIsAskuserEnabled() ) {
+            unsigned int privacyActNum = 0;
+            for (auto &entry : policyEntries)
+                if (1 == privilege_info_is_privacy(entry.getPrivilege().c_str())) {
+                    RUNNER_ASSERT_MSG(entry.getCurrentLevel() == "Ask user", "Invalid policy setup; policy should be \"Ask user\" but is " << entry.getCurrentLevel());
+                    ++privacyActNum;
+                }
+            RUNNER_ASSERT_MSG(privacyActNum == privacyNum, "Should be " << privacyNum << " privacy privileges, but is " << privacyActNum);
+        }
+    }
+
+    policyEntries.clear();
+
+    Api::getPolicy(filter, policyEntries);
+
+    RUNNER_ASSERT_MSG(policyEntries.size() == 0, "After deinstallation, policy entries size should be 0, but is: " << policyEntries.size());
+}
+
+RUNNER_CHILD_TEST(security_manager_19_privacy_manager_privacy_related_privileges_policy_hybrid)
+{
+    TemporaryTestUser user("sm_test_19_username", GUM_USERTYPE_NORMAL);
+    user.create();
+
+    AppInstallHelper helper1("sm_test_19_app_id_1",
+                            "sm_test_19_pkg_id",
+                            true,
+                            user.getUid(),
+                            "3.0",
+                            true);  // hybrid package
+
+    helper1.addPrivileges({
+                              "http://tizen.org/privilege/telephony",
+                              "http://tizen.org/privilege/led",
+                              "http://tizen.org/privilege/callhistory.read", // privacy-related privileges start here
+                              "http://tizen.org/privilege/account.read",
+                              "http://tizen.org/privilege/healthinfo"
+                         });
+
+    AppInstallHelper helper2("sm_test_19_app_id_2",
+                            "sm_test_19_pkg_id",
+                            true,
+                            user.getUid(),
+                            "3.0",
+                            true);  // hybrid package
+
+    helper2.addPrivileges({
+                              "http://tizen.org/privilege/telephony",
+                              "http://tizen.org/privilege/led",
+                              "http://tizen.org/privilege/callhistory.read", // privacy-related privileges start here
+                          });
+
+    std::vector<PolicyEntry> policyEntries;
+
+    PolicyEntry filter(SECURITY_MANAGER_ANY, user.getUidString(), SECURITY_MANAGER_ANY);
+    {
+        ScopedInstaller installer1(helper1);
+        ScopedInstaller installer2(helper2);
+
+        unsigned int privacyNum1 = 0, privacyNum2 = 0;
+
+        for (auto &priv : helper1.getPrivileges()) {
+            if (1 == privilege_info_is_privacy(priv.c_str()))
+                ++privacyNum1;
+        };
+
+        for (auto &priv : helper2.getPrivileges()) {
+            if (1 == privilege_info_is_privacy(priv.c_str()))
+                ++privacyNum2;
+        };
+
+        Api::getPolicy(filter, policyEntries);
+
+        if (PolicyConfiguration::getIsAskuserEnabled() ) {
+            unsigned int privacyAct1 = 0, privacyAct2 = 0;
+            for (auto &entry : policyEntries) {
+                RUNNER_ASSERT_MSG(entry.getAppId() == helper1.getAppId() || entry.getAppId() == helper2.getAppId(),
+                                  "Invalid appId: should be either " << helper1.getAppId() << " or " << helper2.getAppId() << " but is " << entry.getAppId());
+                if (1 == privilege_info_is_privacy(entry.getPrivilege().c_str())) {
+                    RUNNER_ASSERT_MSG(entry.getCurrentLevel() == "Ask user",
+                                      "Invalid policy setup; policy should be \"Ask user\" but is " << entry.getCurrentLevel());
+                    if (entry.getAppId() == helper1.getAppId())
+                        ++privacyAct1;
+                    else
+                        ++privacyAct2;
+                }
+            }
+            RUNNER_ASSERT_MSG(privacyNum1 == privacyAct1, "Should be " << privacyNum1 << " privacy privileges, but is " << privacyAct1);
+            RUNNER_ASSERT_MSG(privacyNum2 == privacyAct2, "Should be " << privacyNum2 << " privacy privileges, but is " << privacyAct2);
+        }
+    }
+}
+
+RUNNER_CHILD_TEST(security_manager_20_privacy_manager_privacy_related_privielges_policy_admin_check)
+{
+    TemporaryTestUser user("sm_test_20_username", GUM_USERTYPE_NORMAL);
+    user.create();
+
+    AppInstallHelper helper("sm_test_20",
+                            user.getUid());
+
+    helper.addPrivileges({
+                             "http://tizen.org/privilege/telephony",
+                             "http://tizen.org/privilege/led",
+                             "http://tizen.org/privilege/callhistory.read", // privacy-related privileges start here
+                             "http://tizen.org/privilege/account.read",
+                             "http://tizen.org/privilege/healthinfo"
+                         });
+
+    ScopedInstaller installer(helper);
+
+    if (PolicyConfiguration::getIsAskuserEnabled() ) {
+        CynaraTestAdmin::Admin admin;
+        int policyType = 0;
+        admin.getPolicyTypeForDescription("Ask user", policyType);
+        for (auto &priv : helper.getPrivileges()) {
+            if (1 == privilege_info_is_privacy(priv.c_str())) {
+                admin.adminCheck("", true, helper.generateAppLabel().c_str(), user.getUidString().c_str(), priv.c_str(), policyType, nullptr);
+            }
+        }
+    }
+}