From b9cdf0145ed5dcebd2c6d082dddf6d7b65f58e31 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Mon, 5 Jan 2015 11:23:32 +0100 Subject: [PATCH] Add wrap for cynara_admin_list_policies_description Add method Admin::listDescriptions executing cynara_admin_list_policies_description and checking if received result match expected. Change-Id: I1d729f83e2719360be5e4cdf405409561377c410 --- tests/cynara-tests/common/cynara_test_admin.cpp | 83 ++++++++++++++++++++++++- tests/cynara-tests/common/cynara_test_admin.h | 4 +- 2 files changed, 85 insertions(+), 2 deletions(-) diff --git a/tests/cynara-tests/common/cynara_test_admin.cpp b/tests/cynara-tests/common/cynara_test_admin.cpp index 58823f7..2ba519c 100644 --- a/tests/cynara-tests/common/cynara_test_admin.cpp +++ b/tests/cynara-tests/common/cynara_test_admin.cpp @@ -16,11 +16,13 @@ #include #include +#include #include #include #include -#include +#include +#include #include #include @@ -94,6 +96,15 @@ bool policy_equal(const cynara_admin_policy &p1, const cynara_admin_policy &p2) && string_compare(p1.result_extra, p2.result_extra) == 0); } +std::ostream& operator<<(std::ostream& os, const CynaraTestPlugins::Descriptions &descriptions) +{ + os << "{" << std::endl; + for (const auto &desc : descriptions) + os << "{ [" << desc.type << "], <" << desc.name << "> }" << std::endl; + os << "}"; + return os; +} + } // namespace anonymous CynaraPoliciesContainer::CynaraPoliciesContainer() @@ -342,4 +353,74 @@ void Admin::erasePolicies(const char *startBucket, int recursive, << dump()); } +CynaraTestPlugins::Descriptions parseAndRelease(cynara_admin_policy_descr **descriptions) +{ + CynaraTestPlugins::Descriptions ret; + + if (descriptions) { + for (size_t i = 0; descriptions[i] != nullptr; ++i) { + auto descPtr = descriptions[i]; + ret.push_back({ static_cast(descPtr->result), + std::string(descPtr->name) }); + free(descPtr->name); + free(descPtr); + } + free(descriptions); + } + return ret; +} + +void Admin::listPoliciesDescriptions(CynaraTestPlugins::Descriptions &expectedDescriptions, + int expectedResult) +{ + struct cynara_admin_policy_descr **descriptions = nullptr; + + int ret = cynara_admin_list_policies_descriptions(m_admin, &descriptions); + + CynaraTestPlugins::Descriptions receivedDescriptions = parseAndRelease(descriptions); + + auto description_less = [](const Cynara::PolicyDescription &d1, + const Cynara::PolicyDescription &d2) -> bool { + return d1.type != d2.type ? d1.type < d2.type : d1.name < d2.name; + }; + + auto description_equal = [](const Cynara::PolicyDescription &d1, + const Cynara::PolicyDescription &d2) -> bool { + return d1.type == d2.type && d1.name == d2.name; + }; + + std::sort(receivedDescriptions.begin(), receivedDescriptions.end(), description_less); + std::sort(expectedDescriptions.begin(), expectedDescriptions.end(), description_less); + + auto dump = [&]() -> std::string + { + std::stringstream s; + s << " functionReturn: " << ret << "," + << " functionExpectedReturn: " << expectedResult << ","; + + s << " receivedPolicyDescriptionList: " << receivedDescriptions << "," + << " expectedPolicyDescriptionList: " << expectedDescriptions << "."; + return s.str(); + }; + + RUNNER_ASSERT_MSG(ret == expectedResult, + "cynara_admin_list_policies_descriptions returned wrong value: " + << ret << " != " << expectedResult << "." + << dump()); + + RUNNER_ASSERT_MSG(receivedDescriptions.size() == expectedDescriptions.size(), + "size of list returned by cynara_admin_list_policies_descriptions: " + << receivedDescriptions.size() + << " doesn't match expected list size: " + << expectedDescriptions.size() << "." + << dump()); + + RUNNER_ASSERT_MSG(std::equal(receivedDescriptions.begin(), + receivedDescriptions.end(), + expectedDescriptions.begin(), + description_equal), + "list returned by cynara_admin_list_policies_descriptions " + "doesn't match expected. " << dump()); +} + } // namespace CynaraTestAdmin diff --git a/tests/cynara-tests/common/cynara_test_admin.h b/tests/cynara-tests/common/cynara_test_admin.h index 1b64bf0..6d58afd 100644 --- a/tests/cynara-tests/common/cynara_test_admin.h +++ b/tests/cynara-tests/common/cynara_test_admin.h @@ -18,6 +18,7 @@ #define CYNARA_TEST_ADMIN_H #include +#include #include #include @@ -85,7 +86,8 @@ public: void erasePolicies(const char *startBucket, int recursive, const char *client, const char *user, const char *privilege, int expectedResult = CYNARA_API_SUCCESS); - + void listPoliciesDescriptions(CynaraTestPlugins::Descriptions &expectedDescriptions, + int expectedResult = CYNARA_API_SUCCESS); private: struct cynara_admin *m_admin; }; -- 2.7.4