Add cynara test admin class 78/24278/20
authorMarcin Niesluchowski <m.niesluchow@samsung.com>
Wed, 9 Jul 2014 12:17:15 +0000 (14:17 +0200)
committerZofia Abramowska <z.abramowska@samsung.com>
Fri, 1 Aug 2014 11:49:11 +0000 (13:49 +0200)
Change-Id: I6871e7e51d6f78df03948d7dc83a88e5fe0ffeb3

packaging/security-tests.spec
tests/cynara-tests/CMakeLists.txt
tests/cynara-tests/common/cynara_test_admin.cpp [new file with mode: 0644]
tests/cynara-tests/common/cynara_test_admin.h [new file with mode: 0644]

index 95ae4f4..4fde9eb 100644 (file)
@@ -18,6 +18,7 @@ BuildRequires: pkgconfig(dbus-1)
 BuildRequires: pkgconfig(dbus-glib-1)
 BuildRequires: pkgconfig(libiri)
 BuildRequires: pkgconfig(sqlite3)
+BuildRequires: pkgconfig(cynara-admin)
 BuildRequires: pkgconfig(cynara-client)
 BuildRequires: pkgconfig(libtzplatform-config)
 Requires:   smack
index 7b7a6bf..56a0a3c 100644 (file)
@@ -7,11 +7,13 @@ PKG_CHECK_MODULES(CYNARA_TARGET_DEP
     REQUIRED
     dpl-test-efl
     libprivilege-control
+    cynara-admin
     cynara-client
     )
 
 #files to compile
 SET(CYNARA_TARGET_TEST_SOURCES
+    ${PROJECT_SOURCE_DIR}/tests/cynara-tests/common/cynara_test_admin.cpp
     ${PROJECT_SOURCE_DIR}/tests/cynara-tests/cynara-test.cpp
     ${PROJECT_SOURCE_DIR}/tests/cynara-tests/cynara_client.cpp
     )
