kc-23-item-notify.c [plain text]
#include <Security/SecKeychain.h>
#include <Security/SecKeychainSearch.h>
#include <stdlib.h>
#include <unistd.h>
#include "testenv.h"
#include "testleaks.h"
#include "testmore.h"
#include "testsecevent.h"
static char account[] = "account";
static char service[] = "service";
static char password[] = "password";
void tests(int dont_skip)
{
SecKeychainRef keychain = NULL;
ok_status(SecKeychainCreate("test", 4, "test", FALSE, NULL, &keychain),
"create keychain");
ok_status(test_sec_event_register(kSecEveryEventMask),
"register for all events");
SecKeychainItemRef itemRef;
ok_status(SecKeychainAddGenericPassword(keychain,
sizeof(account), account,
sizeof(service), service,
sizeof(password), password,
&itemRef),
"add generic password, wait for callback");
SecKeychainRef eventKeychain = NULL;
SecKeychainItemRef eventItem = NULL;
is_sec_event(kSecAddEvent, &eventKeychain, &eventItem, NULL,
"add event");
is(eventItem, itemRef, "add event item matches");
is(eventKeychain, keychain, "add event keychain matches");
CFRelease(eventKeychain);
eventKeychain = NULL;
CFRelease(eventItem);
eventItem = NULL;
ok_status(SecKeychainItemDelete(itemRef), "delete item");
is_sec_event(kSecDeleteEvent, &eventKeychain, &eventItem, NULL,
"delete event");
is(eventItem, itemRef, "delete event item matches");
is(eventKeychain, keychain, "delete event keychain matches");
if (eventKeychain != NULL) {
CFRelease(eventKeychain);
eventKeychain = NULL;
}
if (eventItem != NULL)
{
CFRelease(eventItem);
eventItem = NULL;
}
no_sec_event("no event");
ok_status(test_sec_event_deregister(), "deregister events.");
CFRelease(itemRef);
CFRelease(keychain);
ok(tests_end(1), "cleanup");
}
int main(int argc, char *const *argv)
{
#ifdef DEBUG
int dont_skip = argc > 1 && !strcmp(argv[1], "-s");
plan_tests(14);
if (!tests_begin(argc, argv))
BAIL_OUT("tests_begin failed");
tests(dont_skip);
ok_leaks("no leaks");
#endif
plan_tests(1);
ok_leaks("no leaks");
return 0;
}