CKM: Add error description in error message.
[platform/core/test/security-tests.git] / tests / ckm / ckm-common.cpp
index c3753d3..ce4e0cf 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-manager.h>
+#include <dbus_access.h>
+
+const char* SERVICE[] = {
+        "/org/freedesktop/systemd1/unit/central_2dkey_2dmanager_2dlistener_2eservice",
+        "/org/freedesktop/systemd1/unit/central_2dkey_2dmanager_2eservice" };
+
+void start_service(ServiceIdx idx)
+{
+    DBusAccess dbus(SERVICE[idx]);
+    dbus.start();
+}
+
+void stop_service(ServiceIdx idx)
+{
+    DBusAccess dbus(SERVICE[idx]);
+    dbus.stop();
+}
+
 
 void switch_to_storage_user(const char* label)
 {
@@ -44,15 +64,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
@@ -60,12 +74,23 @@ CharPtr get_label()
 {
     int ret;
     char* my_label = NULL;
-    RUNNER_ASSERT_MSG(0 == (ret = smack_new_label_from_self(&my_label)),
+    RUNNER_ASSERT_MSG(0 <= (ret = smack_new_label_from_self(&my_label)),
                          "Failed to get smack label for self. Error: " << ret);
 
     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 +111,41 @@ 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_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;
+}
+