CKM: Adjust tests to AliasInfo changes 53/293653/3
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 1 Jun 2023 13:20:43 +0000 (15:20 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Tue, 6 Jun 2023 15:09:29 +0000 (17:09 +0200)
Change-Id: Id1c3b12fdc7bdba4fd73a49c9ae9ad411635fb8d

src/ckm/ckm-common.cpp
src/ckm/ckm-common.h
src/ckm/privileged/system-db.cpp
src/ckm/unprivileged/main.cpp

index c34aaa2..7a584ba 100644 (file)
@@ -387,59 +387,47 @@ void check_alias_list(const CKM::AliasVector& expected)
     RUNNER_ASSERT_MSG(expected == actual, "Actual list of aliases differ from expected list.");
 }
 
-void check_alias_info_list_helper(const CKM::AliasInfoVector& expected,
-                                  const CKM::AliasInfoVector& actual,
+void check_alias_info_list_helper(const PasswordInfoVector& expected,
+                                  const std::unordered_map<std::string, bool>& actual,
                                   const std::string &userSmackLabel)
 {
     std::string errorLogMsg;
-    std::unordered_map<std::string, bool> aliasPwdMap;
 
     RUNNER_ASSERT_MSG(expected.size() == actual.size(), "Aliases item count differs, expected: " <<
         expected.size() << " actual: " << actual.size());
 
-    for (const auto &it : actual)
-    {
-        aliasPwdMap[std::get<0>(it)] = std::get<1>(it).passwordProtected;
-    }
-
-
     for (const auto &it : expected)
     {
-        auto aliasPwd = aliasPwdMap.find(userSmackLabel + std::get<0>(it));
-        if (aliasPwd != aliasPwdMap.end()) {
-            if (aliasPwd->second != std::get<1>(it).passwordProtected) {
-                errorLogMsg += "Alias: " + std::get<0>(it) + " has wrong encryption status: "
-                                + std::to_string(std::get<1>(it).passwordProtected) + "\n";
+        auto aliasPwd = actual.find(userSmackLabel + it.alias);
+        if (aliasPwd != actual.end()) {
+            if (aliasPwd->second != it.passwordProtected) {
+                errorLogMsg += "Alias: " + it.alias + " has wrong encryption status: "
+                                + std::to_string(it.passwordProtected) + "\n";
             }
         }
         else {
-            errorLogMsg += "Expected alias: " + std::get<0>(it) + " not found.\n";
+            errorLogMsg += "Expected alias: " + it.alias + " not found.\n";
         }
     }
 
     if (!errorLogMsg.empty()) {
-        for (const auto &it : actual)
+        for (const auto& [alias, passwordProtected] : actual)
         {
-            errorLogMsg += "Actual alias: " + std::get<0>(it) + " status: "
-                + std::to_string(std::get<1>(it).passwordProtected) + "\n";
+            errorLogMsg += "Actual alias: " + alias + " status: "
+                + std::to_string(passwordProtected) + "\n";
         }
         RUNNER_FAIL_MSG("Actual list of aliases differ from expected list.\n" + errorLogMsg);
     }
 }
 
-std::pair<std::string, CKM::AliasInfo> make_alias_info(const std::string& alias, bool password)
-{
-    return std::make_pair(alias, CKM::AliasInfo({password, CKM::BackendId::SW}));
-}
-
-void check_alias_info_list(const CKM::AliasInfoVector& expected)
+void check_alias_info_list(const PasswordInfoVector& expected)
 {
     ckmc_alias_info_list_s *aliasInfoList = NULL;
     int ret = ckmc_get_data_alias_info_list(&aliasInfoList);
     RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, "Failed to get the list of data aliases. " << ret << " / "
                       << CKMCErrorToString(ret));
 
-    CKM::AliasInfoVector actual;
+    std::unordered_map<std::string, bool> actual;
     ckmc_alias_info_list_s *plist = aliasInfoList;
     char* alias;
     bool isPasswordProtected;
@@ -453,7 +441,8 @@ void check_alias_info_list(const CKM::AliasInfoVector& expected)
         RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, "Failed to get password protection status" << ret << " / "
                           << CKMCErrorToString(ret));
         RUNNER_ASSERT_MSG(alias != nullptr, "Got null alias. Iterator: " << it);
-        actual.push_back(make_alias_info(alias, isPasswordProtected));
+
+        actual[alias] = isPasswordProtected;
         plist = plist->next;
         it++;
     }
index f930657..115c4a4 100644 (file)
@@ -145,11 +145,19 @@ void reset_user_data(uid_t user_id, const char *passwd);
 
 ckmc_raw_buffer_s prepare_message_buffer(const char * input);
 void check_alias_list(const CKM::AliasVector& expected);
-void check_alias_info_list_helper(const CKM::AliasInfoVector& expected,
-                                  const CKM::AliasInfoVector& actual,
+
+struct PasswordInfo {
+    PasswordInfo(const CKM::Alias &alias, bool passwordProtected) : alias(alias), passwordProtected(passwordProtected) {}
+
+    CKM::Alias alias;
+    bool passwordProtected;
+};
+typedef std::vector<PasswordInfo> PasswordInfoVector;
+
+void check_alias_info_list_helper(const PasswordInfoVector& expected,
+                                  const std::unordered_map<std::string, bool>& actual,
                                   const std::string &userSmackLabel = {});
-std::pair<std::string, CKM::AliasInfo> make_alias_info(const std::string& alias, bool password);
-void check_alias_info_list(const CKM::AliasInfoVector& expected);
+void check_alias_info_list(const PasswordInfoVector& expected);
 
 typedef enum {
     ALIAS_KEY,
index e9ce359..b7edf6b 100644 (file)
@@ -527,11 +527,11 @@ RUNNER_TEST(T5046_CLIENT_GET_ALIAS_STATUS_NO_PASSWORD, RemoveDataEnv<0>)
     save_data(TEST_SYSTEM_ALIAS_2.c_str(), TEST_DATA);
 
     // [test]
-    CKM::AliasInfoVector aliasInfoVector;
-    aliasInfoVector.push_back(make_alias_info(TEST_SYSTEM_ALIAS.c_str(), false));
-    aliasInfoVector.push_back(make_alias_info(TEST_SYSTEM_ALIAS_2.c_str(), false));
+    PasswordInfoVector expected;
+    expected.emplace_back(TEST_SYSTEM_ALIAS, false);
+    expected.emplace_back(TEST_SYSTEM_ALIAS_2, false);
 
-    check_alias_info_list(aliasInfoVector);
+    check_alias_info_list(expected);
 }
 
 RUNNER_TEST(T5047_CLIENT_GET_ALIAS_STATUS_PASSWORD_PROTECTED, RemoveDataEnv<0>)
@@ -551,10 +551,10 @@ RUNNER_TEST(T5047_CLIENT_GET_ALIAS_STATUS_PASSWORD_PROTECTED, RemoveDataEnv<0>)
     save_data((TEST_SYSTEM_ALIAS_2 + "1").c_str(), TEST_DATA, strlen(TEST_DATA), TEST_PASSWORD);
 
     // [test]
-    CKM::AliasInfoVector aliasInfoVector;
-    aliasInfoVector.push_back(make_alias_info(TEST_SYSTEM_ALIAS.c_str(), false));
-    aliasInfoVector.push_back(make_alias_info(TEST_SYSTEM_ALIAS_2.c_str(), true));
-    aliasInfoVector.push_back(make_alias_info((TEST_SYSTEM_ALIAS_2 + "1").c_str(),true));
+    PasswordInfoVector expected;
+    expected.emplace_back(TEST_SYSTEM_ALIAS, false);
+    expected.emplace_back(TEST_SYSTEM_ALIAS_2, true);
+    expected.emplace_back(TEST_SYSTEM_ALIAS_2 + "1", true);
 
-    check_alias_info_list(aliasInfoVector);
+    check_alias_info_list(expected);
 }
index 5078773..9204738 100644 (file)
@@ -442,7 +442,7 @@ RUNNER_TEST(T1024_app_user_save_keys_get_alias_pwd)
     const int aliasNameCount = 10;
     auto manager = CKM::Manager::create();
 
-    CKM::AliasInfoVector expected;
+    PasswordInfoVector expected;
     CKM::RawBuffer buffer(KEY_PEM.begin(), KEY_PEM.end());
     auto key = CKM::Key::create(buffer, CKM::Password());
     std::string currentAlias;
@@ -453,21 +453,31 @@ RUNNER_TEST(T1024_app_user_save_keys_get_alias_pwd)
     {
         CKM::Policy policy = generate_ckm_policy(it);
         currentAlias = "T1024_appkey" + std::to_string(it);
-        expected.push_back(make_alias_info(currentAlias, !policy.password.empty()));
+        expected.emplace_back(currentAlias, !policy.password.empty());
         RUNNER_ASSERT_MSG(
             CKM_API_SUCCESS == (exitCode = manager->saveKey(currentAlias, key, policy)),
             "Error=" << CKM::APICodeToString(exitCode));
     }
 
-    CKM::AliasInfoVector actual;
+    CKM::AliasInfoVector aliasInfoVector;
+    std::unordered_map<std::string, bool> actual;
 
     RUNNER_ASSERT_MSG(
-        CKM_API_SUCCESS == (exitCode = manager->getKeyAliasInfoVector(actual)),
+        CKM_API_SUCCESS == (exitCode = manager->getKeyAliasInfoVector(aliasInfoVector)),
         "Error=" << CKM::APICodeToString(exitCode));
     RUNNER_ASSERT_MSG(
-        actual.size() == (beforeSaveAliasCount + aliasNameCount),
-        "Wrong aliases count: " << actual.size() << " Expected: "
+            aliasInfoVector.size() == (beforeSaveAliasCount + aliasNameCount),
+        "Wrong aliases count: " << aliasInfoVector.size() << " Expected: "
         << (beforeSaveAliasCount + aliasNameCount));
+
+    bool status;
+    for (const auto &info : aliasInfoVector) {
+        exitCode = manager->getKeyEncryptionStatus(info.alias, status);
+        RUNNER_ASSERT_MSG(CKM_API_SUCCESS == exitCode, "Error=" << CKM::APICodeToString(exitCode));
+
+        actual[info.alias] = status;
+    }
+
     check_alias_info_list_helper(expected, actual, "/User ");
 
     remove_user_data(USER_APP);
@@ -481,7 +491,7 @@ RUNNER_TEST(T1025_app_user_save_certificates_get_alias_pwd)
     const int aliasNameCount = 10;
     auto manager = CKM::Manager::create();
 
-    CKM::AliasInfoVector expected;
+    PasswordInfoVector expected;
     auto cert = TestData::getTestCertificate(TestData::TEST_LEAF);
     std::string currentAlias;
 
@@ -490,20 +500,31 @@ RUNNER_TEST(T1025_app_user_save_certificates_get_alias_pwd)
     {
         CKM::Policy policy = generate_ckm_policy(it);
         currentAlias = "T1025_appcert" + std::to_string(it);
-        expected.push_back(make_alias_info(currentAlias, !policy.password.empty()));
+        expected.emplace_back(currentAlias, !policy.password.empty());
         RUNNER_ASSERT_MSG(
                 CKM_API_SUCCESS == (exitCode = manager->saveCertificate(currentAlias, cert, policy)),
                     "Error=" << CKM::APICodeToString(exitCode));
     }
 
-    CKM::AliasInfoVector actual;
+    CKM::AliasInfoVector aliasInfoVector;
+    std::unordered_map<std::string, bool> actual;
+
     RUNNER_ASSERT_MSG(
-        CKM_API_SUCCESS == (exitCode = manager->getCertificateAliasInfoVector(actual)),
+        CKM_API_SUCCESS == (exitCode = manager->getCertificateAliasInfoVector(aliasInfoVector)),
         "Error=" << CKM::APICodeToString(exitCode));
     RUNNER_ASSERT_MSG(
-        actual.size() == (beforeSaveAliasCount + aliasNameCount),
-        "Wrong aliases count: " << actual.size() << " Expected: "
+            aliasInfoVector.size() == (beforeSaveAliasCount + aliasNameCount),
+        "Wrong aliases count: " << aliasInfoVector.size() << " Expected: "
         << (beforeSaveAliasCount + aliasNameCount));
+
+    bool status;
+    for (const auto &info : aliasInfoVector) {
+        exitCode = manager->getCertificateEncryptionStatus(info.alias, status);
+        RUNNER_ASSERT_MSG(CKM_API_SUCCESS == exitCode, "Error=" << CKM::APICodeToString(exitCode));
+
+        actual[info.alias] = status;
+    }
+
     check_alias_info_list_helper(expected, actual, "/User ");
 
     remove_user_data(USER_APP);
@@ -517,7 +538,7 @@ RUNNER_TEST(T1026_app_user_save_data_get_alias_pwd)
     const int aliasNameCount = 10;
     auto manager = CKM::Manager::create();
 
-    CKM::AliasInfoVector expected;
+    PasswordInfoVector expected;
     std::string binData = "My bin data";
     CKM::RawBuffer buffer(binData.begin(), binData.end());
     std::string currentAlias;
@@ -527,20 +548,31 @@ RUNNER_TEST(T1026_app_user_save_data_get_alias_pwd)
     {
         CKM::Policy policy = generate_ckm_policy(it);
         currentAlias = "T1026_appdata" + std::to_string(it);
-        expected.push_back(make_alias_info(currentAlias, !policy.password.empty()));
+        expected.emplace_back(currentAlias, !policy.password.empty());
         RUNNER_ASSERT_MSG(
             CKM_API_SUCCESS == (exitCode = manager->saveData(currentAlias, buffer, policy)),
                 "Error=" << CKM::APICodeToString(exitCode));
     }
 
-    CKM::AliasInfoVector actual;
+    CKM::AliasInfoVector aliasInfoVector;
+    std::unordered_map<std::string, bool> actual;
+
     RUNNER_ASSERT_MSG(
-        CKM_API_SUCCESS == (exitCode = manager->getDataAliasInfoVector(actual)),
+        CKM_API_SUCCESS == (exitCode = manager->getDataAliasInfoVector(aliasInfoVector)),
         "Error=" << CKM::APICodeToString(exitCode));
     RUNNER_ASSERT_MSG(
-        actual.size() == (beforeSaveAliasCount + aliasNameCount),
-        "Wrong aliases count: " << actual.size() << " Expected: "
+        aliasInfoVector.size() == (beforeSaveAliasCount + aliasNameCount),
+        "Wrong aliases count: " << aliasInfoVector.size() << " Expected: "
         << (beforeSaveAliasCount + aliasNameCount));
+
+    bool status;
+    for (const auto &info : aliasInfoVector) {
+        exitCode = manager->getDataEncryptionStatus(info.alias, status);
+        RUNNER_ASSERT_MSG(CKM_API_SUCCESS == exitCode, "Error=" << CKM::APICodeToString(exitCode));
+
+        actual[info.alias] = status;
+    }
+
     check_alias_info_list_helper(expected, actual, "/User ");
 
     remove_user_data(USER_APP);