From b75662dde8a6d3e808c9c8d440a67df4e0899495 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Sat, 6 Dec 2008 15:12:34 +0000 Subject: Change how the tests are logged and failed. --- src/object.c | 202 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 91 insertions(+), 111 deletions(-) (limited to 'src/object.c') diff --git a/src/object.c b/src/object.c index bce527c..c8acd77 100644 --- a/src/object.c +++ b/src/object.c @@ -11,32 +11,32 @@ * TESTS */ -static void -create_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro) +static int +test_create_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro) { - /** C_CreateObject */ - - /** - Not Implemented */ + P11T_SECTION("C_CreateObject"); + P11T_CHECK_NOTE("Not Tested"); + return CONTINUE; } -static void -copy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro) +static int +test_copy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro) { - /** C_CopyObject */ - - /** - Not Implemented */ + P11T_SECTION("C_CopyObject"); + P11T_CHECK_NOTE("Not Tested"); + return CONTINUE; } -static void -destroy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro) +static int +test_destroy_object(CK_SESSION_HANDLE session_rw, CK_SESSION_HANDLE session_ro) { - /** C_DestroyObject */ - - /** - Not Implemented */ + P11T_SECTION("C_DestroyObject"); + P11T_CHECK_NOTE("Not Tested"); + return CONTINUE; } -static void -find_objects(CK_SESSION_HANDLE session) +static int +test_find_objects(CK_SESSION_HANDLE session) { CK_OBJECT_HANDLE objects[1024]; CK_OBJECT_HANDLE extra; @@ -46,94 +46,84 @@ find_objects(CK_SESSION_HANDLE session) assert(p11t_module_funcs); - /** C_FindObjectsInit */ + P11T_SECTION("C_FindObjectsInit"); if(p11t_test_unexpected) { - /** - Invalid session */ rv = (p11t_module_funcs->C_FindObjectsInit)((CK_SESSION_HANDLE)-99, &dummy, 0); - p11t_check_returns("C_FindObjectsInit: invalid session", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); - /** - Attribute count without buffer */ rv = (p11t_module_funcs->C_FindObjectsInit)((CK_SESSION_HANDLE)-99, NULL, 1); - p11t_check_returns("C_FindObjectsInit: count without buffer", rv, CKR_ARGUMENTS_BAD); + P11T_CHECK_RV("Attribute count without buffer", rv, CKR_ARGUMENTS_BAD); } rv = (p11t_module_funcs->C_FindObjectsInit)(session, &dummy, 0); - p11t_check_returns("C_FindObjectsInit: all", rv, CKR_OK); + P11T_CHECK_RV("Find all objects", rv, CKR_OK); if(p11t_test_unexpected) { - /** - Double call. */ rv = (p11t_module_funcs->C_FindObjectsInit)(session, &dummy, 0); - p11t_check_returns("C_FindObjectsInit: all", rv, CKR_OPERATION_ACTIVE); + P11T_CHECK_RV("Double call", rv, CKR_OPERATION_ACTIVE); } - /** C_FindObjects */ + P11T_SECTION("C_FindObjects"); if(p11t_test_unexpected) { - /** - Invalid session */ rv = (p11t_module_funcs->C_FindObjects)((CK_SESSION_HANDLE)-99, NULL, 0, &object_count); - p11t_check_returns("C_FindObjects: invalid session", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); - /** - Null object count */ rv = (p11t_module_funcs->C_FindObjects)(session, NULL, 0, NULL); - p11t_check_returns("C_FindObjects: invalid session", rv, CKR_ARGUMENTS_BAD); + P11T_CHECK_RV("Null object count", rv, CKR_ARGUMENTS_BAD); - /** - Retrieve a single object before remainder */ rv = (p11t_module_funcs->C_FindObjects)(session, objects, 1, &count); - p11t_check_returns("C_FindObjects: single object", rv, CKR_OK); + P11T_CHECK_RV("Retrieve a single object before remainder", rv, CKR_OK); if(count != 0) - p11t_check_ulong("C_FindObjects: should return one object", count, 1); + P11T_CHECK_ULONG("If asked for a single object, return one.", count, 1); } do { - /** - Retrieve remaining objects */ rv = (p11t_module_funcs->C_FindObjects)(session, objects, 1024, &count); - p11t_check_returns("C_FindObjects: all objects", rv, CKR_OK); + P11T_CHECK_RV("Retrieve remaining objects", rv, CKR_OK); } while(count == 1024); if(p11t_test_unexpected) { - /** - Extra call after retrieving all objects. */ rv = (p11t_module_funcs->C_FindObjects(session, &extra, 1, &count)); - p11t_check_returns("C_FindObjects: extra call", rv, CKR_OK); - p11t_check_ulong("C_FindObjects: should return no objects in extra call", count, 0); + P11T_CHECK_RV("Extra call after retrieving all objects", rv, CKR_OK); + P11T_CHECK_ULONG("Should return no objects in extra call", count, 0); } - /** C_FindObjectsFinal */ + P11T_SECTION("C_FindObjectsFinal"); if(p11t_test_unexpected) { - /** - Invalid session */ rv = (p11t_module_funcs->C_FindObjectsFinal)((CK_SESSION_HANDLE)-88); - p11t_check_returns("C_FindObjectsFinal: invalid session", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); } - /** - Normal call */ rv = (p11t_module_funcs->C_FindObjectsFinal)(session); - p11t_check_returns("C_FindObjectsFinal", rv, CKR_OK); + P11T_CHECK_RV("Normal call", rv, CKR_OK); if(p11t_test_unexpected) { - /** - Extra call */ rv = (p11t_module_funcs->C_FindObjectsFinal)(session); - p11t_check_returns("C_FindObjectsFinal: extra call", rv, CKR_OPERATION_NOT_INITIALIZED); + P11T_CHECK_RV("Extra call", rv, CKR_OPERATION_NOT_INITIALIZED); - /** C_FindObjects */ + P11T_SECTION("C_FindObjects"); - /** - Out of order call */ rv = (p11t_module_funcs->C_FindObjects)(session, &extra, 1, &count); - p11t_check_returns("C_FindObjectsFinal: extra call", rv, CKR_OPERATION_NOT_INITIALIZED); + P11T_CHECK_RV("Out of order call", rv, CKR_OPERATION_NOT_INITIALIZED); } + + return CONTINUE; } -static void +static int test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object) { CK_OBJECT_CLASS klass; @@ -144,43 +134,37 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object) assert(p11t_module_funcs); - /** C_GetAttributeValue */ + P11T_SECTION("C_GetAttributeValue"); attrs[0].type = CKA_CLASS; if(p11t_test_unexpected) { - /** - Invalid session */ rv = (p11t_module_funcs->C_GetAttributeValue)((CK_SESSION_HANDLE)-57, object, attrs, 1); - p11t_check_returns("C_GetAttributeValue: invalid session", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); - /** - Invalid object */ rv = (p11t_module_funcs->C_GetAttributeValue)(session, (CK_OBJECT_HANDLE)-58, attrs, 1); - p11t_check_returns("C_GetAttributeValue: invalid object", rv, CKR_OBJECT_HANDLE_INVALID); + P11T_CHECK_RV("Invalid object", rv, CKR_OBJECT_HANDLE_INVALID); - /** - No template */ rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, NULL, 0); - p11t_check_returns("C_GetAttributeValue: no template", rv, CKR_ARGUMENTS_BAD); + P11T_CHECK_RV("No template", rv, CKR_ARGUMENTS_BAD); - /** - Buffer too small */ attrs[0].pValue = buffer; attrs[0].ulValueLen = 2; rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 1); - p11t_check_returns("C_GetAttributeValue: buffer too small", rv, CKR_BUFFER_TOO_SMALL); - p11t_check_ulong("C_GetAttributeValue: should return size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); + P11T_CHECK_RV("Buffer too small", rv, CKR_BUFFER_TOO_SMALL); + P11T_CHECK_ULONG("Buffer too small should return size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); } - /** - Retrieve attribute length */ attrs[0].pValue = NULL; attrs[0].ulValueLen = 0; rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 1); - p11t_check_returns("C_GetAttributeValue: get size", rv, CKR_OK); - p11t_check_ulong("C_GetAttributeValue: size of class", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); + P11T_CHECK_RV("Retrieve attribute length", rv, CKR_OK); + P11T_CHECK_ULONG("Size of object class attribute.", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); - /** - Retrieve single attribute */ attrs[0].pValue = buffer; rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 1); - p11t_check_returns("C_GetAttributeValue: get object", rv, CKR_OK); + P11T_CHECK_RV("Retrieve single attribute", rv, CKR_OK); /* The actual class of this object */ klass = *((CK_OBJECT_CLASS*)attrs[0].pValue); @@ -197,19 +181,17 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object) attrs[0].ulValueLen = attrs[1].ulValueLen = 0; attrs[0].pValue = attrs[0].pValue = NULL; - /** - With one invalid attribute, no buffer. */ rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 2); - p11t_check_returns("C_GetAttributeValue: with one invalid attribute", rv, CKR_ATTRIBUTE_TYPE_INVALID); - p11t_check_ulong("C_GetAttributeValue: should set invalid attribute to -1", attrs[0].ulValueLen, CK_INVALID); - p11t_check_ulong("C_GetAttributeValue: should set valid attribute to size", attrs[1].ulValueLen, sizeof(CK_OBJECT_CLASS)); + P11T_CHECK_RV("With one invalid attribute, no buffer", rv, CKR_ATTRIBUTE_TYPE_INVALID); + P11T_CHECK_ULONG("Should set invalid attribute to -1", attrs[0].ulValueLen, CK_INVALID); + P11T_CHECK_ULONG("Should set valid attribute to size", attrs[1].ulValueLen, sizeof(CK_OBJECT_CLASS)); - /** - With one invalid attribute, with buffer. */ attrs[1].pValue = buffer; rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 2); - p11t_check_returns("C_GetAttributeValue: with one invalid attribute, buffer", rv, CKR_ATTRIBUTE_TYPE_INVALID); - p11t_check_ulong("C_GetAttributeValue: should set invalid attribute to -1", attrs[0].ulValueLen, CK_INVALID); - p11t_check_ulong("C_GetAttributeValue: should set valid attribute to size", attrs[1].ulValueLen, sizeof(CK_OBJECT_CLASS)); - p11t_check_ulong("C_GetAttributeValue: should set valid attribute", *((CK_OBJECT_CLASS*)attrs[1].pValue), klass); + P11T_CHECK_RV("With one invalid attribute, with buffer", rv, CKR_ATTRIBUTE_TYPE_INVALID); + P11T_CHECK_ULONG("Should set invalid attribute to -1", attrs[0].ulValueLen, CK_INVALID); + P11T_CHECK_ULONG("Should set attribute size, in partially valid set", attrs[1].ulValueLen, sizeof(CK_OBJECT_CLASS)); + P11T_CHECK_ULONG("Should set valid attribute, in partially valid set", *((CK_OBJECT_CLASS*)attrs[1].pValue), klass); } /* @@ -227,7 +209,7 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object) case CKO_SECRET_KEY: break; default: - return; + return CONTINUE; } memset(attrs, 0, sizeof(attrs)); @@ -237,13 +219,12 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object) attrs[3].type = CKA_MODIFIABLE; attrs[4].type = CKA_LABEL; - /** - Multiple attributes, no buffer. */ rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 5); - p11t_check_returns("C_GetAttributeValue: multiple attrs, no buffer", rv, CKR_OK); - p11t_check_ulong("C_GetAttributeValue: CKA_CLASS size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); - p11t_check_ulong("C_GetAttributeValue: CKA_TOKEN size", attrs[1].ulValueLen, sizeof(CK_BBOOL)); - p11t_check_ulong("C_GetAttributeValue: CKA_PRIVATE size", attrs[2].ulValueLen, sizeof(CK_BBOOL)); - p11t_check_ulong("C_GetAttributeValue: CKA_MODIFIABLE size", attrs[3].ulValueLen, sizeof(CK_BBOOL)); + P11T_CHECK_RV("Multiple attributes, no buffer", rv, CKR_OK); + P11T_CHECK_ULONG("Size of CKA_CLASS", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); + P11T_CHECK_ULONG("Size of CKA_TOKEN", attrs[1].ulValueLen, sizeof(CK_BBOOL)); + P11T_CHECK_ULONG("Size of CKA_PRIVATE", attrs[2].ulValueLen, sizeof(CK_BBOOL)); + P11T_CHECK_ULONG("Size of CKA_MODIFIABLE", attrs[3].ulValueLen, sizeof(CK_BBOOL)); if(attrs[4].ulValueLen) attrs[4].pValue = malloc(attrs[4].ulValueLen); @@ -253,41 +234,40 @@ test_get_attribute_value(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object) if(p11t_test_unexpected) { - /** - Multiple attributes, some buffers */ rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 5); - p11t_check_returns("C_GetAttributeValue: multiple attrs, some buffer", rv, CKR_OK); - p11t_check_ulong("C_GetAttributeValue: CKA_CLASS no buffer, size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); - p11t_check_bool("C_GetAttributeValue: CKA_TOKEN", *((CK_BBOOL*)attrs[1].pValue)); - p11t_check_bool("C_GetAttributeValue: CKA_PRIVATE", *((CK_BBOOL*)attrs[2].pValue)); - p11t_check_bool("C_GetAttributeValue: CKA_MODIFIABLE", *((CK_BBOOL*)attrs[3].pValue)); + P11T_CHECK_RV("Multiple attributes, some buffers", rv, CKR_OK); + P11T_CHECK_ULONG("Size of CKA_CLASS", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); + P11T_CHECK_BOOL("CKA_TOKEN boolean value", *((CK_BBOOL*)attrs[1].pValue)); + P11T_CHECK_BOOL("CKA_PRIVATE boolean value", *((CK_BBOOL*)attrs[2].pValue)); + P11T_CHECK_BOOL("CKA_MODIFIABLE boolean value", *((CK_BBOOL*)attrs[3].pValue)); attrs[0].pValue = buffer; attrs[0].ulValueLen = 2; - /** - Multiple attributes, one small buffer */ rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 5); - p11t_check_returns("C_GetAttributeValue: multiple attrs, one small buffer", rv, CKR_BUFFER_TOO_SMALL); - p11t_check_ulong("C_GetAttributeValue: CKA_CLASS no buffer, size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); - p11t_check_bool("C_GetAttributeValue: CKA_TOKEN", *((CK_BBOOL*)attrs[1].pValue)); - p11t_check_bool("C_GetAttributeValue: CKA_PRIVATE", *((CK_BBOOL*)attrs[2].pValue)); - p11t_check_bool("C_GetAttributeValue: CKA_MODIFIABLE", *((CK_BBOOL*)attrs[3].pValue)); + P11T_CHECK_RV("Multiple attributes, one small buffer", rv, CKR_BUFFER_TOO_SMALL); + P11T_CHECK_ULONG("Size of CKA_CLASS", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); + P11T_CHECK_BOOL("CKA_TOKEN boolean value", *((CK_BBOOL*)attrs[1].pValue)); + P11T_CHECK_BOOL("CKA_PRIVATE boolean value", *((CK_BBOOL*)attrs[2].pValue)); + P11T_CHECK_BOOL("CKA_MODIFIABLE boolean value", *((CK_BBOOL*)attrs[3].pValue)); } attrs[0].pValue = buffer; attrs[0].ulValueLen = sizeof(CK_OBJECT_CLASS); - /** - Multiple attributes, with buffers */ rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, 5); - p11t_check_returns("C_GetAttributeValue: multiple attrs, with buffers", rv, CKR_OK); - p11t_check_ulong("C_GetAttributeValue: CKA_CLASS no buffer, size", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); - p11t_check_ulong("C_GetAttributeValue: CKA_CLASS value", *((CK_ULONG*)attrs[0].pValue), klass); - p11t_check_bool("C_GetAttributeValue: CKA_TOKEN", *((CK_BBOOL*)attrs[1].pValue)); - p11t_check_bool("C_GetAttributeValue: CKA_PRIVATE", *((CK_BBOOL*)attrs[2].pValue)); - p11t_check_bool("C_GetAttributeValue: CKA_MODIFIABLE", *((CK_BBOOL*)attrs[3].pValue)); - p11t_check_string("C_GetAttributeValue: CKA_LABEL", attrs[4].pValue, attrs[4].ulValueLen); + P11T_CHECK_RV("Multiple attributes, with buffers", rv, CKR_OK); + P11T_CHECK_ULONG("Size of CKA_CLASS", attrs[0].ulValueLen, sizeof(CK_OBJECT_CLASS)); + P11T_CHECK_ULONG("CKA_CLASS value", *((CK_ULONG*)attrs[0].pValue), klass); + P11T_CHECK_BOOL("CKA_TOKEN boolean value", *((CK_BBOOL*)attrs[1].pValue)); + P11T_CHECK_BOOL("CKA_PRIVATE boolean value", *((CK_BBOOL*)attrs[2].pValue)); + P11T_CHECK_BOOL("CKA_MODIFIABLE boolean value", *((CK_BBOOL*)attrs[3].pValue)); + P11T_CHECK_STRING("CKA_LABEL boolean value", attrs[4].pValue, attrs[4].ulValueLen); + + return CONTINUE; } -static void +static int test_objects(CK_SESSION_HANDLE session) { CK_OBJECT_HANDLE_PTR objects; @@ -298,18 +278,18 @@ test_objects(CK_SESSION_HANDLE session) objects = p11t_object_find(session, NULL, 0, &n_objects); if(!objects || !n_objects) - return; + return CONTINUE; for(i = 0; i < n_objects; ++i) { - /** C_GetObjectSize */ - - /** - Not Implemented */ + P11T_SECTION("C_GetObjectSize"); + P11T_CHECK_NOTE("Not Tested"); test_get_attribute_value(session, objects[i]); } free (objects); + return CONTINUE; } void @@ -330,22 +310,22 @@ p11t_object_tests(void) if(session_ro == CK_INVALID) continue; - find_objects(session_ro); + test_find_objects(session_ro); test_objects(session_ro); if(!p11t_session_login(session_ro)) continue; - find_objects(session_ro); + test_find_objects(session_ro); test_objects(session_ro); if(session_rw != CK_INVALID) { - find_objects(session_rw); + test_find_objects(session_rw); test_objects(session_rw); - create_object(session_rw, session_ro); - copy_object(session_rw, session_ro); - destroy_object(session_rw, session_ro); + test_create_object(session_rw, session_ro); + test_copy_object(session_rw, session_ro); + test_destroy_object(session_rw, session_ro); } p11t_session_close_all(slot); -- cgit v1.2.3