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