From 194fcc9ae09ea7cbe0b3b60c67061e51bb24de79 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Wed, 25 Aug 2021 14:39:29 +0100 Subject: [PATCH] Add a test for running the config twice Make sure there are no leaks from running the config file twice. Reviewed-by: Tomas Mraz Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/16425) --- test/build.info | 6 ++- test/prov_config_test.c | 61 ++++++++++++++++++++++++++++++ test/recipes/30-test_prov_config.t | 32 ++++++++++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 test/prov_config_test.c create mode 100644 test/recipes/30-test_prov_config.t diff --git a/test/build.info b/test/build.info index af21e03255..dab5af4ebe 100644 --- a/test/build.info +++ b/test/build.info @@ -57,7 +57,7 @@ IF[{- !$disabled{tests} -}] context_internal_test aesgcmtest params_test evp_pkey_dparams_test \ keymgmt_internal_test hexstr_test provider_status_test defltfips_test \ bio_readbuffer_test user_property_test pkcs7_test upcallstest \ - provfetchtest + provfetchtest prov_config_test IF[{- !$disabled{'deprecated-3.0'} -}] PROGRAMS{noinst}=enginetest @@ -176,6 +176,10 @@ IF[{- !$disabled{tests} -}] INCLUDE[provfetchtest]=../include ../apps/include DEPEND[provfetchtest]=../libcrypto.a libtestutil.a + SOURCE[prov_config_test]=prov_config_test.c + INCLUDE[prov_config_test]=../include ../apps/include + DEPEND[prov_config_test]=../libcrypto.a libtestutil.a + SOURCE[evp_pkey_provided_test]=evp_pkey_provided_test.c INCLUDE[evp_pkey_provided_test]=../include ../apps/include DEPEND[evp_pkey_provided_test]=../libcrypto.a libtestutil.a diff --git a/test/prov_config_test.c b/test/prov_config_test.c new file mode 100644 index 0000000000..4b04211fa4 --- /dev/null +++ b/test/prov_config_test.c @@ -0,0 +1,61 @@ +/* + * Copyright 2021 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 "testutil.h" + +static char *configfile = NULL; + +/* + * Test to make sure there are no leaks or failures from loading the config + * file twice. + */ +static int test_double_config(void) +{ + OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new(); + int testresult = 0; + EVP_MD *sha256 = NULL; + + if (!TEST_ptr(configfile)) + return 0; + if (!TEST_ptr(ctx)) + return 0; + + if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, configfile))) + return 0; + if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, configfile))) + return 0; + + /* Check we can actually fetch something */ + sha256 = EVP_MD_fetch(ctx, "SHA2-256", NULL); + if (!TEST_ptr(sha256)) + goto err; + + testresult = 1; + err: + EVP_MD_free(sha256); + OSSL_LIB_CTX_free(ctx); + return testresult; +} + +OPT_TEST_DECLARE_USAGE("configfile\n") + +int setup_tests(void) +{ + if (!test_skip_common_options()) { + TEST_error("Error parsing test options\n"); + return 0; + } + + if (!TEST_ptr(configfile = test_get_argument(0))) + return 0; + + ADD_TEST(test_double_config); + return 1; +} diff --git a/test/recipes/30-test_prov_config.t b/test/recipes/30-test_prov_config.t new file mode 100644 index 0000000000..f97a26dbe9 --- /dev/null +++ b/test/recipes/30-test_prov_config.t @@ -0,0 +1,32 @@ +#! /usr/bin/env perl +# Copyright 2021 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 OpenSSL::Test::Simple; +use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir bldtop_dir/; +use OpenSSL::Test::Utils; + +BEGIN { +setup("test_prov_config"); +} + +use lib srctop_dir('Configurations'); +use lib bldtop_dir('.'); + +my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0); + +plan tests => 2; + +ok(run(test(["prov_config_test", srctop_file("test", "default.cnf")])), + "running prov_config_test default.cnf"); +SKIP: { + skip "Skipping FIPS test in this build", 1 if $no_fips; + + ok(run(test(["prov_config_test", srctop_file("test", "fips.cnf")])), + "running prov_config_test fips.cnf"); +} -- 2.34.1