2
#include "test_ccapi_context.h"
4
#include "test_ccapi_check.h"
5
#include "test_ccapi_util.h"
7
int check_cc_initialize(void) {
9
cc_context_t context = NULL;
11
BEGIN_TEST("cc_initialize");
13
// try every api_version
14
err = check_once_cc_initialize(&context, ccapi_version_2, NULL, NULL, ccNoError, "cc_initialize with ccapi_version_2"); // err == CC_BAD_API_VERSION (9) would be imported by CredentialsCache2.h
15
err = check_once_cc_initialize(&context, ccapi_version_3, NULL, NULL, ccNoError, "cc_initialize with ccapi_version_3"); // !err
16
err = check_once_cc_initialize(&context, ccapi_version_4, NULL, NULL, ccNoError, "cc_initialize with ccapi_version_4"); // "
17
err = check_once_cc_initialize(&context, ccapi_version_5, NULL, NULL, ccNoError, "cc_initialize with ccapi_version_5"); // "
18
err = check_once_cc_initialize(&context, ccapi_version_6, NULL, NULL, ccNoError, "cc_initialize with ccapi_version_6"); // "
20
// try bad api_version
21
err = check_once_cc_initialize(&context, INT_MAX, NULL, NULL, ccErrBadAPIVersion, NULL); // err == ccErrBadAPIVersion
24
err = check_once_cc_initialize(NULL, ccapi_version_3, NULL, NULL, ccErrBadParam, NULL); // err == ccErrBadParam
29
cc_int32 check_once_cc_initialize(cc_context_t *out_context, cc_int32 in_version, cc_int32 *out_supported_version, char const **out_vendor, cc_int32 expected_err, const char *description) {
33
cc_int32 possible_return_values[4] = {
40
BEGIN_CHECK_ONCE(description);
42
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
44
err = cc_initialize(out_context, in_version, out_supported_version, out_vendor);
46
// check returned error
47
check_err(err, expected_err, possible_return_values);
49
if (out_context) { context = *out_context; }
50
else { context = NULL; }
52
// check output parameters
54
check_if(context == NULL, NULL);
56
cc_context_release(context);
60
check_if(context != NULL, NULL);
66
int check_cc_context_release(void) {
68
cc_context_t context = NULL;
70
BEGIN_TEST("cc_context_release");
72
#ifndef cc_context_release
73
log_error("cc_context_release is not implemented yet");
77
// try with valid context
78
err = check_once_cc_context_release(&context, ccNoError, NULL);
81
//err = check_once_cc_context_release(NULL, ccErrInvalidContext);
82
/* calling with NULL context crashes, because this macro expands to
83
((NULL) -> functions -> release (NULL)) which is dereferencing NULL which is bad. */
85
if (context) { cc_context_release(context); }
87
#endif /* cc_context_release */
92
cc_int32 check_once_cc_context_release(cc_context_t *out_context, cc_int32 expected_err, const char *description) {
94
cc_context_t context = NULL;
96
cc_int32 possible_return_values[2] = {
101
BEGIN_CHECK_ONCE(description);
103
#ifdef cc_context_release
105
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
108
err = cc_initialize(out_context, ccapi_version_3, NULL, NULL);
110
context = *out_context;
114
if (err != ccNoError) {
115
log_error("failure in cc_initialize, unable to perform check");
119
err = cc_context_release(context);
120
// check returned error
121
check_err(err, expected_err, possible_return_values);
126
#endif /* cc_context_release */
133
int check_cc_context_get_change_time(void) {
135
cc_context_t context = NULL;
136
cc_time_t last_change_time = 0;
137
cc_ccache_t ccache = NULL;
138
cc_credentials_union creds_union;
139
cc_credentials_iterator_t creds_iterator = NULL;
140
cc_credentials_t credentials = NULL;
142
BEGIN_TEST("cc_context_get_change_time");
144
#ifndef cc_context_get_change_time
145
log_error("cc_context_get_change_time is not implemented yet");
151
* make sure the change time changes after:
152
* a ccache is created
153
* a ccache is destroyed
154
* a credential is stored
155
* a credential is removed
156
* a ccache principal is changed
157
* the default ccache is changed
161
err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
164
// try bad parameters first
165
err = check_once_cc_context_get_change_time(context, NULL, ccErrBadParam, "NULL param, should fail");
167
// make sure we have a default ccache
168
err = cc_context_open_default_ccache(context, &ccache);
169
if (err == ccErrCCacheNotFound) {
170
err = cc_context_create_default_ccache(context, cc_credentials_v5, "foo/bar@BAZ.ORG", &ccache);
173
err = cc_ccache_release(ccache);
175
// either the default ccache already existed or we just created it
176
// either way, the get_change_time should now give something > 0
177
check_once_cc_context_get_change_time(context, &last_change_time, ccNoError, "first-run, should be > 0");
180
err = cc_context_create_new_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
181
check_once_cc_context_get_change_time(context, &last_change_time, ccNoError, "after creating a new ccache");
183
// store a credential
185
new_v5_creds_union(&creds_union, "BAR.ORG");
186
err = cc_ccache_store_credentials(ccache, &creds_union);
187
release_v5_creds_union(&creds_union);
189
check_once_cc_context_get_change_time(context, &last_change_time, ccNoError, "after storing a credential");
192
// change principal (fails with ccErrBadInternalMessage)
193
err = cc_ccache_set_principal(ccache, cc_credentials_v5, "foo@BAR.ORG");
195
log_error("failed to change ccache's principal - %s (%d)", translate_ccapi_error(err), err);
200
check_once_cc_context_get_change_time(context, &last_change_time, ccNoError, "after changing a principle");
202
// remove a credential
204
err = cc_ccache_new_credentials_iterator(ccache, &creds_iterator);
207
err = cc_credentials_iterator_next(creds_iterator, &credentials);
209
if (err == ccIteratorEnd) {
213
err = cc_ccache_remove_credentials(ccache, credentials);
215
check_once_cc_context_get_change_time(context, &last_change_time, ccNoError, "after removing a credential");
218
// change default ccache
219
err = cc_ccache_set_default(ccache);
220
check_once_cc_context_get_change_time(context, &last_change_time, ccNoError, "after changing default ccache");
225
err = cc_ccache_destroy(ccache);
226
check_once_cc_context_get_change_time(context, &last_change_time, ccNoError, "after destroying a ccache");
230
if (context) { cc_context_release(context); }
232
#endif /* cc_get_change_time */
237
cc_int32 check_once_cc_context_get_change_time(cc_context_t context, cc_time_t *time, cc_int32 expected_err, const char *description) {
239
cc_time_t last_change_time;
240
cc_time_t current_change_time = 0;
242
cc_int32 possible_return_values[3] = {
248
BEGIN_CHECK_ONCE(description);
250
#ifdef cc_context_get_change_time
252
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
254
if (time != NULL) { // if we were passed NULL, then we're looking to pass a bad param
255
err = cc_context_get_change_time(context, ¤t_change_time);
257
err = cc_context_get_change_time(context, NULL);
260
check_err(err, expected_err, possible_return_values);
263
last_change_time = *time;
264
check_if(current_change_time <= last_change_time, "context change time did not increase when it was supposed to (%d <= %d)", current_change_time, last_change_time);
265
*time = current_change_time;
268
#endif /* cc_context_get_change_time */
275
int check_cc_context_get_default_ccache_name(void) {
277
cc_context_t context = NULL;
278
cc_ccache_t ccache = NULL;
279
cc_string_t name = NULL;
281
BEGIN_TEST("cc_context_get_default_ccache_name");
283
#ifndef cc_context_get_default_ccache_name
284
log_error("cc_context_get_default_ccache_name is not implemented yet");
288
err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
290
// try bad parameters first
291
err = check_once_cc_context_get_default_ccache_name(context, NULL, ccErrBadParam, NULL);
293
// try with no default
294
err = destroy_all_ccaches(context);
295
err = cc_context_open_default_ccache(context, &ccache);
296
if (err != ccErrCCacheNotFound) {
297
log_error("didn't remove all ccaches");
299
err = check_once_cc_context_get_default_ccache_name(context, &name, ccNoError, NULL);
302
err = cc_context_create_default_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
303
if (ccache) { cc_ccache_release(ccache); }
304
err = check_once_cc_context_get_default_ccache_name(context, &name, ccNoError, NULL);
308
if (context) { cc_context_release(context); }
310
#endif /* cc_context_get_default_ccache_name */
315
cc_int32 check_once_cc_context_get_default_ccache_name(cc_context_t context, cc_string_t *name, cc_int32 expected_err, const char *description) {
318
cc_int32 possible_return_values[4] = {
325
BEGIN_CHECK_ONCE(description);
327
#ifdef cc_context_get_default_ccache_name
329
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
331
if (name != NULL) { // if we were passed NULL, then we're looking to pass a bad param
332
err = cc_context_get_default_ccache_name(context, name);
334
err = cc_context_get_default_ccache_name(context, NULL);
337
// check returned error
338
check_err(err, expected_err, possible_return_values);
340
// not really anything else to check
342
if (name && *name) { cc_string_release(*name); }
344
#endif /* cc_context_get_default_ccache_name */
351
int check_cc_context_open_ccache(void) {
353
cc_context_t context = NULL;
354
cc_ccache_t ccache = NULL;
355
cc_string_t name = NULL;
357
BEGIN_TEST("cc_context_open_ccache");
359
#ifndef cc_context_open_ccache
360
log_error("cc_context_open_ccache is not implemented yet");
364
err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
366
// make sure we have a default ccache
367
err = cc_context_open_default_ccache(context, &ccache);
368
if (err == ccErrCCacheNotFound) {
369
err = cc_context_create_default_ccache(context, cc_credentials_v5, "foo/bar@BAZ.ORG", &ccache);
372
err = cc_ccache_release(ccache);
376
// try default ccache
377
err = cc_context_get_default_ccache_name(context, &name);
379
err = check_once_cc_context_open_ccache(context, name->data, &ccache, ccNoError, NULL);
382
// try bad parameters
383
err = check_once_cc_context_open_ccache(context, NULL, &ccache, ccErrBadParam, NULL);
384
err = check_once_cc_context_open_ccache(context, name->data, NULL, ccErrBadParam, NULL);
386
// try a ccache that doesn't exist (create one and then destroy it)
387
err = cc_context_create_new_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
389
err = cc_ccache_get_name(ccache, &name);
392
err = cc_ccache_destroy(ccache);
396
err = check_once_cc_context_open_ccache(context, name->data, &ccache, ccErrCCacheNotFound, NULL);
399
if (context) { cc_context_release(context); }
401
#endif /* cc_context_open_ccache */
406
cc_int32 check_once_cc_context_open_ccache(cc_context_t context, const char *name, cc_ccache_t *ccache, cc_int32 expected_err, const char *description) {
408
cc_string_t stored_name = NULL;
410
cc_int32 possible_return_values[6] = {
419
BEGIN_CHECK_ONCE(description);
421
#ifdef cc_context_open_ccache
423
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
425
if (ccache != NULL) { // if we were passed NULL, then we're looking to pass a bad param
426
err = cc_context_open_ccache(context, name, ccache);
428
err = cc_context_open_ccache(context, name, NULL);
431
// check returned error
432
check_err(err, expected_err, possible_return_values);
435
check_if(*ccache == NULL, NULL);
438
err = cc_ccache_get_name(*ccache, &stored_name);
441
check_if(strcmp(stored_name->data, name), NULL);
443
if (stored_name) { cc_string_release(stored_name); }
446
if (ccache && *ccache) {
447
cc_ccache_release(*ccache);
452
#endif /* cc_context_open_ccache */
459
int check_cc_context_open_default_ccache(void) {
461
cc_context_t context = NULL;
462
cc_ccache_t ccache = NULL;
464
BEGIN_TEST("cc_context_open_default_ccache");
466
#ifndef cc_context_open_default_ccache
467
log_error("cc_context_open_default_ccache is not implemented yet");
471
err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
473
// make sure we have a default ccache
474
err = cc_context_create_default_ccache(context, cc_credentials_v5, "foo/bar@BAZ.ORG", &ccache);
475
if (ccache) { cc_ccache_release(ccache); }
477
// try default ccache
479
err = check_once_cc_context_open_default_ccache(context, &ccache, ccNoError, NULL);
482
// try bad parameters
483
err = check_once_cc_context_open_default_ccache(context, NULL, ccErrBadParam, NULL);
485
// try with no default ccache (destroy all ccaches first)
486
err = destroy_all_ccaches(context);
488
err = check_once_cc_context_open_default_ccache(context, &ccache, ccErrCCacheNotFound, NULL);
491
if (context) { cc_context_release(context); }
493
#endif /* cc_context_open_default_ccache */
498
cc_int32 check_once_cc_context_open_default_ccache(cc_context_t context, cc_ccache_t *ccache, cc_int32 expected_err, const char *description) {
500
cc_string_t given_name = NULL;
501
cc_string_t default_name = NULL;
503
cc_int32 possible_return_values[5] = {
511
BEGIN_CHECK_ONCE(description);
513
#ifdef cc_context_open_default_ccache
515
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
517
if (ccache != NULL) { // if we were passed NULL, then we're looking to pass a bad param
518
err = cc_context_open_default_ccache(context, ccache);
520
err = cc_context_open_default_ccache(context, NULL);
523
// check returned error
524
check_err(err, expected_err, possible_return_values);
527
check_if(*ccache == NULL, NULL);
529
// make sure this ccache is the one we were looking to get back (compare name with cc_context_get_default_ccache_name)
530
err = cc_ccache_get_name(*ccache, &given_name);
531
err = cc_context_get_default_ccache_name(context, &default_name);
532
if (given_name && default_name) {
533
check_if(strcmp(given_name->data, default_name->data), "name of ccache returned by cc_context_open_default_ccache doesn't match name returned by cc_context_get_default_ccache_name");
535
if (given_name) { cc_string_release(given_name); }
536
if (default_name) { cc_string_release(default_name); }
538
if (ccache && *ccache) {
539
cc_ccache_release(*ccache);
544
#endif /* cc_context_open_default_ccache */
551
int check_cc_context_create_ccache(void) {
553
cc_context_t context = NULL;
554
cc_ccache_t ccache = NULL;
555
cc_string_t name = NULL;
557
BEGIN_TEST("cc_context_create_ccache");
559
#ifndef cc_context_create_ccache
560
log_error("cc_context_create_ccache is not implemented yet");
564
err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
566
// try making a ccache with a non-unique name (the existing default's name)
568
err = cc_context_create_default_ccache(context, cc_credentials_v5, "foo/bar@BAZ.ORG", &ccache);
571
err = cc_ccache_get_name(ccache, &name);
573
if (ccache) { cc_ccache_release(ccache); }
575
err = check_once_cc_context_create_ccache(context, name->data, cc_credentials_v5, "foo@BAR.ORG", &ccache, ccNoError, NULL);
578
// try making a ccache with a unique name (the now destroyed default's name)
579
if (ccache) { cc_ccache_destroy(ccache); }
581
err = check_once_cc_context_create_ccache(context, name->data, cc_credentials_v5, "foo/baz@BAR.ORG", &ccache, ccNoError, NULL);
584
// try bad parameters
585
err = check_once_cc_context_create_ccache(context, NULL, cc_credentials_v5, "foo@BAR.ORG", &ccache, ccErrBadParam, "NULL name"); // NULL name
586
err = check_once_cc_context_create_ccache(context, "name", cc_credentials_v4_v5, "foo@BAR.ORG", &ccache, ccErrBadCredentialsVersion, "invalid creds_vers"); // invalid creds_vers
587
err = check_once_cc_context_create_ccache(context, "name", cc_credentials_v5, NULL, &ccache, ccErrBadParam, "NULL principal"); // NULL principal
588
err = check_once_cc_context_create_ccache(context, "name", cc_credentials_v5, "foo@BAR.ORG", NULL, ccErrBadParam, "NULL ccache"); // NULL ccache
591
if (name) { cc_string_release(name); }
592
if (ccache) { cc_ccache_destroy(ccache); }
593
if (context) { cc_context_release(context); }
595
#endif /* cc_context_create_ccache */
600
cc_int32 check_once_cc_context_create_ccache(cc_context_t context, const char *name, cc_uint32 cred_vers, const char *principal, cc_ccache_t *ccache, cc_int32 expected_err, const char *description) {
602
cc_string_t stored_name = NULL;
603
cc_string_t stored_principal = NULL;
604
cc_uint32 stored_creds_vers = 0;
606
cc_int32 possible_return_values[6] = {
612
ccErrBadCredentialsVersion,
614
BEGIN_CHECK_ONCE(description);
616
#ifdef cc_context_create_ccache
618
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
620
err = cc_context_create_ccache(context, name, cred_vers, principal, ccache);
622
// check returned error
623
check_err(err, expected_err, possible_return_values);
626
check_if(*ccache == NULL, NULL);
628
// make sure all of the ccache's info matches what we gave it
630
err = cc_ccache_get_name(*ccache, &stored_name);
631
if (!err) { check_if(strcmp(stored_name->data, name), NULL); }
632
if (stored_name) { cc_string_release(stored_name); }
634
// FIXME Documented function name of cc_ccache_get_credentials_version is a typo.
635
// FIXME Documented type of creds param the wrong signedness (should be unsigned) for cc_ccache_get_credentials_version, cc_context_create_ccache, cc_context_create_default_ccache, cc_context_create_new_ccache
636
err = cc_ccache_get_credentials_version(*ccache, &stored_creds_vers);
637
if (!err) { check_if(stored_creds_vers != cred_vers, NULL); }
639
err = cc_ccache_get_principal(*ccache, cc_credentials_v5, &stored_principal);
640
if (!err) { check_if(strcmp(stored_principal->data, principal), NULL); }
641
if (stored_principal) { cc_string_release(stored_principal); }
643
if (ccache && *ccache) {
644
cc_ccache_destroy(*ccache);
649
#endif /* cc_context_create_ccache */
656
int check_cc_context_create_default_ccache(void) {
658
cc_context_t context = NULL;
659
cc_ccache_t ccache = NULL;
660
cc_string_t name = NULL;
662
BEGIN_TEST("cc_context_create_default_ccache");
664
#ifndef cc_context_create_default_ccache
665
log_error("cc_context_create_default_ccache is not implemented yet");
669
err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
671
// try making the default when there are no existing ccaches
672
err = destroy_all_ccaches(context);
674
err = check_once_cc_context_create_default_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache, ccNoError, NULL);
676
if (ccache) { cc_ccache_release(ccache); }
678
// try making a new default when one already exists
680
err = check_once_cc_context_create_default_ccache(context, cc_credentials_v5, "foo/baz@BAR.ORG", &ccache, ccNoError, NULL);
683
// try bad parameters
684
err = check_once_cc_context_create_default_ccache(context, cc_credentials_v4_v5, "foo@BAR.ORG", &ccache, ccErrBadCredentialsVersion, "invalid creds_vers"); // invalid creds_vers
685
err = check_once_cc_context_create_default_ccache(context, cc_credentials_v5, NULL, &ccache, ccErrBadParam, "NULL principal"); // NULL principal
686
err = check_once_cc_context_create_default_ccache(context, cc_credentials_v5, "foo@BAR.ORG", NULL, ccErrBadParam, "NULL ccache"); // NULL ccache
689
if (name) { cc_string_release(name); }
690
if (ccache) { cc_ccache_destroy(ccache); }
691
if (context) { cc_context_release(context); }
693
#endif /* cc_context_create_default_ccache */
698
cc_int32 check_once_cc_context_create_default_ccache(cc_context_t context, cc_uint32 cred_vers, const char *principal, cc_ccache_t *ccache, cc_int32 expected_err, const char *description) {
700
cc_string_t stored_principal = NULL;
701
cc_uint32 stored_creds_vers = 0;
703
cc_int32 possible_return_values[6] = {
705
ccErrBadName, // how can this be possible when the name isn't a parameter?
709
ccErrBadCredentialsVersion,
712
BEGIN_CHECK_ONCE(description);
714
#ifdef cc_context_create_default_ccache
716
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
718
err = cc_context_create_default_ccache(context, cred_vers, principal, ccache);
720
// check returned error
721
check_err(err, expected_err, possible_return_values);
724
if (ccache) { check_if(*ccache == NULL, NULL); }
725
// make sure all of the ccache's info matches what we gave it
727
err = cc_ccache_get_credentials_version(*ccache, &stored_creds_vers);
728
if (!err) { check_if(stored_creds_vers != cred_vers, NULL); }
730
err = cc_ccache_get_principal(*ccache, cc_credentials_v5, &stored_principal);
731
if (!err) { check_if(strcmp(stored_principal->data, principal), NULL); }
732
if (stored_principal) { cc_string_release(stored_principal); }
734
if (ccache && *ccache) {
735
cc_ccache_release(*ccache);
740
#endif /* cc_context_create_default_ccache */
747
int check_cc_context_create_new_ccache(void) {
749
cc_context_t context = NULL;
750
cc_ccache_t ccache = NULL;
751
cc_string_t name = NULL;
753
BEGIN_TEST("cc_context_create_new_ccache");
755
#ifndef cc_context_create_new_ccache
756
log_error("cc_context_create_new_ccache is not implemented yet");
760
err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
762
// try making when there are no existing ccaches (should have name of default)
763
err = destroy_all_ccaches(context);
765
err = check_once_cc_context_create_new_ccache(context, 1, cc_credentials_v5, "foo@BAR.ORG", &ccache, ccNoError, NULL);
767
if (ccache) { cc_ccache_release(ccache); }
769
// try making a new ccache when one already exists (should not have name of default)
771
err = check_once_cc_context_create_new_ccache(context, 0, cc_credentials_v5, "foo/baz@BAR.ORG", &ccache, ccNoError, NULL);
773
if (ccache) { cc_ccache_release(ccache); }
775
// try bad parameters
776
err = check_once_cc_context_create_new_ccache(context, 1, cc_credentials_v4_v5, "foo@BAR.ORG", &ccache, ccErrBadCredentialsVersion, "invalid creds_vers"); // invalid creds_vers
777
err = check_once_cc_context_create_new_ccache(context, 1, cc_credentials_v5, NULL, &ccache, ccErrBadParam, "NULL principal"); // NULL principal
778
err = check_once_cc_context_create_new_ccache(context, 1, cc_credentials_v5, "foo@BAR.ORG", NULL, ccErrBadParam, "NULL ccache"); // NULL ccache
781
if (name) { cc_string_release(name); }
782
if (ccache) { cc_ccache_destroy(ccache); }
783
if (context) { cc_context_release(context); }
785
#endif /* cc_context_create_new_ccache */
790
cc_int32 check_once_cc_context_create_new_ccache(cc_context_t context, cc_int32 should_be_default, cc_uint32 cred_vers, const char *principal, cc_ccache_t *ccache, cc_int32 expected_err, const char *description) {
792
cc_string_t name = NULL;
793
cc_string_t stored_name = NULL;
794
cc_string_t stored_principal = NULL;
795
cc_uint32 stored_creds_vers = 0;
797
cc_int32 possible_return_values[6] = {
799
ccErrBadName, // how can this be possible when the name isn't a parameter?
803
ccErrBadCredentialsVersion,
806
BEGIN_CHECK_ONCE(description);
808
#ifdef cc_context_create_new_ccache
810
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
812
err = cc_context_create_new_ccache(context, cred_vers, principal, ccache);
814
// check returned error
815
check_err(err, expected_err, possible_return_values);
818
if (ccache) { check_if(*ccache == NULL, NULL); }
819
// make sure all of the ccache's info matches what we gave it
821
err = cc_context_get_default_ccache_name(context, &name);
824
err = cc_ccache_get_name(*ccache, &stored_name);
827
if (should_be_default) {
828
check_if(strcmp(stored_name->data, name->data), "new ccache does not have name of default");
831
check_if((strcmp(stored_name->data, name->data) == 0), "new cache has name of default");
834
if (name) { cc_string_release(name); }
835
if (stored_name) { cc_string_release(stored_name); }
838
err = cc_ccache_get_credentials_version(*ccache, &stored_creds_vers);
839
if (!err) { check_if(stored_creds_vers != cred_vers, NULL); }
841
err = cc_ccache_get_principal(*ccache, cc_credentials_v5, &stored_principal);
842
if (!err) { check_if(strcmp(stored_principal->data, principal), NULL); }
843
if (stored_principal) { cc_string_release(stored_principal); }
845
if (ccache && *ccache) {
846
cc_ccache_release(*ccache);
851
#endif /* cc_context_create_new_ccache */
858
int check_cc_context_new_ccache_iterator(void) {
860
cc_context_t context = NULL;
861
cc_ccache_t ccache = NULL;
862
cc_string_t name = NULL;
863
cc_ccache_iterator_t iterator = NULL;
865
BEGIN_TEST("cc_context_new_ccache_iterator");
867
#ifndef cc_context_new_ccache_iterator
868
log_error("cc_context_new_ccache_iterator is not implemented yet");
872
err = cc_initialize(&context, ccapi_version_3, NULL, NULL);
874
err = destroy_all_ccaches(context);
877
// try making when there are no existing ccaches (shouldn't make a difference, but just in case)
878
check_once_cc_context_new_ccache_iterator(context, &iterator, ccNoError, "when there are no existing ccaches");
880
err = cc_context_create_default_ccache(context, cc_credentials_v5, "foo@BAR.ORG", &ccache);
883
// try making when at least one ccache already exists (just to cover all our bases)
884
check_once_cc_context_new_ccache_iterator(context, &iterator, ccNoError, "when at least one ccache already exists");
886
// try bad parameters
887
check_once_cc_context_new_ccache_iterator(context, NULL, ccErrBadParam, "NULL param"); // NULL iterator
889
// we'll do a comprehensive test of cc_ccache_iterator related functions later in the test suite
891
if (name) { cc_string_release(name); }
892
if (ccache) { cc_ccache_destroy(ccache); }
893
if (context) { cc_context_release(context); }
895
#endif /* cc_context_new_ccache_iterator */
900
cc_int32 check_once_cc_context_new_ccache_iterator(cc_context_t context, cc_ccache_iterator_t *iterator, cc_int32 expected_err, const char *description) {
901
cc_int32 err = ccNoError;
903
cc_int32 possible_return_values[4] = {
910
BEGIN_CHECK_ONCE(description);
912
#ifdef cc_context_create_new_ccache
914
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
916
err = cc_context_new_ccache_iterator(context, iterator);
918
// check returned error
919
check_err(err, expected_err, possible_return_values);
921
// we'll do a comprehensive test of cc_ccache_iterator related functions later
923
#endif /* cc_context_create_new_ccache */
929
// ---------------------------------------------------------------------------
931
int check_cc_context_compare(void) {
933
cc_context_t context_a = NULL;
934
cc_context_t context_b = NULL;
937
BEGIN_TEST("cc_context_compare");
939
#ifndef cc_context_compare
940
log_error("cc_context_compare is not implemented yet");
944
err = cc_initialize(&context_a, ccapi_version_3, NULL, NULL);
946
err = cc_initialize(&context_b, ccapi_version_3, NULL, NULL);
949
check_once_cc_context_compare(context_a, context_a, &equal, ccNoError, "valid params, same contexts");
950
check_once_cc_context_compare(context_a, context_b, &equal, ccNoError, "valid params, different contexts");
951
check_once_cc_context_compare(context_a, NULL, &equal, ccErrBadParam, "NULL compare_to context");
952
check_once_cc_context_compare(context_a, context_b, NULL, ccErrBadParam, "NULL out param");
954
if (context_a) { cc_context_release(context_a); }
955
if (context_b) { cc_context_release(context_b); }
957
#endif /* cc_context_compare */
962
cc_int32 check_once_cc_context_compare(cc_context_t context, cc_context_t compare_to, cc_uint32 *equal, cc_int32 expected_err, const char *description) {
963
cc_int32 err = ccNoError;
965
cc_int32 possible_return_values[4] = {
969
ccErrServerUnavailable,
972
BEGIN_CHECK_ONCE(description);
974
#ifdef cc_context_compare
976
#define possible_ret_val_count sizeof(possible_return_values)/sizeof(possible_return_values[0])
978
err = cc_context_compare(context, compare_to, equal);
984
// check returned error
985
check_err(err, expected_err, possible_return_values);
987
#endif /* cc_context_compare */