diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/build.info | 5 | ||||
-rw-r--r-- | test/provider_default_search_path_test.c | 59 | ||||
-rw-r--r-- | test/recipes/04-test_provider_default_search_path.t | 18 |
3 files changed, 82 insertions, 0 deletions
diff --git a/test/build.info b/test/build.info index fb6a4551db..0722eff32d 100644 --- a/test/build.info +++ b/test/build.info @@ -979,6 +979,11 @@ IF[{- !$disabled{tests} -}] INCLUDE[provider_pkey_test]=../include ../apps/include DEPEND[provider_pkey_test]=../libcrypto libtestutil.a + PROGRAMS{noinst}=provider_default_search_path_test + SOURCE[provider_default_search_path_test]=provider_default_search_path_test.c + INCLUDE[provider_default_search_path_test]=../include ../apps/include + DEPEND[provider_default_search_path_test]=../libcrypto libtestutil.a + PROGRAMS{noinst}=params_test SOURCE[params_test]=params_test.c INCLUDE[params_test]=.. ../include ../apps/include diff --git a/test/provider_default_search_path_test.c b/test/provider_default_search_path_test.c new file mode 100644 index 0000000000..684a508765 --- /dev/null +++ b/test/provider_default_search_path_test.c @@ -0,0 +1,59 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include <stddef.h> +#include <openssl/provider.h> +#include "testutil.h" + +static int test_default_libctx(void) +{ + OSSL_LIB_CTX *ctx = NULL; + char *path = "./some/path"; + const char *retrieved_path = NULL; + int ok; + + ok = TEST_true(OSSL_PROVIDER_set_default_search_path(ctx, path)) + && TEST_ptr(retrieved_path = OSSL_PROVIDER_get0_default_search_path(ctx)) + && TEST_str_eq(path, retrieved_path); + + return ok; +} + +static int test_explicit_libctx(void) +{ + OSSL_LIB_CTX *ctx = NULL; + char *def_libctx_path = "./some/path"; + char *path = "./another/location"; + const char *retrieved_defctx_path = NULL; + const char *retrieved_path = NULL; + int ok; + + /* Set search path for default context, then create a new context and set + another path for it. Finally, get both paths and make sure they are + still what we set and are separate. */ + ok = TEST_true(OSSL_PROVIDER_set_default_search_path(NULL, def_libctx_path)) + && TEST_ptr(ctx = OSSL_LIB_CTX_new()) + && TEST_true(OSSL_PROVIDER_set_default_search_path(ctx, path)) + && TEST_ptr(retrieved_defctx_path = OSSL_PROVIDER_get0_default_search_path(NULL)) + && TEST_str_eq(def_libctx_path, retrieved_defctx_path) + && TEST_ptr(retrieved_path = OSSL_PROVIDER_get0_default_search_path(ctx)) + && TEST_str_eq(path, retrieved_path) + && TEST_str_ne(retrieved_path, retrieved_defctx_path); + + OSSL_LIB_CTX_free(ctx); + return ok; +} + +int setup_tests(void) +{ + ADD_TEST(test_default_libctx); + ADD_TEST(test_explicit_libctx); + return 1; +} + diff --git a/test/recipes/04-test_provider_default_search_path.t b/test/recipes/04-test_provider_default_search_path.t new file mode 100644 index 0000000000..29797e62a0 --- /dev/null +++ b/test/recipes/04-test_provider_default_search_path.t @@ -0,0 +1,18 @@ +#! /usr/bin/env perl +# Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the Apache License 2.0 (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +use strict; +use File::Spec; +use OpenSSL::Test::Simple; + +# We must ensure that OPENSSL_CONF points at an empty file. Otherwise, we +# risk that the configuration file contains statements that load providers, +# which defeats the purpose of this test. The NUL device is good enough. +$ENV{OPENSSL_CONF} = File::Spec->devnull(); + +simple_test("test_provider_default_search_path", "provider_default_search_path_test"); |