#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>
&& 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()
<< 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
#define CYNARA_TEST_ADMIN_H
#include <cynara_test_commons.h>
+#include <plugins.h>
#include <cynara-admin.h>
#include <ostream>
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;
};