diff --git a/test/build.info b/test/build.info index 9697e55f12..3255a836de 100644 --- a/test/build.info +++ b/test/build.info @@ -731,6 +731,11 @@ IF[{- !$disabled{tests} -}] DEPEND[]=provider_internal_test.cnf GENERATE[provider_internal_test.cnf]=provider_internal_test.cnf.in + PROGRAMS{noinst}=provider_fallback_test + SOURCE[provider_fallback_test]=provider_fallback_test.c + INCLUDE[provider_fallback_test]=../include ../apps/include + DEPEND[provider_fallback_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_fallback_test.c b/test/provider_fallback_test.c new file mode 100644 index 0000000000..ce62184551 --- /dev/null +++ b/test/provider_fallback_test.c @@ -0,0 +1,57 @@ +/* + * Copyright 2020 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 +#include +#include +#include "testutil.h" + +static int test_provider(OPENSSL_CTX *ctx) +{ + EVP_KEYMGMT *rsameth = NULL; + const OSSL_PROVIDER *prov = NULL; + int ok; + + ok = TEST_true(OSSL_PROVIDER_available(ctx, "default")) + && TEST_ptr(rsameth = EVP_KEYMGMT_fetch(ctx, "RSA", NULL)) + && TEST_ptr(prov = EVP_KEYMGMT_provider(rsameth)) + && TEST_str_eq(OSSL_PROVIDER_name(prov), "default"); + + EVP_KEYMGMT_free(rsameth); + return ok; +} + +static int test_fallback_provider(void) +{ + return test_provider(NULL); +} + +static int test_explicit_provider(void) +{ + OPENSSL_CTX *ctx = NULL; + OSSL_PROVIDER *prov = NULL; + int ok; + + ok = TEST_ptr(ctx = OPENSSL_CTX_new()) + && TEST_ptr(prov = OSSL_PROVIDER_load(ctx, "default")) + && test_provider(ctx) + && TEST_true(OSSL_PROVIDER_unload(prov)); + + OPENSSL_CTX_free(ctx); + return ok; +} + + +int setup_tests(void) +{ + ADD_TEST(test_fallback_provider); + ADD_TEST(test_explicit_provider); + return 1; +} + diff --git a/test/recipes/04-test_provider_fallback.t b/test/recipes/04-test_provider_fallback.t new file mode 100644 index 0000000000..39d3b105dc --- /dev/null +++ b/test/recipes/04-test_provider_fallback.t @@ -0,0 +1,18 @@ +#! /usr/bin/env perl +# Copyright 2019 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_fallback", "provider_fallback_test");