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 8int 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 84cc_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 127int 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 (iterator) { cc_credentials_iterator_release(iterator); } 200 if (ccache) { cc_ccache_release(ccache); } 201 if (context) { 202 destroy_all_ccaches(context); 203 cc_context_release(context); 204 } 205 206 END_TEST_AND_RETURN 207} 208 209cc_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