diff options
Diffstat (limited to 'src/object.c')
-rw-r--r-- | src/object.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/object.c b/src/object.c index 1b9427a..db82fbc 100644 --- a/src/object.c +++ b/src/object.c @@ -36,6 +36,51 @@ test_destroy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro) } static int +compar_object_handles(const void *one, const void *two) +{ + CK_OBJECT_HANDLE a = *((CK_SLOT_ID*)one); + CK_OBJECT_HANDLE b = *((CK_SLOT_ID*)two); + if(a == b) + return 0; + if(a > b) + return 1; + return -1; +} + +static int +test_find_consistent(CK_SESSION_HANDLE session) +{ + CK_OBJECT_HANDLE_PTR objects; + CK_OBJECT_HANDLE_PTR check; + CK_ULONG n_objects; + CK_ULONG i, n_check; + + objects = p11t_object_find(session, NULL, 0, &n_objects); + if(!objects) + return CONTINUE; + + qsort(objects, n_objects, sizeof(CK_OBJECT_HANDLE), compar_object_handles); + + for(i = 0; i < 10; ++i) + { + check = p11t_object_find(session, NULL, 0, &n_check); + if(check == NULL) + P11T_CHECK_FAIL_MSG("Consistently finds same objects", "no objects found"); + if(n_objects != n_check) + P11T_CHECK_FAIL_MSG("Consistently finds same objects", "wrong number of objects found"); + qsort(check, n_check, sizeof(CK_OBJECT_HANDLE), compar_object_handles); + if(memcmp(objects, check, n_check * sizeof(CK_OBJECT_HANDLE)) != 0) + P11T_CHECK_FAIL_MSG("Consistently finds same objects", "different objects found"); + + free(check); + } + + free(objects); + + return CONTINUE; +} + +static int test_find_objects(CK_SESSION_HANDLE session) { CK_OBJECT_HANDLE objects[1024]; @@ -311,6 +356,7 @@ p11t_object_tests(void) continue; test_find_objects(session_ro); + test_find_consistent(session_ro); test_objects(session_ro); if(!p11t_session_login(session_ro)) @@ -322,6 +368,7 @@ p11t_object_tests(void) if(session_rw != CK_INVALID) { test_find_objects(session_rw); + test_find_consistent(session_rw); test_objects(session_rw); test_create_object(session_rw, session_ro); test_copy_object(session_rw, session_ro); |