diff options
author | Richard Levitte <levitte@openssl.org> | 2020-06-22 15:49:55 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2020-06-28 10:55:51 +0200 |
commit | e31eda006faaadc8bbe0bb809dbbaba0e4323fe6 (patch) | |
tree | 8ad048b1d3e13563007848a6adea64900bdb0432 /test/evp_extra_test2.c | |
parent | 3bd65f9b5b4731acae395d045dea63d7fdfd507b (diff) |
TEST: Add test to exercise OPENSSL_CTX_set0_default()
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/12228)
Diffstat (limited to 'test/evp_extra_test2.c')
-rw-r--r-- | test/evp_extra_test2.c | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/test/evp_extra_test2.c b/test/evp_extra_test2.c index f4d8b98256..63380f878a 100644 --- a/test/evp_extra_test2.c +++ b/test/evp_extra_test2.c @@ -19,7 +19,7 @@ #include "testutil.h" #include "internal/nelem.h" -static OPENSSL_CTX *libctx = NULL; +static OPENSSL_CTX *mainctx = NULL; static OSSL_PROVIDER *nullprov = NULL; /* @@ -198,7 +198,7 @@ static int test_d2i_AutoPrivateKey_ex(int i) int expected_id = ak->evptype; p = input; - if (!TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &p, input_len, libctx, + if (!TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &p, input_len, mainctx, NULL)) || !TEST_ptr_eq(p, input + input_len) || !TEST_int_eq(EVP_PKEY_id(pkey), expected_id)) @@ -211,20 +211,58 @@ static int test_d2i_AutoPrivateKey_ex(int i) return ret; } +static int test_alternative_default(void) +{ + OPENSSL_CTX *oldctx; + EVP_MD *sha256; + int ok = 0; + + /* + * setup_tests() loaded the "null" provider in the current default, so + * we know this fetch should fail. + */ + if (!TEST_ptr_null(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL))) + goto err; + + /* + * Now we switch to our main library context, and try again. Since no + * providers are loaded in this one, it should fall back to the default. + */ + if (!TEST_ptr(oldctx = OPENSSL_CTX_set0_default(mainctx)) + || !TEST_ptr(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL))) + goto err; + EVP_MD_free(sha256); + sha256 = NULL; + + /* + * Switching back should give us our main library context back, and + * fetching SHA2-256 should fail again. + */ + if (!TEST_ptr_eq(OPENSSL_CTX_set0_default(oldctx), mainctx) + || !TEST_ptr_null(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL))) + goto err; + + ok = 1; + err: + EVP_MD_free(sha256); + return ok; +} + int setup_tests(void) { - libctx = OPENSSL_CTX_new(); + mainctx = OPENSSL_CTX_new(); - if (!TEST_ptr(libctx)) + if (!TEST_ptr(mainctx)) return 0; nullprov = OSSL_PROVIDER_load(NULL, "null"); if (!TEST_ptr(nullprov)) { - OPENSSL_CTX_free(libctx); - libctx = NULL; + OPENSSL_CTX_free(mainctx); + mainctx = NULL; return 0; } + ADD_TEST(test_alternative_default); ADD_ALL_TESTS(test_d2i_AutoPrivateKey_ex, OSSL_NELEM(keydata)); return 1; @@ -232,6 +270,6 @@ int setup_tests(void) void cleanup_tests(void) { - OPENSSL_CTX_free(libctx); + OPENSSL_CTX_free(mainctx); OSSL_PROVIDER_unload(nullprov); } |