1 #include <cynara_test_admin.h>
2 #include <tests_common.h>
9 std::string formatCstr(const char *cstr)
12 return std::string("nullptr");
13 return std::string("\"") + cstr + "\"";
16 std::ostream& operator<<(std::ostream& os, const cynara_admin_policy *const *policies)
19 os << "{" << std::endl;
20 for (size_t i=0; policies[i] != nullptr; ++i) {
22 os << " " << formatCstr(policies[i]->bucket);
23 os << " " << formatCstr(policies[i]->client);
24 os << " " << formatCstr(policies[i]->user);
25 os << " " << formatCstr(policies[i]->privilege);
26 os << " " << policies[i]->result;
27 os << " " << formatCstr(policies[i]->result_extra);
28 if (policies[i+1] != nullptr)
29 os << " }," << std::endl;
31 os << " }" << std::endl;
39 CynaraPoliciesContainer::CynaraPoliciesContainer()
43 CynaraPoliciesContainer::~CynaraPoliciesContainer()
45 for (struct cynara_admin_policy &policy : m_policies) {
49 free(policy.privilege);
50 free(policy.result_extra);
54 void CynaraPoliciesContainer::add(const char *bucket,
57 const char *privilege,
59 const char *resultExtra)
61 m_policies.push_back({ nullptr, nullptr, nullptr, nullptr, 0, nullptr });
62 struct cynara_admin_policy &policy = m_policies.back();
64 policy.bucket = strdup(bucket);
66 policy.client = strdup(client);
68 policy.user = strdup(user);
70 policy.privilege = strdup(privilege);
71 policy.result = result;
73 policy.result_extra = strdup(resultExtra);
76 CynaraTestAdmin::CynaraTestAdmin()
79 int ret = cynara_admin_initialize(&m_admin);
80 RUNNER_ASSERT_MSG_BT(ret == CYNARA_ADMIN_API_SUCCESS,
81 "cynara_admin_initialize failed. ret: " << ret);
82 RUNNER_ASSERT_MSG_BT(m_admin != nullptr, "cynara_admin struct was not initialized");
85 CynaraTestAdmin::~CynaraTestAdmin()
87 cynara_admin_finish(m_admin);
90 void CynaraTestAdmin::setPolicies(const CynaraPoliciesContainer &policiesContainer,
93 const cynara_admin_policy *policies[policiesContainer.m_policies.size()+1];
95 for (size_t i = 0; i < policiesContainer.m_policies.size(); ++i) {
96 policies[i] = &policiesContainer.m_policies[i];
98 policies[policiesContainer.m_policies.size()] = nullptr;
100 int ret = cynara_admin_set_policies(m_admin, policies);
101 RUNNER_ASSERT_MSG_BT(ret == expectedResult,
102 "cynara_admin_set_policies returned wrong value: "
103 << ret << " != " << expectedResult << ". "
104 << "policies:\n" << policies);
107 void CynaraTestAdmin::setBucket(const char *bucket, int operation, const char *extra,
110 int ret = cynara_admin_set_bucket(m_admin, bucket, operation, extra);
111 RUNNER_ASSERT_MSG_BT(ret == expectedResult,
112 "cynara_admin_set_bucket returned wrong value: "
113 << ret << " != " << expectedResult << "."
114 << " bucket: " << formatCstr(bucket) << ","
115 << " operation: " << operation << ","
116 << " extra: " << formatCstr(extra));