diff options
author | Daiki Ueno <dueno@redhat.com> | 2018-04-05 11:14:39 +0200 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2018-04-06 10:59:44 +0200 |
commit | a6d0e490209638605b17b0bdc66ad03d36909dae (patch) | |
tree | ac139785aaedd85f53bbad79d90adf8c7c9cf733 /p11-kit/test-proxy.c | |
parent | de963b96929b9da61916a0c43b4ac4c34a39e238 (diff) |
modules: Add option to control module visibility from proxy
This enables to control whether a module will be loaded from the proxy
module. The configuration reuses the "enable-in" and "disable-in"
options, with a special literal "p11-kit-proxy" as the value.
Diffstat (limited to 'p11-kit/test-proxy.c')
-rw-r--r-- | p11-kit/test-proxy.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/p11-kit/test-proxy.c b/p11-kit/test-proxy.c index c34415b..d33922e 100644 --- a/p11-kit/test-proxy.c +++ b/p11-kit/test-proxy.c @@ -190,6 +190,86 @@ test_initialize_child (void) } #endif +struct { + char *directory; + const char *system_file; + const char *system_modules; +} test; + +extern const char *p11_config_system_file; +extern const char *p11_config_system_modules; + +static void +setup (void *unused) +{ + test.directory = p11_test_directory ("test-proxy"); + test.system_file = p11_config_system_file; + p11_config_system_file = SRCDIR "/p11-kit/fixtures/test-system-none.conf"; + test.system_modules = p11_config_system_modules; + p11_config_system_modules = test.directory; +} + +static void +teardown (void *unused) +{ + p11_test_directory_delete (test.directory); + free (test.directory); + p11_config_system_file = test.system_file; + p11_config_system_modules = test.system_modules; +} + +#define ONE_MODULE "module: mock-one" SHLEXT "\n" +#define TWO_MODULE "module: mock-two" SHLEXT "\n" +#define ENABLED "enable-in: test-proxy, p11-kit-proxy\n" +#define DISABLED "disable-in: p11-kit-proxy\n" + +static CK_ULONG +load_modules_and_count_slots (void) +{ + CK_FUNCTION_LIST_PTR proxy; + CK_ULONG count; + CK_RV rv; + + rv = C_GetFunctionList (&proxy); + assert (rv == CKR_OK); + + assert (p11_proxy_module_check (proxy)); + + rv = proxy->C_Initialize (NULL); + assert (rv == CKR_OK); + + rv = proxy->C_GetSlotList (CK_TRUE, NULL, &count); + assert (rv == CKR_OK); + + rv = proxy->C_Finalize (NULL); + assert_num_eq (rv, CKR_OK); + + p11_proxy_module_cleanup (); + + return count; +} + +static void +test_disable (void) +{ + CK_ULONG count, enabled, disabled; + + p11_test_file_write (test.directory, "one.module", ONE_MODULE, strlen (ONE_MODULE)); + p11_test_file_write (test.directory, "two.module", TWO_MODULE, strlen (TWO_MODULE)); + count = load_modules_and_count_slots (); + assert_num_cmp (count, >, 1); + + p11_test_file_write (test.directory, "one.module", ONE_MODULE ENABLED, strlen (ONE_MODULE ENABLED)); + p11_test_file_write (test.directory, "two.module", TWO_MODULE, strlen (TWO_MODULE)); + enabled = load_modules_and_count_slots (); + assert_num_eq (enabled, count); + + p11_test_file_write (test.directory, "one.module", ONE_MODULE, strlen (ONE_MODULE)); + p11_test_file_write (test.directory, "two.module", TWO_MODULE DISABLED, strlen (TWO_MODULE DISABLED)); + disabled = load_modules_and_count_slots (); + assert_num_cmp (disabled, <, count); +} + static CK_FUNCTION_LIST_PTR setup_mock_module (CK_SESSION_HANDLE *session) { @@ -272,6 +352,9 @@ main (int argc, p11_test (test_initialize_child, "/proxy/initialize-child"); #endif + p11_fixture (setup, teardown); + p11_test (test_disable, "/proxy/disable"); + test_mock_add_tests ("/proxy"); return p11_test_run (argc, argv); |