diff options
author | Stef Walter <stefw@gnome.org> | 2013-03-12 18:03:25 +0100 |
---|---|---|
committer | Stef Walter <stefw@gnome.org> | 2013-03-15 17:54:55 +0100 |
commit | ff009f8a671e6ddd02a684bb1707a2a797fe4600 (patch) | |
tree | 3f3d5162a64f0addb0ad2d1acba91eae46f8ef1e /trust/tests/test-module.c | |
parent | 3fc6365093ad07b2eb5ef859093c5c5eb56ee700 (diff) |
trust: Refactor to include concept of the index
* The index holds PKCS#11 objects whether for the token or for the session.
* The index provides hook for a builder to expand or validate objects
being added to the index.
* In addition theres a change hook so that a builder can maintain state
between objects, such as the compat NSS trust objects.
https://bugs.freedesktop.org/show_bug.cgi?id=62329
Diffstat (limited to 'trust/tests/test-module.c')
-rw-r--r-- | trust/tests/test-module.c | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/trust/tests/test-module.c b/trust/tests/test-module.c index d811f1d..ddc31df 100644 --- a/trust/tests/test-module.c +++ b/trust/tests/test-module.c @@ -547,6 +547,236 @@ test_find_builtin (CuTest *cu) teardown (cu); } +static void +test_session_object (CuTest *cu) +{ + CK_ATTRIBUTE original[] = { + { CKA_LABEL, "yay", 3 }, + { CKA_VALUE, "eight", 5 }, + { CKA_INVALID } + }; + + CK_SESSION_HANDLE session; + CK_OBJECT_HANDLE handle; + CK_ULONG size; + CK_RV rv; + + setup (cu); + + rv = test.module->C_OpenSession (test.slots[0], CKF_SERIAL_SESSION, NULL, NULL, &session); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_CreateObject (session, original, 2, &handle); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_GetObjectSize (session, handle, &size); + CuAssertTrue (cu, rv == CKR_OK); + + teardown (cu); +} + +static void +test_session_find (CuTest *cu) +{ + CK_ATTRIBUTE original[] = { + { CKA_LABEL, "yay", 3 }, + { CKA_VALUE, "eight", 5 }, + { CKA_INVALID } + }; + + CK_SESSION_HANDLE session; + CK_OBJECT_HANDLE handle; + CK_OBJECT_HANDLE check; + CK_ULONG count; + CK_RV rv; + + setup (cu); + + rv = test.module->C_OpenSession (test.slots[0], CKF_SERIAL_SESSION, NULL, NULL, &session); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_CreateObject (session, original, 2, &handle); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_FindObjectsInit (session, original, 2); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_FindObjects (session, &check, 1, &count); + CuAssertTrue (cu, rv == CKR_OK); + CuAssertIntEquals (cu, 1, count); + CuAssertIntEquals (cu, handle, check); + + rv = test.module->C_FindObjectsFinal (session); + CuAssertTrue (cu, rv == CKR_OK); + + teardown (cu); +} + +static void +test_lookup_invalid (CuTest *cu) +{ + CK_SESSION_HANDLE session; + CK_ULONG size; + CK_RV rv; + + setup (cu); + + rv = test.module->C_OpenSession (test.slots[0], CKF_SERIAL_SESSION, NULL, NULL, &session); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_GetObjectSize (session, 88888, &size); + CuAssertTrue (cu, rv == CKR_OBJECT_HANDLE_INVALID); + + teardown (cu); +} + +static void +test_remove_token (CuTest *cu) +{ + CK_SESSION_HANDLE session; + CK_OBJECT_HANDLE handle; + CK_ULONG count; + CK_RV rv; + + setup (cu); + + rv = test.module->C_OpenSession (test.slots[0], CKF_SERIAL_SESSION, NULL, NULL, &session); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_FindObjectsInit (session, NULL, 0); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_FindObjects (session, &handle, 1, &count); + CuAssertTrue (cu, rv == CKR_OK); + CuAssertIntEquals (cu, 1, count); + + rv = test.module->C_DestroyObject (session, handle); + CuAssertTrue (cu, rv == CKR_TOKEN_WRITE_PROTECTED); + + teardown (cu); +} + +static void +test_setattr_token (CuTest *cu) +{ + CK_ATTRIBUTE original[] = { + { CKA_LABEL, "yay", 3 }, + { CKA_VALUE, "eight", 5 }, + { CKA_INVALID } + }; + + CK_SESSION_HANDLE session; + CK_OBJECT_HANDLE handle; + CK_ULONG count; + CK_RV rv; + + setup (cu); + + rv = test.module->C_OpenSession (test.slots[0], CKF_SERIAL_SESSION, NULL, NULL, &session); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_FindObjectsInit (session, NULL, 0); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_FindObjects (session, &handle, 1, &count); + CuAssertTrue (cu, rv == CKR_OK); + CuAssertIntEquals (cu, 1, count); + + rv = test.module->C_SetAttributeValue (session, handle, original, 2); + CuAssertTrue (cu, rv == CKR_TOKEN_WRITE_PROTECTED); + + teardown (cu); +} + +static void +test_session_copy (CuTest *cu) +{ + CK_ATTRIBUTE original[] = { + { CKA_LABEL, "yay", 3 }, + { CKA_VALUE, "eight", 5 }, + { CKA_INVALID } + }; + + CK_SESSION_HANDLE session; + CK_OBJECT_HANDLE handle; + CK_OBJECT_HANDLE copy; + CK_ULONG size; + CK_RV rv; + + setup (cu); + + rv = test.module->C_OpenSession (test.slots[0], CKF_SERIAL_SESSION, NULL, NULL, &session); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_CreateObject (session, original, 2, &handle); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_CopyObject (session, handle, original, 2, ©); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_GetObjectSize (session, copy, &size); + CuAssertTrue (cu, rv == CKR_OK); + + teardown (cu); +} + +static void +test_session_setattr (CuTest *cu) +{ + CK_ATTRIBUTE original[] = { + { CKA_LABEL, "yay", 3 }, + { CKA_VALUE, "eight", 5 }, + { CKA_INVALID } + }; + + CK_SESSION_HANDLE session; + CK_OBJECT_HANDLE handle; + CK_RV rv; + + setup (cu); + + rv = test.module->C_OpenSession (test.slots[0], CKF_SERIAL_SESSION, NULL, NULL, &session); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_CreateObject (session, original, 2, &handle); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_SetAttributeValue (session, handle, original, 2); + CuAssertTrue (cu, rv == CKR_OK); + + teardown (cu); +} + +static void +test_session_remove (CuTest *cu) +{ + CK_ATTRIBUTE original[] = { + { CKA_LABEL, "yay", 3 }, + { CKA_VALUE, "eight", 5 }, + { CKA_INVALID } + }; + + CK_SESSION_HANDLE session; + CK_OBJECT_HANDLE handle; + CK_RV rv; + + setup (cu); + + rv = test.module->C_OpenSession (test.slots[0], CKF_SERIAL_SESSION, NULL, NULL, &session); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_CreateObject (session, original, 2, &handle); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_DestroyObject (session, handle); + CuAssertTrue (cu, rv == CKR_OK); + + rv = test.module->C_DestroyObject (session, handle); + CuAssertTrue (cu, rv == CKR_OBJECT_HANDLE_INVALID); + + teardown (cu); +} + int main (void) { @@ -565,6 +795,14 @@ main (void) SUITE_ADD_TEST (suite, test_close_all_sessions); SUITE_ADD_TEST (suite, test_find_certificates); SUITE_ADD_TEST (suite, test_find_builtin); + SUITE_ADD_TEST (suite, test_lookup_invalid); + SUITE_ADD_TEST (suite, test_remove_token); + SUITE_ADD_TEST (suite, test_setattr_token); + SUITE_ADD_TEST (suite, test_session_object); + SUITE_ADD_TEST (suite, test_session_find); + SUITE_ADD_TEST (suite, test_session_copy); + SUITE_ADD_TEST (suite, test_session_remove); + SUITE_ADD_TEST (suite, test_session_setattr); CuSuiteRun (suite); CuSuiteSummary (suite, output); |