From f995e5bdcd5d4c2143323ff78e4dcc0b95c5e024 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Sat, 23 May 2020 16:34:07 +0200 Subject: [PATCH] TEST: Add provider_fallback_test, to test aspects of fallback providers There are cases where the fallback providers aren't treated right. For example, the following calls, in that order, will end up with a failed EVP_KEYMGMT_fetch(), even thought the default provider does supply an implementation of the "RSA" keytype. EVP_KEYMGMT *rsameth = NULL; OSSL_PROVIDER_available(NULL, "default"); rsameth = EVP_KEYMGMT_fetch(NULL, "RSA", NULL); For good measure, this also tests that explicit loading of the default provider won't fail. Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/11926) --- test/build.info | 5 +++ test/provider_fallback_test.c | 57 ++++++++++++++++++++++++ test/recipes/04-test_provider_fallback.t | 18 ++++++++ 3 files changed, 80 insertions(+) create mode 100644 test/provider_fallback_test.c create mode 100644 test/recipes/04-test_provider_fallback.t 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"); -- 2.25.1