Add allow remove set policies cynara tests
[platform/core/test/security-tests.git] / tests / cynara-tests / test_cases.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /*
18  * @file        test_cases.cpp
19  * @author      Aleksander Zdyb <a.zdyb@partner.samsung.com>
20  * @author      Marcin Niesluchowski <m.niesluchow@samsung.com>
21  * @version     1.1
22  * @brief       Tests for libcynara-client and libcynara-admin
23  */
24
25 #include <tests_common.h>
26 #include <cynara_test_client.h>
27 #include <cynara_test_admin.h>
28
29 #include <climits>
30
31 RUNNER_TEST_GROUP_INIT(cynara_tests)
32
33 RUNNER_TEST(tc01_cynara_initialize) {
34     CynaraTestClient cynara;
35 }
36
37 RUNNER_TEST(tc02_admin_initialize) {
38     CynaraTestAdmin admin;
39 }
40
41 RUNNER_TEST(tc03_cynara_check_invalid_params) {
42     CynaraTestClient cynara;
43
44     const char *client = "client03";
45     const char *user = "user03";
46     const char *privilege = "privilege03";
47     const char *session = "session03";
48
49     cynara.check(nullptr, session, user,    privilege, CYNARA_API_INVALID_PARAM);
50     cynara.check(client,  nullptr, user,    privilege, CYNARA_API_INVALID_PARAM);
51     cynara.check(client,  session, nullptr, privilege, CYNARA_API_INVALID_PARAM);
52     cynara.check(client,  session, user,    nullptr,   CYNARA_API_INVALID_PARAM);
53 }
54
55 void checkInvalidPolicy(CynaraTestAdmin &admin,
56                         const char *bucket,
57                         const char *client,
58                         const char *user,
59                         const char *privilege,
60                         const int result,
61                         const char *resultExtra)
62 {
63     CynaraPoliciesContainer cp;
64     cp.add(bucket, client, user, privilege, result, resultExtra);
65
66     admin.setPolicies(cp, CYNARA_ADMIN_API_INVALID_PARAM);
67 }
68
69 RUNNER_TEST(tc04_admin_set_policies_invalid_params) {
70     CynaraTestAdmin admin;
71
72     const char *bucket = CYNARA_ADMIN_DEFAULT_BUCKET;
73     const char *client = "client04";
74     const char *user = "user04";
75     const char *privilege = "privilege04";
76     const int resultAllow = CYNARA_ADMIN_ALLOW;
77     const int resultBucket = CYNARA_ADMIN_BUCKET;
78     const char *resultExtra = nullptr;
79
80     checkInvalidPolicy(admin, nullptr, client,  user,    privilege, resultAllow,  resultExtra);
81     checkInvalidPolicy(admin, bucket,  nullptr, user,    privilege, resultAllow,  resultExtra);
82     checkInvalidPolicy(admin, bucket,  client,  nullptr, privilege, resultAllow,  resultExtra);
83     checkInvalidPolicy(admin, bucket,  client,  user,    nullptr,   resultAllow,  resultExtra);
84     checkInvalidPolicy(admin, bucket,  client,  user,    privilege, INT_MAX,      resultExtra);
85     checkInvalidPolicy(admin, bucket,  client,  user,    privilege, resultBucket, nullptr    );
86 }
87
88 RUNNER_TEST(tc05_admin_set_bucket_invalid_params) {
89     CynaraTestAdmin admin;
90
91     const char *bucket = CYNARA_ADMIN_DEFAULT_BUCKET;
92     const int operationAllow = CYNARA_ADMIN_ALLOW;
93     const int operationDelete = CYNARA_ADMIN_DELETE;
94     const char *extra = nullptr;
95
96     admin.setBucket(nullptr, operationAllow,   extra, CYNARA_ADMIN_API_INVALID_PARAM);
97     admin.setBucket(bucket,  INT_MAX,          extra, CYNARA_ADMIN_API_INVALID_PARAM);
98     admin.setBucket(bucket,  operationDelete,  extra, CYNARA_ADMIN_API_OPERATION_NOT_ALLOWED);
99 }
100
101 RUNNER_TEST(tc06_cynara_check_empty_admin1)
102 {
103     CynaraTestClient cynara;
104
105     const char *client = "client06_1";
106     const char *session = "session06_1";
107     const char *user = "user06_1";
108     const char *privilege = "privilege06_1";
109
110     cynara.check(client, session, user, privilege, CYNARA_API_ACCESS_DENIED);
111 }
112
113 RUNNER_TEST(tc06_cynara_check_empty_admin2)
114 {
115     CynaraTestClient cynara;
116
117     const char *client = CYNARA_ADMIN_WILDCARD;
118     const char *session = "session06_2";
119     const char *user = CYNARA_ADMIN_WILDCARD;
120     const char *privilege = CYNARA_ADMIN_WILDCARD;
121
122     cynara.check(client, session, user, privilege, CYNARA_API_ACCESS_DENIED);
123 }
124
125 RUNNER_TEST(tc07_admin_set_bucket_admin_allow_deny)
126 {
127     CynaraTestAdmin admin;
128     CynaraTestClient cynara;
129
130     const char *bucket = CYNARA_ADMIN_DEFAULT_BUCKET;
131     const char *client = "client07";
132     const char *session = "session07";
133     const char *user = "user07";
134     const char *privilege = "privilege07";
135     const char *extra = nullptr;
136
137     admin.setBucket(bucket, CYNARA_ADMIN_ALLOW, extra);
138
139     cynara.check(client, session, user, privilege, CYNARA_API_SUCCESS);
140
141     admin.setBucket(bucket, CYNARA_ADMIN_DENY, extra);
142
143     cynara.check(client, session, user, privilege, CYNARA_API_ACCESS_DENIED);
144 }
145
146 RUNNER_TEST(tc08_admin_set_policies_allow_remove1)
147 {
148     CynaraTestAdmin admin;
149     CynaraTestClient cynara;
150
151     const char *bucket = CYNARA_ADMIN_DEFAULT_BUCKET;
152     const char *session = "session08_1";
153     const int resultAllow = CYNARA_ADMIN_ALLOW;
154     const int resultDelete = CYNARA_ADMIN_DELETE;
155     const char *resultExtra = nullptr;
156
157     const std::vector< std::vector<const char *> > data = {
158         { "client08_1_a", "user08_1_a", "privilege08_1_a" },
159         { "client08_1_b", "user08_1_b", "privilege08_1_b" },
160     };
161
162     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
163     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
164
165     // allow first policy
166     {
167         CynaraPoliciesContainer cp;
168         cp.add(bucket, data[0][0], data[0][1], data[0][2], resultAllow, resultExtra);
169         admin.setPolicies(cp);
170     }
171     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_SUCCESS);
172     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
173
174     // allow second policy
175     {
176         CynaraPoliciesContainer cp;
177         cp.add(bucket, data[1][0], data[1][1], data[1][2], resultAllow, resultExtra);
178         admin.setPolicies(cp);
179     }
180     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_SUCCESS);
181     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_SUCCESS);
182
183     // delete first policy
184     {
185         CynaraPoliciesContainer cp;
186         cp.add(bucket, data[0][0], data[0][1], data[0][2], resultDelete, resultExtra);
187         admin.setPolicies(cp);
188     }
189     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
190     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_SUCCESS);
191
192     // delete second policy
193     {
194         CynaraPoliciesContainer cp;
195         cp.add(bucket, data[1][0], data[1][1], data[1][2], resultDelete, resultExtra);
196         admin.setPolicies(cp);
197     }
198     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
199     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
200 }
201
202 RUNNER_TEST(tc08_admin_set_policies_allow_remove2)
203 {
204     CynaraTestAdmin admin;
205     CynaraTestClient cynara;
206
207     const char *bucket = CYNARA_ADMIN_DEFAULT_BUCKET;
208     const char *session = "session08_2";
209     const int resultAllow = CYNARA_ADMIN_ALLOW;
210     const int resultDelete = CYNARA_ADMIN_DELETE;
211     const char *resultExtra = nullptr;
212
213     const std::vector< std::vector<const char *> > data = {
214         { "client08_2_a", "user08_2_a", "privilege08_2_a" },
215         { "client08_2_b", "user08_2_b", "privilege08_2_b" },
216     };
217
218     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
219     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
220
221     // allow first policy
222     {
223         CynaraPoliciesContainer cp;
224         cp.add(bucket, data[0][0], data[0][1], data[0][2], resultAllow, resultExtra);
225         admin.setPolicies(cp);
226     }
227     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_SUCCESS);
228     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
229
230     // delete first, allow second policy
231     {
232         CynaraPoliciesContainer cp;
233         cp.add(bucket, data[0][0], data[0][1], data[0][2], resultDelete, resultExtra);
234         cp.add(bucket, data[1][0], data[1][1], data[1][2], resultAllow, resultExtra);
235         admin.setPolicies(cp);
236     }
237     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
238     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_SUCCESS);
239
240     // delete second policy
241     {
242         CynaraPoliciesContainer cp;
243         cp.add(bucket, data[1][0], data[1][1], data[1][2], resultDelete, resultExtra);
244         admin.setPolicies(cp);
245     }
246
247     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
248     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
249 }
250
251 RUNNER_TEST(tc08_admin_set_policies_allow_remove3)
252 {
253     CynaraTestAdmin admin;
254     CynaraTestClient cynara;
255
256     const char *bucket = CYNARA_ADMIN_DEFAULT_BUCKET;
257     const char *session = "session08_3";
258     const int resultAllow = CYNARA_ADMIN_ALLOW;
259     const int resultDelete = CYNARA_ADMIN_DELETE;
260     const char *resultExtra = nullptr;
261
262     const std::vector< std::vector<const char *> > data = {
263         { "client08_3_a", "user08_3_a", "privilege08_3_a" },
264         { "client08_3_b", "user08_3_b", "privilege08_3_b" },
265     };
266
267     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
268     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
269
270     // allow first and second policy
271     {
272         CynaraPoliciesContainer cp;
273         cp.add(bucket, data[0][0], data[0][1], data[0][2], resultAllow, resultExtra);
274         cp.add(bucket, data[1][0], data[1][1], data[1][2], resultAllow, resultExtra);
275         admin.setPolicies(cp);
276     }
277     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_SUCCESS);
278     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_SUCCESS);
279
280     // delete first and second policy
281     {
282         CynaraPoliciesContainer cp;
283         cp.add(bucket, data[0][0], data[0][1], data[0][2], resultDelete, resultExtra);
284         cp.add(bucket, data[1][0], data[1][1], data[1][2], resultDelete, resultExtra);
285         admin.setPolicies(cp);
286     }
287
288     cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
289     cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
290 }