@@ -23,6 +25,7 @@ INCLUDE_DIRECTORIES(SYSTEM
 
 INCLUDE_DIRECTORIES(
     ${PROJECT_SOURCE_DIR}/tests/common/
+    ${PROJECT_SOURCE_DIR}/tests/cynara-tests/common/
     )
 
 #output format
diff --git a/tests/cynara-tests/common/cynara_test_admin.cpp b/tests/cynara-tests/common/cynara_test_admin.cpp
new file mode 100644 (file)
index 0000000..a3ad140
--- /dev/null
@@ -0,0 +1,117 @@
+#include <cynara_test_admin.h>
+#include <tests_common.h>
+
+#include <fstream>
+
+namespace
+{
+
+std::string formatCstr(const char *cstr)
+{
+    if (!cstr)
+        return std::string("nullptr");
+    return std::string("\"") + cstr + "\"";
+}
+
+std::ostream& operator<<(std::ostream& os, const cynara_admin_policy *const *policies)
+{
+
+    os << "{" << std::endl;
+    for (size_t i=0; policies[i] != nullptr; ++i) {
+        os << "{";
+        os << " " << formatCstr(policies[i]->bucket);
+        os << " " << formatCstr(policies[i]->client);
+        os << " " << formatCstr(policies[i]->user);
+        os << " " << formatCstr(policies[i]->privilege);
+        os << " " << policies[i]->result;
+        os << " " << formatCstr(policies[i]->result_extra);
+        if (policies[i+1] != nullptr)
+            os << " }," << std::endl;
+        else
+            os << " }" << std::endl;
+    }
+    os << "}";
+    return os;
+}
+
+}
+
+CynaraPoliciesContainer::CynaraPoliciesContainer()
+{
+}
+
+CynaraPoliciesContainer::~CynaraPoliciesContainer()
+{
+    for (struct cynara_admin_policy &policy : m_policies) {
+        free(policy.bucket);
+        free(policy.client);
+        free(policy.user);
+        free(policy.privilege);
+        free(policy.result_extra);
+    }
+}
+
+void CynaraPoliciesContainer::add(const char *bucket,
+                                  const char *client,
+                                  const char *user,
+                                  const char *privilege,
+                                  const int result,
+                                  const char *resultExtra)
+{
+    m_policies.push_back({ nullptr, nullptr, nullptr, nullptr, 0, nullptr });
+    struct cynara_admin_policy &policy = m_policies.back();
+    if (bucket)
+        policy.bucket = strdup(bucket);
+    if (client)
+        policy.client = strdup(client);
+    if (user)
+        policy.user = strdup(user);
+    if (privilege)
+        policy.privilege = strdup(privilege);
+    policy.result = result;
+    if (resultExtra)
+        policy.result_extra = strdup(resultExtra);
+}
+
+CynaraTestAdmin::CynaraTestAdmin()
+    : m_admin(nullptr)
+{
+    int ret = cynara_admin_initialize(&m_admin);
+    RUNNER_ASSERT_MSG_BT(ret == CYNARA_ADMIN_API_SUCCESS,
+                         "cynara_admin_initialize failed. ret: " << ret);
+    RUNNER_ASSERT_MSG_BT(m_admin != nullptr, "cynara_admin struct was not initialized");
+}
+
+CynaraTestAdmin::~CynaraTestAdmin()
+{
+    cynara_admin_finish(m_admin);
+}
+
+void CynaraTestAdmin::setPolicies(const CynaraPoliciesContainer &policiesContainer,
+                                  int expectedResult)
+{
+    const cynara_admin_policy *policies[policiesContainer.m_policies.size()+1];
+
+    for (size_t i = 0; i < policiesContainer.m_policies.size(); ++i) {
+        policies[i] = &policiesContainer.m_policies[i];
+    }
+    policies[policiesContainer.m_policies.size()] = nullptr;
+
+    int ret = cynara_admin_set_policies(m_admin, policies);
+    RUNNER_ASSERT_MSG_BT(ret == expectedResult,
+                         "cynara_admin_set_policies returned wrong value: "
+                             << ret << " != " << expectedResult << ". "
+                             << "policies:\n" << policies);
+}
+
+void CynaraTestAdmin::setBucket(const char *bucket, int operation, const char *extra,
+                                int expectedResult)
+{
+    int ret = cynara_admin_set_bucket(m_admin, bucket, operation, extra);
+    RUNNER_ASSERT_MSG_BT(ret == expectedResult,
+                         "cynara_admin_set_bucket returned wrong value: "
+                             << ret << " != " << expectedResult << "."
+                             << " bucket: " << formatCstr(bucket) << ","
+                             << " operation: " << operation << ","
+                             << " extra: " << formatCstr(extra));
+}
diff --git a/tests/cynara-tests/common/cynara_test_admin.h b/tests/cynara-tests/common/cynara_test_admin.h
new file mode 100644 (file)
index 0000000..f6b34f9
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef CYNARA_TEST_ADMIN_H
+#define CYNARA_TEST_ADMIN_H
+
+#include <cynara-admin.h>
+#include <vector>
+
+class CynaraTestAdmin;
+
+class CynaraPoliciesContainer
+{
+public:
+    CynaraPoliciesContainer();
+    virtual ~CynaraPoliciesContainer();
+
+    void add(const char *bucket,
+             const char *client,
+             const char *user,
+             const char *privilege,
+             const int result,
+             const char *resultExtra);
+private:
+    friend class CynaraTestAdmin;
+
+    std::vector<struct cynara_admin_policy> m_policies;
+};
+
+class CynaraTestAdmin
+{
+public:
+    CynaraTestAdmin();
+    virtual ~CynaraTestAdmin();
+
+    void setPolicies(const CynaraPoliciesContainer &policiesContainer,
+                     int expectedResult = CYNARA_ADMIN_API_SUCCESS);
+    void setBucket(const char *bucket, int operation, const char *extra,
+                   int expectedResult = CYNARA_ADMIN_API_SUCCESS);
+private:
+    struct cynara_admin *m_admin;
+};
+
+#endif // CYNARA_TEST_ADMIN_H