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/session.c | 222 ++++++++++++++++++++++++++-------------------------------- 1 file changed, 101 insertions(+), 121 deletions(-) (limited to 'src/session.c') diff --git a/src/session.c b/src/session.c index 356fd8e..81e7dc6 100644 --- a/src/session.c +++ b/src/session.c @@ -20,41 +20,36 @@ p11t_session_config(const char *name, const char *value) * TESTS */ -void -session_info(CK_SESSION_HANDLE session, CK_SLOT_ID slot, CK_FLAGS flags, CK_STATE state) +static int +test_session_info(CK_SESSION_HANDLE session, CK_SLOT_ID slot, CK_FLAGS flags, CK_STATE state) { CK_SESSION_INFO info; CK_RV rv; if(session == CK_INVALID) - return; + return CONTINUE; - /** C_GetSessionInfo */ + P11T_SECTION("C_GetSessionInfo"); if(p11t_test_unexpected) { - /** - Invalid session */ rv = (p11t_module_funcs->C_GetSessionInfo)((CK_SESSION_HANDLE)-33, &info); - p11t_check_returns("C_GetSessionInfo: with invalid session", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); - /** - NULL arguments */ rv = (p11t_module_funcs->C_GetSessionInfo)(session, NULL); - p11t_check_returns("C_GetSessionInfo: with null", rv, CKR_ARGUMENTS_BAD); + P11T_CHECK_RV("Null arguments", rv, CKR_ARGUMENTS_BAD); } - /** - Valid call */ rv = (p11t_module_funcs->C_GetSessionInfo)(session, &info); - if(!p11t_check_returns("C_GetSessionInfo", rv, CKR_OK)) - return; + P11T_CHECK_RV("Valid call", rv, CKR_OK); - /** - Valid slot id */ - p11t_check_ulong("CK_SESSION_INFO.slotID", info.slotID, slot); + P11T_SECTION("CK_SESSION_INFO"); - /** - Valid state for session */ - p11t_check_ulong("CK_SESSION_INFO.state", info.state, state); + P11T_CHECK_ULONG("slotID", info.slotID, slot); + P11T_CHECK_ULONG("state", info.state, state); + P11T_CHECK_FLAG("flags", info.flags, flags); - /** - Valid flags for session */ - p11t_check_flag("CK_SESSION_INFO.flags", info.flags, flags); + return CONTINUE; } static CK_UTF8CHAR_PTR @@ -82,8 +77,8 @@ calculate_pin(CK_SLOT_ID slot, CK_USER_TYPE user, CK_ULONG_PTR n_pin) return (CK_UTF8CHAR_PTR)pin; } -void -session_user_login(CK_SLOT_ID slot) +static int +test_session_user_login(CK_SLOT_ID slot) { CK_SESSION_HANDLE session_ro = CK_INVALID; CK_SESSION_HANDLE session_rw = CK_INVALID; @@ -94,58 +89,54 @@ session_user_login(CK_SLOT_ID slot) pin = calculate_pin(slot, CKU_USER, &n_pin); rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro); - p11t_check_returns("C_Login: open RO session", rv, CKR_OK); + P11T_CHECK_RV("C_Login: open RO session", rv, CKR_OK); rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw); - p11t_check_returns("C_Login: open RW session", rv, CKR_OK); + P11T_CHECK_RV("C_Login: open RW session", rv, CKR_OK); /* Check the session state before login */ - session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION); - session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); + test_session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION); + test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); - /** C_Login */ + P11T_SECTION("C_Login"); if(p11t_test_unexpected) { - /** - Invalid session */ rv = (p11t_module_funcs->C_Login)((CK_ULONG)-55, CKU_USER, pin, n_pin); - p11t_check_returns("C_Login: invalid session", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); - /** - Invalid user type */ rv = (p11t_module_funcs->C_Login)(session_ro, CK_INVALID, pin, n_pin); - p11t_check_returns("C_Login: invalid user type", rv, CKR_USER_TYPE_INVALID); + P11T_CHECK_RV("Invalid user type", rv, CKR_USER_TYPE_INVALID); } - /** - Normal login */ rv = (p11t_module_funcs->C_Login)(session_ro, CKU_USER, pin, n_pin); if(rv == CKR_USER_TYPE_INVALID) - return; - if(!p11t_check_returns("C_Login", rv, CKR_OK)) - return; + return CONTINUE; + P11T_CHECK_RV("Normal login", rv, CKR_OK); - /** - Login changes all session state */ - session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_USER_FUNCTIONS); - session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_USER_FUNCTIONS); + P11T_CHECK_NOTE("Login changes all session's state"); + test_session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_USER_FUNCTIONS); + test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_USER_FUNCTIONS); - /** C_Logout */ + P11T_SECTION("C_Logout"); if(p11t_test_unexpected) { - /** - Invalid session */ rv = (p11t_module_funcs->C_Logout)((CK_ULONG)-55); - p11t_check_returns("C_Logout: invalid session", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); } - /** - Normal logout */ rv = (p11t_module_funcs->C_Logout)(session_rw); - p11t_check_returns("C_Logout", rv, CKR_OK); + P11T_CHECK_RV("Normal logout", rv, CKR_OK); - /** - Logout changes all session state */ - session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION); - session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); + P11T_CHECK_NOTE("Logout changes all session state"); + test_session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION); + test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); + + return CONTINUE; } -void -session_so_login(CK_SLOT_ID slot) +static int +test_session_so_login(CK_SLOT_ID slot) { CK_SESSION_HANDLE session_ro = CK_INVALID; CK_SESSION_HANDLE session_rw = CK_INVALID; @@ -156,53 +147,54 @@ session_so_login(CK_SLOT_ID slot) pin = calculate_pin(slot, CKU_SO, &n_pin); rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw); - p11t_check_returns("C_OpenSession: open RW session", rv, CKR_OK); + P11T_CHECK_RV("C_OpenSession: open RW session", rv, CKR_OK); /* Check the session state before login */ - session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); + test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); - /** C_Login */ + P11T_SECTION("C_Login"); if(p11t_test_unexpected) { rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro); - p11t_check_returns("C_OpenSession: open RO session because SO", rv, CKR_OK); + P11T_CHECK_RV("Test opening RO session before login as SO", rv, CKR_OK); - /** - Login as SO not allowed with RO session */ rv = (p11t_module_funcs->C_Login)(session_ro, CKU_SO, pin, n_pin); - p11t_check_returns("C_Login: with RO as SO", rv, CKR_SESSION_READ_ONLY_EXISTS); + P11T_CHECK_RV("Login as SO not allowed with RO session", rv, CKR_SESSION_READ_ONLY_EXISTS); rv = (p11t_module_funcs->C_CloseSession)(session_ro); - p11t_check_returns("C_CloseSession: close RO session because SO", rv, CKR_OK); + P11T_CHECK_RV("Test closing RO session before login as SO", rv, CKR_OK); } - /** - Login as SO */ rv = (p11t_module_funcs->C_Login)(session_rw, CKU_SO, pin, n_pin); if(rv == CKR_USER_TYPE_INVALID) - return; - if(!p11t_check_returns("C_Login: as SO", rv, CKR_OK)) - return; + return CONTINUE; + P11T_CHECK_RV("Login as SO", rv, CKR_OK); - /** - Login changes all session state */ - session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_SO_FUNCTIONS); + P11T_CHECK_NOTE("SO login changes all session state"); + test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_SO_FUNCTIONS); if(p11t_test_unexpected) { - /** - Can't open RO session when logged in as SO */ + P11T_SECTION("C_OpenSession"); + rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro); - p11t_check_returns("C_OpenSession: open RO when SO logged in", rv, CKR_SESSION_READ_WRITE_SO_EXISTS); + P11T_CHECK_RV("Can't open RO session when logged in as SO", rv, CKR_SESSION_READ_WRITE_SO_EXISTS); } - /** - Logout from SO */ + P11T_SECTION("C_Logout"); + rv = (p11t_module_funcs->C_Logout)(session_rw); - p11t_check_returns("C_Logout", rv, CKR_OK); + P11T_CHECK_RV("Logout from SO", rv, CKR_OK); + + P11T_CHECK_NOTE("Logout SO changes goes back to public"); + test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); - /** - Logout SO changes goes back to public */ - session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); + return CONTINUE; } -void -session_main(CK_SLOT_ID slot) +static int +test_session_main(CK_SLOT_ID slot) { CK_SESSION_HANDLE session_ro = CK_INVALID; CK_SESSION_HANDLE session_rw = CK_INVALID; @@ -212,67 +204,56 @@ session_main(CK_SLOT_ID slot) assert(p11t_module_funcs); - /** C_OpenSession */ + P11T_SECTION("C_OpenSession"); if(p11t_test_unexpected) { - /** - Invalid slot */ rv = (p11t_module_funcs->C_OpenSession)((CK_SLOT_ID)-5, CKF_SERIAL_SESSION, NULL, NULL, &session_ro); - p11t_check_returns("C_OpenSession: with invalid slot", rv, CKR_SLOT_ID_INVALID); + P11T_CHECK_RV("Invalid slot", rv, CKR_SLOT_ID_INVALID); - /** - Null arguments */ rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, NULL); - p11t_check_returns("C_OpenSession: with invalid slot", rv, CKR_ARGUMENTS_BAD); + P11T_CHECK_RV("Null arguments", rv, CKR_ARGUMENTS_BAD); - /** - No flags */ rv = (p11t_module_funcs->C_OpenSession)(slot, 0, NULL, NULL, &session_ro); - p11t_check_returns("C_OpenSession: with 0 flags", rv, CKR_SESSION_PARALLEL_NOT_SUPPORTED); + P11T_CHECK_RV("No flags", rv, CKR_SESSION_PARALLEL_NOT_SUPPORTED); - /** - Without serial flag */ rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_RW_SESSION, NULL, NULL, &session_ro); - p11t_check_returns("C_OpenSession: with RW flags", rv, CKR_SESSION_PARALLEL_NOT_SUPPORTED); + P11T_CHECK_RV("Without serial flag", rv, CKR_SESSION_PARALLEL_NOT_SUPPORTED); } - /** - Valid flags */ rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro); - p11t_check_returns("C_OpenSession: with serial flags", rv, CKR_OK); + P11T_CHECK_RV("Valid flags", rv, CKR_OK); rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION, NULL, NULL, &session_ro2); - p11t_check_returns("C_OpenSession: with serial flags", rv, CKR_OK); + P11T_CHECK_RV("Valid flags", rv, CKR_OK); - /** - Read write session */ rv = (p11t_module_funcs->C_OpenSession)(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw); if(rv == CKR_TOKEN_WRITE_PROTECTED) session_rw = CK_INVALID; else - p11t_check_returns("C_OpenSession: with read write flags", rv, CKR_OK); + P11T_CHECK_RV("Read write session", rv, CKR_OK); /* Test all the sessions and validate their state */ - session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION); - session_info(session_ro2, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION); - session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); + test_session_info(session_ro, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION); + test_session_info(session_ro2, slot, CKF_SERIAL_SESSION, CKS_RO_PUBLIC_SESSION); + test_session_info(session_rw, slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, CKS_RW_PUBLIC_SESSION); - /** C_CloseSession */ + P11T_SECTION("C_CloseSession"); if(p11t_test_unexpected) { - /** - Invalid session */ rv = (p11t_module_funcs->C_CloseSession)((CK_SESSION_HANDLE)-10); - p11t_check_returns("C_CloseSession: invalid handle", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); } if(session_ro != CK_INVALID) { - /** - Normal call */ rv = (p11t_module_funcs->C_CloseSession)(session_ro); - p11t_check_returns("C_CloseSession: valid", rv, CKR_OK); + P11T_CHECK_RV("Normal call", rv, CKR_OK); if(p11t_test_unexpected) { - /** - Check open session was closed */ rv = (p11t_module_funcs->C_GetSessionInfo)(session_ro, &info); - p11t_check_returns("C_GetSessionInfo: after close", rv, CKR_SESSION_HANDLE_INVALID); - - /** - Close twice */ + P11T_CHECK_RV("Check open session was closed", rv, CKR_SESSION_HANDLE_INVALID); /* * Note that CKR_SESSION_CLOSED is a valid return in this case. @@ -281,63 +262,61 @@ session_main(CK_SLOT_ID slot) */ rv = (p11t_module_funcs->C_CloseSession)(session_ro); - p11t_check_returns("C_CloseSession: valid", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Close twice", rv, CKR_SESSION_HANDLE_INVALID); } } if(session_rw != CK_INVALID) { rv = (p11t_module_funcs->C_CloseSession)(session_rw); - p11t_check_returns("C_CloseSession: read write", rv, CKR_OK); + P11T_CHECK_RV("Normal call", rv, CKR_OK); } - /** C_CloseAllSessions */ + P11T_SECTION("C_CloseAllSessions"); if(p11t_test_unexpected) { - /** - Invalid slot id */ rv = (p11t_module_funcs->C_CloseAllSessions)((CK_SLOT_ID)-34); - p11t_check_returns("C_CloseAllSessions: invalid slot", rv, CKR_SLOT_ID_INVALID); + P11T_CHECK_RV("Invalid slot id", rv, CKR_SLOT_ID_INVALID); } - /** - Normal call */ rv = (p11t_module_funcs->C_CloseAllSessions)(slot); - p11t_check_returns("C_CloseAllSessions", rv, CKR_OK); + P11T_CHECK_RV("Normal call", rv, CKR_OK); if(p11t_test_unexpected) { - /** - Check open session was closed */ rv = (p11t_module_funcs->C_GetSessionInfo)(session_ro2, &info); - p11t_check_returns("C_GetSessionInfo: after close all", rv, CKR_SESSION_HANDLE_INVALID); + P11T_CHECK_RV("Check open session was closed", rv, CKR_SESSION_HANDLE_INVALID); - /** - Call when no sessions open */ rv = (p11t_module_funcs->C_CloseAllSessions)(slot); - p11t_check_returns("C_CloseAllSessions", rv, CKR_OK); + P11T_CHECK_RV("Call when no sessions open", rv, CKR_OK); } + + return CONTINUE; } -void -session_pin(CK_SLOT_ID slot) +static int +test_session_pin(CK_SLOT_ID slot) { - /** C_InitPIN */ + P11T_SECTION("C_InitPIN"); + P11T_CHECK_NOTE("Not Tested"); - /** - Not Implemented */ + P11T_SECTION("C_SetPIN"); + P11T_CHECK_NOTE("Not Tested"); - /** C_SetPIN */ - - /** - Not Implemented */ + return CONTINUE; } -void -session_operation_state(CK_SLOT_ID slot) +static int +test_session_operation_state(CK_SLOT_ID slot) { - /** C_GetOperationState */ - - /** - Not Implemented */ + P11T_SECTION("C_GetOperationState"); + P11T_CHECK_NOTE("Not Tested"); - /** C_SetOperationState */ + P11T_SECTION("C_SetOperationState"); + P11T_CHECK_NOTE("Not Tested"); - /** - Not Implemented */ + return CONTINUE; } void @@ -348,10 +327,11 @@ p11t_session_tests() for(i = 0; i < p11t_slot_count; ++i) { CK_SLOT_ID slot = p11t_slot_get_id(i); - session_pin(slot); - session_main(slot); - session_user_login(slot); - session_so_login(slot); + test_session_pin(slot); + test_session_main(slot); + test_session_user_login(slot); + test_session_so_login(slot); + test_session_operation_state(slot); } } -- cgit v1.2.3