Extend the test_multi_load() test Run more threads and load the legacy provider (which uses a child lib ctx) in order to hit more possible thread failures. Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/16980)
diff --git a/test/threadstest.c b/test/threadstest.c index f689676..cfd5991 100644 --- a/test/threadstest.c +++ b/test/threadstest.c
@@ -30,7 +30,7 @@ #include "threadstest.h" /* Limit the maximum number of threads */ -#define MAXIMUM_THREADS 3 +#define MAXIMUM_THREADS 10 /* Limit the maximum number of providers loaded into a library context */ #define MAXIMUM_PROVIDERS 4 @@ -558,6 +558,7 @@ return testresult; } +static char *multi_load_provider = "legacy"; /* * This test attempts to load several providers at the same time, and if * run with a thread sanitizer, should crash if the core provider code @@ -567,7 +568,7 @@ { OSSL_PROVIDER *prov; - if (!TEST_ptr(prov = OSSL_PROVIDER_load(multi_libctx, "default")) + if (!TEST_ptr(prov = OSSL_PROVIDER_load(multi_libctx, multi_load_provider)) || !TEST_true(OSSL_PROVIDER_unload(prov))) multi_success = 0; } @@ -588,6 +589,7 @@ static int test_multi_load(void) { int res = 1; + OSSL_PROVIDER *prov; /* The multidefault test must run prior to this test */ if (!multidefault_run) { @@ -595,7 +597,21 @@ res = test_multi_default(); } - return thread_run_test(NULL, 3, &test_multi_load_worker, 0, NULL) && res; + /* + * We use the legacy provider in test_multi_load_worker because it uses a + * child libctx that might hit more codepaths that might be sensitive to + * threading issues. But in a no-legacy build that won't be loadable so + * we use the default provider instead. + */ + prov = OSSL_PROVIDER_load(NULL, "legacy"); + if (prov == NULL) { + TEST_info("Cannot load legacy provider - assuming this is a no-legacy build"); + multi_load_provider = "default"; + } + OSSL_PROVIDER_unload(prov); + + return thread_run_test(NULL, MAXIMUM_THREADS, &test_multi_load_worker, 0, + NULL) && res; } static void test_obj_create_one(void)