1 #include <cynara_test_admin.h>
3 #include <tests_common.h>
12 std::ostream& operator<<(std::ostream& os, const cynara_admin_policy *const *policies)
15 os << "{" << std::endl;
16 for (size_t i=0; policies[i] != nullptr; ++i) {
18 os << " " << formatCstr(policies[i]->bucket);
19 os << " " << formatCstr(policies[i]->client);
20 os << " " << formatCstr(policies[i]->user);
21 os << " " << formatCstr(policies[i]->privilege);
22 os << " " << policies[i]->result;
23 os << " " << formatCstr(policies[i]->result_extra);
24 if (policies[i+1] != nullptr)
25 os << " }," << std::endl;
27 os << " }" << std::endl;
35 CynaraPoliciesContainer::CynaraPoliciesContainer()
39 CynaraPoliciesContainer::~CynaraPoliciesContainer()
41 for (struct cynara_admin_policy &policy : m_policies) {
45 free(policy.privilege);
46 free(policy.result_extra);
50 void CynaraPoliciesContainer::add(const char *bucket,
53 const char *privilege,
55 const char *resultExtra)
57 m_policies.push_back({ nullptr, nullptr, nullptr, nullptr, 0, nullptr });
58 struct cynara_admin_policy &policy = m_policies.back();
60 policy.bucket = strdup(bucket);
62 policy.client = strdup(client);
64 policy.user = strdup(user);
66 policy.privilege = strdup(privilege);
67 policy.result = result;
69 policy.result_extra = strdup(resultExtra);
72 CynaraTestAdmin::CynaraTestAdmin()
75 int ret = cynara_admin_initialize(&m_admin);
76 RUNNER_ASSERT_MSG(ret == CYNARA_ADMIN_API_SUCCESS,
77 "cynara_admin_initialize failed. ret: " << ret);
78 RUNNER_ASSERT_MSG(m_admin != nullptr, "cynara_admin struct was not initialized");
81 CynaraTestAdmin::~CynaraTestAdmin()
83 cynara_admin_finish(m_admin);
86 void CynaraTestAdmin::setPolicies(const CynaraPoliciesContainer &policiesContainer,
89 const cynara_admin_policy *policies[policiesContainer.m_policies.size()+1];
91 for (size_t i = 0; i < policiesContainer.m_policies.size(); ++i) {
92 policies[i] = &policiesContainer.m_policies[i];
94 policies[policiesContainer.m_policies.size()] = nullptr;
96 int ret = cynara_admin_set_policies(m_admin, policies);
97 RUNNER_ASSERT_MSG(ret == expectedResult,
98 "cynara_admin_set_policies returned wrong value: "
99 << ret << " != " << expectedResult << ". "
100 << "policies:\n" << policies);
103 void CynaraTestAdmin::setBucket(const char *bucket, int operation, const char *extra,
106 int ret = cynara_admin_set_bucket(m_admin, bucket, operation, extra);
107 RUNNER_ASSERT_MSG(ret == expectedResult,
108 "cynara_admin_set_bucket returned wrong value: "
109 << ret << " != " << expectedResult << "."
110 << " bucket: " << formatCstr(bucket) << ","
111 << " operation: " << operation << ","
112 << " extra: " << formatCstr(extra));
115 void CynaraTestAdmin::adminCheck(const char *startBucket, int recursive,
116 const char *client, const char *user, const char *privilege,
117 int expectedCheckResult, const char *expectedCheckResultExtra,
121 char *checkResultExtra = nullptr;
123 int ret = cynara_admin_check(m_admin,
124 startBucket, recursive,
125 client, user, privilege,
126 &checkResult, &checkResultExtra);
127 CStringPtr extra(checkResultExtra);
129 auto dump = [&]() -> std::string
132 s << " functionReturn: " << ret << ","
133 << " functionExpectedReturn: " << expectedResult << ",";
135 s << " startBucket: " << formatCstr(startBucket) << ","
136 << " recursive: " << recursive << ","
137 << " client: " << formatCstr(client) << ","
138 << " user: " << formatCstr(user) << ","
139 << " privilege: " << formatCstr(privilege) << ",";
141 s << " checkResult: " << checkResult << ","
142 << " expectedCheckResult: " << expectedCheckResult << ","
143 << " checkResultExtra: " << formatCstr(checkResultExtra) << ","
144 << " expectedCheckResultExtra: " << formatCstr(expectedCheckResultExtra);
148 RUNNER_ASSERT_MSG(ret == expectedResult,
149 "cynara_admin_check returned wrong value: "
150 << ret << " != " << expectedResult << "."
153 RUNNER_ASSERT_MSG(checkResult == expectedCheckResult,
154 "cynara_admin_check returned wrong check result: "
155 << checkResult << " != " << expectedCheckResult << "."
158 RUNNER_ASSERT_MSG(formatCstr(checkResultExtra) == formatCstr(expectedCheckResultExtra),
159 "cynara_admin_check returned wrong check result extra: "
160 << formatCstr(checkResultExtra) << " != "
161 << formatCstr(expectedCheckResultExtra) << "."