Merging tizen into ckm. Stage 1.
[platform/core/test/security-tests.git] / tests / ckm / ckm-common.cpp
index 6b13962..19020c1 100644 (file)
  * @author     Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
  * @version    1.0
  */
+#include <string>
 
 #include <sys/smack.h>
+#include <ckmc/ckmc-type.h>
 #include <ckm-common.h>
 #include <tests_common.h>
 #include <access_provider2.h>
+#include <ckm/ckm-control.h>
 #include <ckm/ckm-manager.h>
+#include <ckmc/ckmc-control.h>
+#include <ckmc/ckmc-manager.h>
+#include <service_manager.h>
+
+const char* SERVICE[] = {
+        "central-key-manager-listener.service",
+        "central-key-manager.service" };
+
+void start_service(ServiceIdx idx)
+{
+    ServiceManager sm(SERVICE[idx]);
+    sm.startService();
+}
+
+void stop_service(ServiceIdx idx)
+{
+    ServiceManager sm(SERVICE[idx]);
+    sm.stopService();
+}
+
 
 void switch_to_storage_user(const char* label)
 {
@@ -44,15 +67,9 @@ DBCleanup::~DBCleanup()
 {
     // Let it throw. If db can't be cleared further tests are unreliable
     CKM::ManagerShPtr mgr = CKM::Manager::create();
-    for(const auto& it:m_keys)
-        mgr->removeKey(it);
-    m_keys.clear();
-    for(const auto& it:m_certs)
-        mgr->removeCertificate(it);
-    m_certs.clear();
-    for(const auto& it:m_data)
-        mgr->removeData(it);
-    m_data.clear();
+    for(const auto& it:m_aliases)
+        mgr->removeAlias(it);
+    m_aliases.clear();
 }
 
 // returns process label
@@ -66,6 +83,17 @@ CharPtr get_label()
     return CharPtr(my_label, free);
 }
 
+std::string aliasWithLabel(const char *label, const char *alias)
+{
+    if(label)
+    {
+        std::stringstream ss;
+        ss << label << std::string(ckmc_label_name_separator) << alias;
+        return ss.str();
+    }
+    return std::string(alias);
+}
+
 // changes process label
 void change_label(const char* label)
 {
@@ -86,3 +114,65 @@ ScopedLabel::~ScopedLabel()
      */
     change_label(m_original_label.get());
 }
+
+const char * CKMCErrorToString(int error) {
+#define ERRORDESCRIBE(name) case name: return #name
+    switch(error) {
+        ERRORDESCRIBE(CKMC_ERROR_NONE);
+        ERRORDESCRIBE(CKMC_ERROR_INVALID_PARAMETER);
+        ERRORDESCRIBE(CKMC_ERROR_OUT_OF_MEMORY);
+        ERRORDESCRIBE(CKMC_ERROR_PERMISSION_DENIED);
+        ERRORDESCRIBE(CKMC_ERROR_SOCKET);
+        ERRORDESCRIBE(CKMC_ERROR_BAD_REQUEST);
+        ERRORDESCRIBE(CKMC_ERROR_BAD_RESPONSE);
+        ERRORDESCRIBE(CKMC_ERROR_SEND_FAILED);
+        ERRORDESCRIBE(CKMC_ERROR_RECV_FAILED);
+        ERRORDESCRIBE(CKMC_ERROR_AUTHENTICATION_FAILED);
+        ERRORDESCRIBE(CKMC_ERROR_BUFFER_TOO_SMALL);
+        ERRORDESCRIBE(CKMC_ERROR_SERVER_ERROR);
+        ERRORDESCRIBE(CKMC_ERROR_DB_LOCKED);
+        ERRORDESCRIBE(CKMC_ERROR_DB_ERROR);
+        ERRORDESCRIBE(CKMC_ERROR_DB_ALIAS_EXISTS);
+        ERRORDESCRIBE(CKMC_ERROR_DB_ALIAS_UNKNOWN);
+        ERRORDESCRIBE(CKMC_ERROR_VERIFICATION_FAILED);
+        ERRORDESCRIBE(CKMC_ERROR_INVALID_FORMAT);
+        ERRORDESCRIBE(CKMC_ERROR_FILE_ACCESS_DENIED);
+        ERRORDESCRIBE(CKMC_ERROR_NOT_EXPORTABLE);
+        ERRORDESCRIBE(CKMC_ERROR_FILE_SYSTEM);
+        ERRORDESCRIBE(CKMC_ERROR_UNKNOWN);
+        default: return "Error not defined";
+    }
+#undef ERRORDESCRIBE
+}
+
+std::string CKMCReadableError(int error) {
+    std::string output("Error: ");
+    output += std::to_string(error);
+    output += " Description: ";
+    output += CKMCErrorToString(error);
+    return output;
+}
+
+void unlock_user_data(uid_t user_id, const char *passwd)
+{
+    int ret;
+    auto control = CKM::Control::create();
+    RUNNER_ASSERT_MSG(CKM_API_SUCCESS == (ret = control->unlockUserKey(user_id, passwd)),
+                      "Error=" << CKM::ErrorToString(ret));
+}
+
+void remove_user_data(uid_t user_id)
+{
+    int ret;
+    auto control = CKM::Control::create();
+    RUNNER_ASSERT_MSG(CKM_API_SUCCESS == (ret = control->lockUserKey(user_id)),
+                      "Error=" << CKM::ErrorToString(ret));
+    RUNNER_ASSERT_MSG(CKM_API_SUCCESS == (ret = control->removeUserData(user_id)),
+                      "Remove user data failed with error: " << CKM::ErrorToString(ret));
+}
+
+void reset_user_data(uid_t user_id, const char *passwd)
+{
+    remove_user_data(user_id);
+    unlock_user_data(user_id, passwd);
+}