1 #include "test_ccapi_globals.h"
2 #include "test_ccapi_iterators.h"
3 #include "test_ccapi_check.h"
4 #include "test_ccapi_util.h"
5
6 // ---------------------------------------------------------------------------
7
check_cc_ccache_iterator_next(void)8 int check_cc_ccache_iterator_next(void) {
9 cc_int32 err = 0;
10 cc_context_t context = NULL;
11 cc_ccache_t ccache = NULL;
12 cc_ccache_iterator_t iterator = NULL;
13 unsigned int i;
14
15 BEGIN_TEST("cc_ccache_iterator_next");
16
17 err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
18
19 if (!err) {
20 err = destroy_all_ccaches(context);
21 }
22
23 // iterate with no ccaches
24 if (!err) {
25 err = cc_context_new_ccache_iterator(context, &iterator);
26 }
27 check_once_cc_ccache_iterator_next(iterator, 0, ccNoError, "iterating over an empty collection");
28 if (iterator) {
29 cc_ccache_iterator_release(iterator);
30 iterator = NULL;
31 }
32
33 // iterate with one ccache
34 if (!err) {
35 destroy_all_ccaches(context);
36 err = cc_context_create_new_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
37 }
38 if (ccache) {
39 cc_ccache_release(ccache);
40 ccache = NULL;
41 }
42 if (!err) {
43 err = cc_context_new_ccache_iterator(context, &iterator);
44 }
45 check_once_cc_ccache_iterator_next(iterator, 1, ccNoError, "iterating over a collection of 1 ccache");
46 if (iterator) {
47 cc_ccache_iterator_release(iterator);
48 iterator = NULL;
49 }
50
51 // iterate with several ccaches
52 if (!err) {
53 destroy_all_ccaches(context);
54 }
55 for(i = 0; !err && (i < 1000); i++)
56 {
57 if (i%100 == 0) fprintf(stdout, ".");
58 err = cc_context_create_new_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
59 if (ccache) {
60 cc_ccache_release(ccache);
61 ccache = NULL;
62 }
63 }
64 if (!err) {
65 err = cc_context_new_ccache_iterator(context, &iterator);
66 }
67 check_once_cc_ccache_iterator_next(iterator, 1000, ccNoError, "iterating over a collection of 1000 ccache");
68 if (iterator) {
69 cc_ccache_iterator_release(iterator);
70 iterator = NULL;
71 }
72
73
74 if (ccache) { cc_ccache_release(ccache); }
75 if (iterator) { cc_ccache_iterator_release(iterator); }
76 if (context) {
77 destroy_all_ccaches(context);
78 cc_context_release(context);
79 }
80
81 END_TEST_AND_RETURN
82 }
83
check_once_cc_ccache_iterator_next(cc_ccache_iterator_t iterator,cc_uint32 expected_count,cc_int32 expected_err,const char * description)84 cc_int32 check_once_cc_ccache_iterator_next(cc_ccache_iterator_t iterator, cc_uint32 expected_count, cc_int32 expected_err, const char *description) {
85 cc_int32 err = ccNoError;
86
87 // BEGIN_CHECK_ONCE(description);
88
89 cc_int32 possible_return_values[6] = {
90 ccNoError,
91 ccIteratorEnd,
92 ccErrBadParam,
93 ccErrNoMem,
94 ccErrInvalidCCacheIterator,
95 ccErrCCacheNotFound,
96 };
97 #define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
98
99 cc_ccache_t ccache = NULL;
100 cc_uint32 actual_count = 0;
101
102 while (!err) {
103 err = cc_ccache_iterator_next(iterator, &ccache);
104 if (ccache) {
105 actual_count++;
106 cc_ccache_release(ccache);
107 ccache = NULL;
108 }
109 }
110 if (err == ccIteratorEnd) {
111 err = ccNoError;
112 }
113
114 // check returned error
115 check_err(err, expected_err, possible_return_values);
116
117 check_if(actual_count != expected_count, "iterator didn't iterate over all ccaches");
118
119 // END_CHECK_ONCE;
120
121 return err;
122 }
123
124
125 // ---------------------------------------------------------------------------
126
check_cc_credentials_iterator_next(void)127 int check_cc_credentials_iterator_next(void) {
128 cc_int32 err = 0;
129 cc_context_t context = NULL;
130 cc_ccache_t ccache = NULL;
131 cc_credentials_union creds_union;
132 cc_credentials_iterator_t iterator = NULL;
133 unsigned int i;
134
135 BEGIN_TEST("cc_credentials_iterator_next");
136
137 err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
138
139 if (!err) {
140 err = destroy_all_ccaches(context);
141 }
142
143 // iterate with no creds
144 if (!err) {
145 err = cc_context_create_new_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
146 }
147 if (!err) {
148 err = cc_ccache_new_credentials_iterator(ccache, &iterator);
149 }
150 check_once_cc_credentials_iterator_next(iterator, 0, ccNoError, "iterating over an empty ccache");
151 if (iterator) {
152 cc_ccache_iterator_release(iterator);
153 iterator = NULL;
154 }
155 if (ccache) {
156 cc_ccache_release(ccache);
157 ccache = NULL;
158 }
159
160 // iterate with one cred
161 if (!err) {
162 destroy_all_ccaches(context);
163 err = cc_context_create_new_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
164 }
165 if (!err) {
166 new_v5_creds_union(&creds_union, "BAR.ORG");
167 err = cc_ccache_store_credentials(ccache, &creds_union);
168 release_v5_creds_union(&creds_union);
169 }
170 if (!err) {
171 err = cc_ccache_new_credentials_iterator(ccache, &iterator);
172 }
173 check_once_cc_credentials_iterator_next(iterator, 1, ccNoError, "iterating over a ccache with 1 cred");
174 if (iterator) {
175 cc_credentials_iterator_release(iterator);
176 iterator = NULL;
177 }
178 if (ccache) {
179 cc_ccache_release(ccache);
180 ccache = NULL;
181 }
182
183 // iterate with several creds
184 if (!err) {
185 destroy_all_ccaches(context);
186 err = cc_context_create_new_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
187 }
188 for(i = 0; !err && (i < 1000); i++) {
189 if (i%100 == 0) fprintf(stdout, ".");
190 new_v5_creds_union(&creds_union, "BAR.ORG");
191 err = cc_ccache_store_credentials(ccache, &creds_union);
192 release_v5_creds_union(&creds_union);
193 }
194 if (!err) {
195 err = cc_ccache_new_credentials_iterator(ccache, &iterator);
196 }
197 check_once_cc_credentials_iterator_next(iterator, 1000, ccNoError, "iterating over a ccache with 1000 creds");
198
199 if (ccache) { cc_ccache_release(ccache); }
200 if (iterator) { cc_credentials_iterator_release(iterator); }
201 if (context) {
202 destroy_all_ccaches(context);
203 cc_context_release(context);
204 }
205
206 END_TEST_AND_RETURN
207 }
208
check_once_cc_credentials_iterator_next(cc_credentials_iterator_t iterator,cc_uint32 expected_count,cc_int32 expected_err,const char * description)209 cc_int32 check_once_cc_credentials_iterator_next(cc_credentials_iterator_t iterator, cc_uint32 expected_count, cc_int32 expected_err, const char *description) {
210 cc_int32 err = ccNoError;
211 cc_credentials_t creds = NULL;
212 cc_uint32 actual_count = 0;
213
214 cc_int32 possible_return_values[5] = {
215 ccNoError,
216 ccIteratorEnd,
217 ccErrBadParam,
218 ccErrNoMem,
219 ccErrInvalidCredentialsIterator,
220 };
221
222 BEGIN_CHECK_ONCE(description);
223
224 #define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
225
226 while (!err) {
227 err = cc_credentials_iterator_next(iterator, &creds);
228 if (creds) {
229 actual_count++;
230 cc_credentials_release(creds);
231 creds = NULL;
232 }
233 }
234 if (err == ccIteratorEnd) {
235 err = ccNoError;
236 }
237
238 // check returned error
239 check_err(err, expected_err, possible_return_values);
240
241 check_if(actual_count != expected_count, "iterator didn't iterate over all ccaches");
242
243 END_CHECK_ONCE;
244
245 return err;
246 }
247