Add test for provider gettables

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15970)
This commit is contained in:
Shane Lontis 2021-06-25 12:01:13 +10:00 committed by Pauli
parent e54f0c9b2f
commit 866376432b
2 changed files with 90 additions and 13 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 2020-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
@ -103,6 +103,43 @@ static int self_test_on_load(const OSSL_PARAM params[], void *arg)
return self_test_events(params, arg, "On Loading", 0);
}
static int get_provider_params(const OSSL_PROVIDER *prov)
{
int ret = 0;
OSSL_PARAM params[5];
char *name, *version, *buildinfo;
int status;
const OSSL_PARAM *gettable, *p;
if (!TEST_ptr(gettable = OSSL_PROVIDER_gettable_params(prov))
|| !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_NAME))
|| !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_VERSION))
|| !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_STATUS))
|| !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_BUILDINFO)))
goto end;
params[0] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_NAME, &name, 0);
params[1] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_VERSION,
&version, 0);
params[2] = OSSL_PARAM_construct_int(OSSL_PROV_PARAM_STATUS, &status);
params[3] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_BUILDINFO,
&buildinfo, 0);
params[4] = OSSL_PARAM_construct_end();
OSSL_PARAM_set_all_unmodified(params);
if (!TEST_true(OSSL_PROVIDER_get_params(prov, params)))
goto end;
if (!TEST_true(OSSL_PARAM_modified(params + 0))
|| !TEST_true(OSSL_PARAM_modified(params + 1))
|| !TEST_true(OSSL_PARAM_modified(params + 2))
|| !TEST_true(OSSL_PARAM_modified(params + 3))
|| !TEST_true(status == 1))
goto end;
ret = 1;
end:
return ret;
}
static int test_provider_status(void)
{
int ret = 0;
@ -113,6 +150,8 @@ static int test_provider_status(void)
if (!TEST_ptr(prov = OSSL_PROVIDER_load(libctx, provider_name)))
goto err;
if (!get_provider_params(prov))
goto err;
/* Test that the provider status is ok */
params[0] = OSSL_PARAM_construct_uint(OSSL_PROV_PARAM_STATUS, &status);
@ -149,6 +188,18 @@ err:
return ret;
}
static int test_provider_gettable_params(void)
{
OSSL_PROVIDER *prov;
int ret;
if (!TEST_ptr(prov = OSSL_PROVIDER_load(libctx, provider_name)))
return 0;
ret = get_provider_params(prov);
OSSL_PROVIDER_unload(prov);
return ret;
}
int setup_tests(void)
{
OPTION_CHOICE o;
@ -173,13 +224,22 @@ int setup_tests(void)
libctx = OSSL_LIB_CTX_new();
if (libctx == NULL)
return 0;
self_test_args.count = 0;
OSSL_SELF_TEST_set_callback(libctx, self_test_on_load, &self_test_args);
if (!OSSL_LIB_CTX_load_config(libctx, config_file)) {
opt_printf_stderr("Failed to load config\n");
return 0;
if (strcmp(provider_name, "fips") == 0) {
self_test_args.count = 0;
OSSL_SELF_TEST_set_callback(libctx, self_test_on_load, &self_test_args);
if (!OSSL_LIB_CTX_load_config(libctx, config_file)) {
opt_printf_stderr("Failed to load config\n");
return 0;
}
ADD_TEST(test_provider_status);
} else {
ADD_TEST(test_provider_gettable_params);
}
ADD_TEST(test_provider_status);
return 1;
}
void cleanup_tests(void)
{
OSSL_LIB_CTX_free(libctx);
}

View File

@ -22,11 +22,28 @@ use lib bldtop_dir('.');
my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
plan skip_all => "provider_status is not supported by this test"
if $no_fips;
plan tests => 5;
plan tests => 1;
ok(run(test(["provider_status_test", "-provider_name", "null"])),
"null provider test");
ok(run(test(["provider_status_test", "-config", srctop_file("test","fips.cnf"),
"-provider_name", "fips"])),
"running provider_status_test");
ok(run(test(["provider_status_test", "-provider_name", "base"])),
"base provider test");
ok(run(test(["provider_status_test", "-provider_name", "default"])),
"default provider test");
SKIP: {
skip "Skipping legacy test", 1
if disabled("legacy");
ok(run(test(["provider_status_test", "-provider_name", "legacy"])),
"legacy provider test");
}
SKIP: {
skip "Skipping fips test", 1
if $no_fips;
ok(run(test(["provider_status_test", "-config", srctop_file("test","fips.cnf"),
"-provider_name", "fips"])),
"fips provider test");
}