blob: c0d3ffe7fd3d5bee048ff0767ffdc77c2a97f9b9 [file] [log] [blame] [edit]
/*
* Copyright 2016-2025 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 <openssl/crypto.h>
#include "../testutil.h"
#include "output.h"
#include "tu_local.h"
#if defined __has_include
/* Any compiler you're going to run valgrind on has this */
#if __has_include(<valgrind/valgrind.h>)
#include <valgrind/valgrind.h>
#define OPENSSL_VALGRIND_H_INCLUDED
#endif
#endif /* defined(__has_include) */
/*
* At some point we should consider looking at this function with a view to
* moving most/all of this into onfree handlers in OSSL_LIB_CTX.
*/
int main(int argc, char *argv[])
{
int ret = EXIT_FAILURE;
int setup_res;
int gi_ret;
gi_ret = global_init();
test_open_streams();
if (!gi_ret) {
test_printf_stderr("Global init failed - aborting\n");
return ret;
}
if (!setup_test_framework(argc, argv))
goto end;
if ((setup_res = setup_tests()) > 0) {
ret = run_tests(argv[0]);
cleanup_tests();
opt_check_usage();
} else if (setup_res == 0) {
opt_help(test_get_options());
}
end:
ret = pulldown_test_framework(ret);
test_close_streams();
#if defined(OPENSSL_VALGRIND_H_INCLUDED) && defined(RUNNING_ON_VALGRIND)
/*
* Somewhat paradoxically, we do *NOT* want to clean up normally
* when running our tests using valgrind in order to test the
* suppression file which we will ship with the distribution. We
* set the OSSL_USE_VALGRIND environment variable for this
* purpose, but we only want to dodge cleanup when running under
* valgrind, *and* that environment variable is set. If you run
* this under valgrind without that environment variable set, it
* will still call OPENSSL_cleanup normally.
*/
if (RUNNING_ON_VALGRIND && getenv("OSSL_USE_VALGRIND") != NULL)
return ret;
#endif /* defined(OPENSSL_VALGRIND_H_INCLUDED) && defined(RUNNING_ON_VALGRIND) */
OPENSSL_cleanup();
return ret;
}