X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=test%2Fshlibloadtest.c;h=131d1f63dc1b460b6d63ddced278099926bf8d20;hp=0a4d5f7cd662a18b62cf5c5a19ed933b2dbac7f3;hb=5d99881e6a58a8775b8ca866b794f615a16bb033;hpb=bdd07c78a08bba9e006749bf0ee20dc4a553ab83 diff --git a/test/shlibloadtest.c b/test/shlibloadtest.c index 0a4d5f7cd6..131d1f63dc 100644 --- a/test/shlibloadtest.c +++ b/test/shlibloadtest.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -15,28 +15,30 @@ #include #include "testutil.h" -#if !defined(DSO_DLFCN) && !defined(DSO_WIN32) -int main(void) -{ - TEST_info("Not implemented on this platform\n"); - return 0; -} - -#else - typedef const SSL_METHOD * (*TLS_method_t)(void); typedef SSL_CTX * (*SSL_CTX_new_t)(const SSL_METHOD *meth); typedef void (*SSL_CTX_free_t)(SSL_CTX *); typedef unsigned long (*ERR_get_error_t)(void); typedef unsigned long (*OpenSSL_version_num_t)(void); +typedef enum test_types_en { + CRYPTO_FIRST, + SSL_FIRST, + JUST_CRYPTO +} TEST_TYPE; + +static TEST_TYPE test_type; +static const char *path_crypto; +static const char *path_ssl; + #ifdef DSO_DLFCN # include +# define SHLIB_INIT NULL + typedef void *SHLIB; typedef void *SHLIB_SYM; -# define SHLIB_INIT NULL static int shlib_load(const char *filename, SHLIB *lib) { @@ -50,19 +52,22 @@ static int shlib_sym(SHLIB lib, const char *symname, SHLIB_SYM *sym) return *sym != NULL; } +# ifdef OPENSSL_USE_NODELETE static int shlib_close(SHLIB lib) { return dlclose(lib) != 0 ? 0 : 1; } +# endif #endif #ifdef DSO_WIN32 # include +# define SHLIB_INIT 0 + typedef HINSTANCE SHLIB; typedef void *SHLIB_SYM; -# define SHLIB_INIT 0 static int shlib_load(const char *filename, SHLIB *lib) { @@ -76,21 +81,16 @@ static int shlib_sym(SHLIB lib, const char *symname, SHLIB_SYM *sym) return *sym != NULL; } +# ifdef OPENSSL_USE_NODELETE static int shlib_close(SHLIB lib) { return FreeLibrary(lib) == 0 ? 0 : 1; } +# endif #endif -typedef enum test_types_en { - CRYPTO_FIRST, - SSL_FIRST, - JUST_CRYPTO -} TEST_TYPE; -static TEST_TYPE test_type; -static const char *path_crypto; -static const char *path_ssl; +#if defined(DSO_DLFCN) || defined(DSO_WIN32) static int test_lib(void) { @@ -117,6 +117,7 @@ static int test_lib(void) if (!TEST_true(shlib_load(path_crypto, &cryptolib)) || !TEST_true(shlib_load(path_ssl, &ssllib))) goto end; + break; case SSL_FIRST: if (!TEST_true(shlib_load(path_ssl, &ssllib)) || !TEST_true(shlib_load(path_crypto, &cryptolib))) @@ -148,6 +149,7 @@ static int test_lib(void) if (!TEST_int_eq(myOpenSSL_version_num(), OPENSSL_VERSION_NUMBER)) goto end; +#ifdef OPENSSL_USE_NODELETE switch (test_type) { case JUST_CRYPTO: if (!TEST_true(shlib_close(cryptolib))) @@ -157,39 +159,42 @@ static int test_lib(void) if (!TEST_true(shlib_close(cryptolib)) || !TEST_true(shlib_close(ssllib))) goto end; + break; case SSL_FIRST: if (!TEST_true(shlib_close(ssllib)) || !TEST_true(shlib_close(cryptolib))) goto end; break; } +#endif result = 1; end: return result; } +#endif -int test_main(int argc, char **argv) + +int setup_tests(void) { - if (argc != 4) { - TEST_error("Unexpected number of arguments"); - return EXIT_FAILURE; - } + const char *p = test_get_argument(0); - if (strcmp(argv[1], "-crypto_first") == 0) { + if (strcmp(p, "-crypto_first") == 0) { test_type = CRYPTO_FIRST; - } else if (strcmp(argv[1], "-ssl_first") == 0) { + } else if (strcmp(p, "-ssl_first") == 0) { test_type = SSL_FIRST; - } else if (strcmp(argv[1], "-just_crypto") == 0) { + } else if (strcmp(p, "-just_crypto") == 0) { test_type = JUST_CRYPTO; } else { TEST_error("Unrecognised argument"); - return EXIT_FAILURE; + return 0; } - path_crypto = argv[2]; - path_ssl = argv[3]; + if (!TEST_ptr(path_crypto = test_get_argument(1)) + || !TEST_ptr(path_ssl = test_get_argument(2))) + return 0; +#if defined(DSO_DLFCN) || defined(DSO_WIN32) ADD_TEST(test_lib); - return run_tests(argv[0]); -} #endif + return 1; +}