diff options
author | Stef Walter <stefw@gnome.org> | 2013-02-15 21:34:20 +0100 |
---|---|---|
committer | Stef Walter <stefw@gnome.org> | 2013-05-21 10:47:53 +0200 |
commit | 0cb1132469c1e13be64f85cd6566e6617bfe32cc (patch) | |
tree | 9dec0619641038222cf14513d10ab57b88fbda64 /p11-kit/tests | |
parent | 5c19f0cf66495f00ccf69eba1d0915f862a88c8d (diff) |
Update the proxy module to use managed PKCS#11 modules
Each time C_GetFunctionList is called on the proxy module, a new
managed PKCS#11 set of functions is returned. These are all cleaned
up when the module is unloaded.
We want the proxy module to continue to work even without the highly
recommended libffi. For that reason we still keep the old behavior of
sharing state in the proxy module.
Diffstat (limited to 'p11-kit/tests')
-rw-r--r-- | p11-kit/tests/test-mock.c | 26 | ||||
-rw-r--r-- | p11-kit/tests/test-proxy.c | 116 |
2 files changed, 124 insertions, 18 deletions
diff --git a/p11-kit/tests/test-mock.c b/p11-kit/tests/test-mock.c index 955174f..ae1e028 100644 --- a/p11-kit/tests/test-mock.c +++ b/p11-kit/tests/test-mock.c @@ -51,24 +51,12 @@ test_get_info (CuTest *tc) CK_FUNCTION_LIST_PTR module; CK_INFO info; CK_RV rv; - char *string; module = setup_mock_module (tc, NULL); rv = (module->C_GetInfo) (&info); CuAssertTrue (tc, rv == CKR_OK); - - CuAssertIntEquals (tc, CRYPTOKI_VERSION_MAJOR, info.cryptokiVersion.major); - CuAssertIntEquals (tc, CRYPTOKI_VERSION_MINOR, info.cryptokiVersion.minor); - string = p11_kit_space_strdup (info.manufacturerID, sizeof (info.manufacturerID)); - CuAssertStrEquals (tc, "MOCK MANUFACTURER", string); - free (string); - string = p11_kit_space_strdup (info.libraryDescription, sizeof (info.libraryDescription)); - CuAssertStrEquals (tc, "MOCK LIBRARY", string); - free (string); - CuAssertIntEquals (tc, 0, info.flags); - CuAssertIntEquals (tc, 45, info.libraryVersion.major); - CuAssertIntEquals (tc, 145, info.libraryVersion.minor); + CuAssertTrue (tc, memcmp (&info, &MOCK_INFO, sizeof (CK_INFO)) == 0); teardown_mock_module (tc, module); } @@ -86,21 +74,21 @@ test_get_slot_list (CuTest *tc) /* Normal module has 2 slots, one with token present */ rv = (module->C_GetSlotList) (CK_TRUE, NULL, &count); CuAssertTrue (tc, rv == CKR_OK); - CuAssertIntEquals (tc, 1, count); + CuAssertIntEquals (tc, MOCK_SLOTS_PRESENT, count); rv = (module->C_GetSlotList) (CK_FALSE, NULL, &count); CuAssertTrue (tc, rv == CKR_OK); - CuAssertIntEquals (tc, 2, count); + CuAssertIntEquals (tc, MOCK_SLOTS_ALL, count); count = 8; rv = (module->C_GetSlotList) (CK_TRUE, slot_list, &count); CuAssertTrue (tc, rv == CKR_OK); - CuAssertIntEquals (tc, 1, count); + CuAssertIntEquals (tc, MOCK_SLOTS_PRESENT, count); CuAssertIntEquals (tc, MOCK_SLOT_ONE_ID, slot_list[0]); count = 8; rv = (module->C_GetSlotList) (CK_FALSE, slot_list, &count); CuAssertTrue (tc, rv == CKR_OK); - CuAssertIntEquals (tc, 2, count); + CuAssertIntEquals (tc, MOCK_SLOTS_ALL, count); CuAssertIntEquals (tc, MOCK_SLOT_ONE_ID, slot_list[0]); CuAssertIntEquals (tc, MOCK_SLOT_TWO_ID, slot_list[1]); @@ -279,6 +267,10 @@ test_wait_for_slot_event (CuTest *tc) CK_SLOT_ID slot; CK_RV rv; +#ifdef MOCK_SKIP_WAIT_TEST + return; +#endif + module = setup_mock_module (tc, NULL); rv = (module->C_WaitForSlotEvent) (0, &slot, NULL); diff --git a/p11-kit/tests/test-proxy.c b/p11-kit/tests/test-proxy.c index 99b2431..2ebd848 100644 --- a/p11-kit/tests/test-proxy.c +++ b/p11-kit/tests/test-proxy.c @@ -38,8 +38,10 @@ #include "CuTest.h" #include "library.h" -#include "pkcs11.h" +#include "mock.h" #include "p11-kit.h" +#include "pkcs11.h" +#include "proxy.h" #include <sys/types.h> @@ -54,6 +56,11 @@ /* This is the proxy module entry point in proxy.c, and linked to this test */ CK_RV C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list); +static CK_SLOT_ID mock_slot_one_id; +static CK_SLOT_ID mock_slot_two_id; +static CK_ULONG mock_slots_present; +static CK_ULONG mock_slots_all; + static void test_initialize_finalize (CuTest *tc) { @@ -63,13 +70,117 @@ test_initialize_finalize (CuTest *tc) rv = C_GetFunctionList (&proxy); CuAssertTrue (tc, rv == CKR_OK); + CuAssertTrue (tc, p11_proxy_module_check (proxy)); + rv = proxy->C_Initialize (NULL); CuAssertTrue (tc, rv == CKR_OK); rv = proxy->C_Finalize (NULL); CuAssertTrue (tc, rv == CKR_OK); + + p11_proxy_module_cleanup (); +} + +static void +test_initialize_multiple (CuTest *tc) +{ + CK_FUNCTION_LIST_PTR proxy; + CK_RV rv; + + rv = C_GetFunctionList (&proxy); + CuAssertTrue (tc, rv == CKR_OK); + + CuAssertTrue (tc, p11_proxy_module_check (proxy)); + + rv = proxy->C_Initialize (NULL); + CuAssertTrue (tc, rv == CKR_OK); + + rv = proxy->C_Initialize (NULL); + CuAssertTrue (tc, rv == CKR_OK); + + rv = proxy->C_Finalize (NULL); + CuAssertTrue (tc, rv == CKR_OK); + + rv = proxy->C_Finalize (NULL); + CuAssertTrue (tc, rv == CKR_OK); + + rv = proxy->C_Finalize (NULL); + CuAssertTrue (tc, rv == CKR_CRYPTOKI_NOT_INITIALIZED); + + p11_proxy_module_cleanup (); +} + +static CK_FUNCTION_LIST_PTR +setup_mock_module (CuTest *tc, + CK_SESSION_HANDLE *session) +{ + CK_FUNCTION_LIST_PTR proxy; + CK_SLOT_ID slots[32]; + CK_RV rv; + + rv = C_GetFunctionList (&proxy); + CuAssertTrue (tc, rv == CKR_OK); + + CuAssertTrue (tc, p11_proxy_module_check (proxy)); + + rv = proxy->C_Initialize (NULL); + CuAssertTrue (tc, rv == CKR_OK); + + mock_slots_all = 32; + rv = proxy->C_GetSlotList (CK_FALSE, slots, &mock_slots_all); + CuAssertTrue (tc, rv == CKR_OK); + CuAssertTrue (tc, mock_slots_all >= 2); + + /* Assume this is the slot we want to deal with */ + mock_slot_one_id = slots[0]; + mock_slot_two_id = slots[1]; + + rv = proxy->C_GetSlotList (CK_TRUE, NULL, &mock_slots_present); + CuAssertTrue (tc, rv == CKR_OK); + CuAssertTrue (tc, mock_slots_present > 1); + + if (session) { + rv = (proxy->C_OpenSession) (mock_slot_one_id, + CKF_RW_SESSION | CKF_SERIAL_SESSION, + NULL, NULL, session); + CuAssertTrue (tc, rv == CKR_OK); + } + + return proxy; } +static void +teardown_mock_module (CuTest *tc, + CK_FUNCTION_LIST_PTR module) +{ + CK_RV rv; + + rv = module->C_Finalize (NULL); + CuAssertTrue (tc, rv == CKR_OK); +} + +/* + * We redefine the mock module slot id so that the tests in test-mock.c + * use the proxy mapped slot id rather than the hard coded one + */ +#define MOCK_SLOT_ONE_ID mock_slot_one_id +#define MOCK_SLOT_TWO_ID mock_slot_two_id +#define MOCK_SLOTS_PRESENT mock_slots_present +#define MOCK_SLOTS_ALL mock_slots_all +#define MOCK_INFO mock_info +#define MOCK_SKIP_WAIT_TEST + +static const CK_INFO mock_info = { + { CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR }, + "PKCS#11 Kit ", + 0, + "PKCS#11 Kit Proxy Module ", + { 1, 1 } +}; + +/* Bring in all the mock module tests */ +#include "test-mock.c" + int main (void) { @@ -82,6 +193,9 @@ main (void) p11_kit_be_quiet (); SUITE_ADD_TEST (suite, test_initialize_finalize); + SUITE_ADD_TEST (suite, test_initialize_multiple); + + test_mock_add_tests (suite); CuSuiteRun (suite); CuSuiteSummary (suite, output); |