From: Marcin Niesluchowski Date: Wed, 9 Jul 2014 12:17:15 +0000 (+0200) Subject: Add cynara test admin class X-Git-Tag: security-manager_5.5_testing~225 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c2ae8801f7396cd87fec28b7fc229defb8e0d4b3;p=platform%2Fcore%2Ftest%2Fsecurity-tests.git Add cynara test admin class Change-Id: I6871e7e51d6f78df03948d7dc83a88e5fe0ffeb3 --- diff --git a/packaging/security-tests.spec b/packaging/security-tests.spec index 95ae4f4..4fde9eb 100644 --- a/packaging/security-tests.spec +++ b/packaging/security-tests.spec @@ -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 diff --git a/tests/cynara-tests/CMakeLists.txt b/tests/cynara-tests/CMakeLists.txt index 7b7a6bf..56a0a3c 100644 --- a/tests/cynara-tests/CMakeLists.txt +++ b/tests/cynara-tests/CMakeLists.txt @@ -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 index 0000000..a3ad140 --- /dev/null +++ b/tests/cynara-tests/common/cynara_test_admin.cpp @@ -0,0 +1,117 @@ +#include +#include + +#include + +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 index 0000000..f6b34f9 --- /dev/null +++ b/tests/cynara-tests/common/cynara_test_admin.h @@ -0,0 +1,41 @@ +#ifndef CYNARA_TEST_ADMIN_H +#define CYNARA_TEST_ADMIN_H + +#include +#include + +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 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