dl-10-create-delete.c [plain text]
#include <stdlib.h>
#include <unistd.h>
#include <Security/cssmapi.h>
#include <Security/cssmapple.h>
#include "testmore.h"
#include "testenv.h"
#include "testcssm.h"
#include "testleaks.h"
#define DBNAME "testdl.db"
static CSSM_APPLEDL_OPEN_PARAMETERS openParameters =
{
sizeof(CSSM_APPLEDL_OPEN_PARAMETERS),
CSSM_APPLEDL_OPEN_PARAMETERS_VERSION,
CSSM_FALSE,
kCSSM_APPLEDL_MASK_MODE,
0600
};
static CSSM_DBINFO dbInfo =
{
0 ,
NULL,
NULL,
NULL,
CSSM_TRUE ,
NULL,
NULL
};
int
static test1(CSSM_DL_HANDLE dl)
{
int pass = 1;
CSSM_DL_DB_HANDLE dldb = { dl };
pass &= ok_status(CSSM_DL_DbCreate(dldb.DLHandle, DBNAME,
NULL ,
&dbInfo,
CSSM_DB_ACCESS_READ | CSSM_DB_ACCESS_WRITE,
NULL ,
NULL ,
&dldb.DBHandle),
"CSSM_DL_DbCreate");
pass &= ok_status(CSSM_DL_DbClose(dldb), "CSSM_DL_DbClose");
pass &= ok_status(CSSM_DL_DbDelete(dldb.DLHandle, DBNAME,
NULL ,
NULL ), "CSSM_DL_DbDelete");
pass &= is_unix(unlink(DBNAME), ENOENT, "unlink");
return pass;
}
int
static test2(CSSM_DL_HANDLE dl)
{
int pass = 1;
CSSM_DL_DB_HANDLE dldb = { dl };
pass &= ok_status(CSSM_DL_DbCreate(dldb.DLHandle, DBNAME,
NULL ,
&dbInfo,
CSSM_DB_ACCESS_READ | CSSM_DB_ACCESS_WRITE,
NULL ,
NULL ,
&dldb.DBHandle),
"CSSM_DL_DbCreate");
pass &= ok_status(CSSM_DL_DbDelete(dldb.DLHandle, DBNAME,
NULL ,
NULL ), "CSSM_DL_DbDelete");
pass &= ok_status(CSSM_DL_DbClose(dldb), "CSSM_DL_DbClose");
pass &= is_unix(unlink(DBNAME), ENOENT, "unlink");
return pass;
}
int
static test3(CSSM_DL_HANDLE dl)
{
int pass = 1;
CSSM_DL_DB_HANDLE dldb = { dl };
pass &= ok_status(CSSM_DL_DbCreate(dldb.DLHandle, DBNAME,
NULL ,
&dbInfo,
CSSM_DB_ACCESS_READ | CSSM_DB_ACCESS_WRITE,
NULL ,
&openParameters,
&dldb.DBHandle),
"CSSM_DL_DbCreate");
pass &= ok_status(CSSM_DL_DbClose(dldb), "CSSM_DL_DbClose");
pass &= ok_status(CSSM_DL_DbDelete(dldb.DLHandle, DBNAME,
NULL ,
NULL ), "CSSM_DL_DbDelete");
pass &= is_unix(unlink(DBNAME), ENOENT, "unlink");
return pass;
}
int
static test4(CSSM_DL_HANDLE dl)
{
int pass = 1;
CSSM_DL_DB_HANDLE dldb = { dl };
pass &= ok_status(CSSM_DL_DbCreate(dldb.DLHandle, DBNAME,
NULL ,
&dbInfo,
CSSM_DB_ACCESS_READ | CSSM_DB_ACCESS_WRITE,
NULL ,
&openParameters,
&dldb.DBHandle),
"CSSM_DL_DbCreate");
pass &= ok_status(CSSM_DL_DbDelete(dldb.DLHandle, DBNAME,
NULL ,
NULL ), "CSSM_DL_DbDelete");
pass &= ok_status(CSSM_DL_DbClose(dldb), "CSSM_DL_DbClose");
pass &= is_unix(unlink(DBNAME), ENOENT, "unlink");
return pass;
}
int
static test5(CSSM_DL_HANDLE dl)
{
int pass = 1;
CSSM_DL_DB_HANDLE dldb = { dl };
pass &= ok_status(CSSM_DL_DbCreate(dldb.DLHandle, DBNAME,
NULL ,
&dbInfo,
CSSM_DB_ACCESS_READ | CSSM_DB_ACCESS_WRITE,
NULL ,
&openParameters,
&dldb.DBHandle),
"CSSM_DL_DbCreate");
pass &= ok_status(CSSM_DL_PassThrough(dldb, CSSM_APPLEFILEDL_ROLLBACK,
NULL, NULL), "CSSM_APPLEFILEDL_ROLLBACK");
pass &= ok_status(CSSM_DL_DbClose(dldb), "CSSM_DL_DbClose");
pass &= is_status(CSSM_DL_DbDelete(dldb.DLHandle, DBNAME,
NULL , NULL ),
CSSMERR_DL_DATASTORE_DOESNOT_EXIST, "CSSM_DL_DbDelete");
pass &= is_unix(unlink(DBNAME), ENOENT, "unlink");
return pass;
}
int
static test6(CSSM_DL_HANDLE dl)
{
int pass = 1;
CSSM_DL_DB_HANDLE dldb = { dl };
pass &= ok_status(CSSM_DL_DbCreate(dldb.DLHandle, DBNAME,
NULL ,
&dbInfo,
CSSM_DB_ACCESS_READ | CSSM_DB_ACCESS_WRITE,
NULL ,
&openParameters,
&dldb.DBHandle),
"CSSM_DL_DbCreate");
pass &= ok_status(CSSM_DL_PassThrough(dldb, CSSM_APPLEFILEDL_ROLLBACK,
NULL, NULL), "CSSM_APPLEFILEDL_ROLLBACK");
pass &= is_status(CSSM_DL_DbDelete(dldb.DLHandle, DBNAME,
NULL , NULL ),
CSSMERR_DL_DATASTORE_DOESNOT_EXIST, "CSSM_DL_DbDelete");
pass &= ok_status(CSSM_DL_DbClose(dldb), "CSSM_DL_DbClose");
pass &= is_unix(unlink(DBNAME), ENOENT, "unlink");
return pass;
}
int
static test7(CSSM_DL_HANDLE dl)
{
int pass = 1;
CSSM_DL_DB_HANDLE dldb = { dl };
pass &= ok_status(CSSM_DL_DbCreate(dldb.DLHandle, DBNAME,
NULL ,
&dbInfo,
CSSM_DB_ACCESS_READ | CSSM_DB_ACCESS_WRITE,
NULL ,
&openParameters,
&dldb.DBHandle),
"CSSM_DL_DbCreate");
pass &= ok_status(CSSM_DL_DbDelete(dldb.DLHandle, DBNAME,
NULL , NULL ), "CSSM_DL_DbDelete");
pass &= ok_status(CSSM_DL_PassThrough(dldb, CSSM_APPLEFILEDL_ROLLBACK,
NULL, NULL), "CSSM_APPLEFILEDL_ROLLBACK");
pass &= ok_status(CSSM_DL_DbClose(dldb), "CSSM_DL_DbClose");
pass &= is_unix(unlink(DBNAME), ENOENT, "unlink");
return pass;
}
int
static test8(CSSM_DL_HANDLE dl)
{
int pass = 1;
CSSM_DL_DB_HANDLE dldb = { dl };
pass &= is_status(CSSM_DL_DbDelete(dldb.DLHandle, DBNAME,
NULL , NULL ),
CSSMERR_DL_DATASTORE_DOESNOT_EXIST, "CSSM_DL_DbDelete");
return pass;
}
int
main(int argc, char * const *argv)
{
int guid_alt = argc > 1 && !strcmp(argv[1], "-g");
CSSM_GUID s3dl_guid =
{
0x2cb56191, 0xee6f, 0x432d,
{ 0xa3, 0x77, 0x85, 0x3d, 0x3c, 0x6b, 0x94, 0x9e }
};
const CSSM_GUID *guid = guid_alt ? & s3dl_guid : &gGuidAppleFileDL;
CSSM_DL_HANDLE dl;
plan_tests(45);
ok(cssm_attach(guid, &dl), "cssm_attach");
ok(tests_begin(argc, argv), "setup");
ok(test1(dl), "create close delete");
ok(test2(dl), "create delete close");
ok(test3(dl), "autocommit off create close delete");
ok(test4(dl), "autocommit off create delete close");
ok(test5(dl), "autocommit off create rollback close delete");
ok(test6(dl), "autocommit off create rollback delete close");
ok(test7(dl), "autocommit off create delete rollback close");
ok(test8(dl), "delete non existant db");
ok(cssm_detach(guid, dl), "cssm_detach");
ok(tests_end(1), "cleanup");
TODO: {ok_leaks("leaks");}
return 0;
}