Add wrap for cynara_admin_list_policies_description 84/33084/8
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Mon, 5 Jan 2015 10:23:32 +0000 (11:23 +0100)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Thu, 15 Jan 2015 18:21:45 +0000 (19:21 +0100)
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
tests/cynara-tests/common/cynara_test_admin.h

index 58823f7..2ba519c 100644 (file)
 
 #include <cynara_test_admin.h>
 #include <memory.h>
+#include <plugins.h>
 #include <tests_common.h>
 
 #include <algorithm>
 #include <cstring>
-#include <fstream>
+#include <cstdlib>
+#include <ostream>
 #include <string>
 #include <sstream>
 
@@ -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<Cynara::PolicyType>(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
index 1b64bf0..6d58afd 100644 (file)
@@ -18,6 +18,7 @@
 #define CYNARA_TEST_ADMIN_H
 
 #include <cynara_test_commons.h>
+#include <plugins.h>
 
 #include <cynara-admin.h>
 #include <ostream>
@@ -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;
 };