kc-04-is-valid.c   [plain text]


#include <Security/SecKeychain.h>
#include <Security/SecKeychainPriv.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

#include "keychain_regressions.h"
#include "kc-helpers.h"

static void tests(void)
{
	char *home = getenv("HOME");
	char kcname1[256], kcname2[256];

	if (!home || strlen(home) > 200)
		plan_skip_all("home too big");

	sprintf(kcname1, "%s/kctests/kc1-16-is-valid", home);
	SecKeychainRef kc1 = NULL, kc2 = NULL;
	Boolean kc1valid, kc2valid;
    kc1 = createNewKeychainAt(kcname1, "test");
	ok_status(SecKeychainIsValid(kc1, &kc1valid), "SecKeychainIsValid kc1");
	is(kc1valid, TRUE, "is kc1 valid");

    ok_status(SecKeychainDelete(kc1), "%s: SecKeychainDelete", testName);
	CFRelease(kc1);

	int fd;
	sprintf(kcname2, "%s/kctests/kc2-16-is-valid", home);
	ok_unix(fd = open(kcname2, O_CREAT|O_WRONLY|O_TRUNC, 0600),
		"create invalid kc2 file");
	ok_unix(close(fd), "close the kc2 file");
	ok_status(SecKeychainOpen(kcname2, &kc2), "SecKeychainOpen kc2");

	ok_status(SecKeychainIsValid(kc2, &kc2valid), "SecKeychainIsValid kc2");
	TODO: {
		todo("<rdar://problem/3795566> SecKeychainIsValid always returns "	
			"TRUE");
		is(kc2valid, FALSE, "is kc2 not valid");
	}

    ok_status(SecKeychainDelete(kc2), "%s: SecKeychainDelete", testName);
	CFRelease(kc2);
}

int kc_04_is_valid(int argc, char *const *argv)
{
	plan_tests(11);

	tests();

    deleteTestFiles();
	return 0;
}