X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/ce3c8656732c924baf7e88df75eab50891bdc471..fa7225c82381bac4432a6edf16f53b5370238d85:/OSX/libsecurity_keychain/regressions/kc-10-item-add-generic.c diff --git a/OSX/libsecurity_keychain/regressions/kc-10-item-add-generic.c b/OSX/libsecurity_keychain/regressions/kc-10-item-add-generic.c new file mode 100644 index 00000000..f22e12f8 --- /dev/null +++ b/OSX/libsecurity_keychain/regressions/kc-10-item-add-generic.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +#include "keychain_regressions.h" +#include "kc-helpers.h" + +static void tests(void) +{ + SecKeychainRef keychain = getPopulatedTestKeychain(); + SecKeychainItemRef item = NULL; + ok_status(SecKeychainAddGenericPassword(keychain, 7, "service", 7, + "account", 4, "test", &item), "add generic password"); + ok(item, "is item non NULL"); + SecKeychainItemRef oldItem = item; + is_status(SecKeychainAddGenericPassword(keychain, 7, "service", 7, + "account", 4, "test", &oldItem), + errSecDuplicateItem, "add generic password again"); + is((intptr_t)item, (intptr_t)oldItem, "item is unchanged"); + + SecItemClass itemClass = 0; + SecKeychainAttribute attrs[] = + { + { kSecAccountItemAttr }, + { kSecServiceItemAttr } + }; + SecKeychainAttributeList attrList = { sizeof(attrs) / sizeof(*attrs), attrs }; + UInt32 length = 0; + void *data = NULL; + ok_status(SecKeychainItemCopyContent(item, &itemClass, &attrList, &length, &data), "SecKeychainItemCopyContent"); + eq_string(data, "test", "Item data is wrong"); + ok_status(SecKeychainItemFreeContent(&attrList, data), "SecKeychainItemCopyContent"); + + is(CFGetRetainCount(item), 1, "item retaincount is 1"); + is(CFGetRetainCount(keychain), 2, "keychain retaincount is 2"); + CFRelease(item); + is(CFGetRetainCount(keychain), 1, "keychain retaincount is 1"); + ok_status(SecKeychainDelete(keychain), "delete keychain"); + CFRelease(keychain); +} + +int kc_10_item_add_generic(int argc, char *const *argv) +{ + initializeKeychainTests("kc-10-item-add-generic"); + plan_tests(13); + + tests(); + + deleteTestFiles(); + return 0; +}