4
* Botan is released under the Simplified BSD License (see license.txt)
7
#include "../cli/argparse.h"
8
#include "test_runner.h"
15
#include <botan/version.h>
17
#if defined(BOTAN_HAS_OPENSSL)
18
#include <botan/internal/openssl.h>
23
std::string help_text(const std::string& spec)
25
std::ostringstream err;
27
err << "Usage: " << spec << "\n\n"
28
<< "Available test suites\n"
29
<< "----------------\n";
33
for(auto const& test : Botan_Tests::Test::registered_tests())
36
line_len += test.size() + 1;
55
int main(int argc, char* argv[])
57
std::cerr << Botan::runtime_version_check(BOTAN_VERSION_MAJOR, BOTAN_VERSION_MINOR, BOTAN_VERSION_PATCH);
61
const std::string arg_spec =
62
"botan-test --data-dir= --pkcs11-lib= --provider= --log-success "
63
"--verbose --help --run-long-tests --run-online-tests --test-runs=1 --drbg-seed= "
66
Botan_CLI::Argument_Parser parser(arg_spec);
68
parser.parse_args(std::vector<std::string>(argv + 1, argv + argc));
70
if(parser.flag_set("help"))
72
std::cout << help_text(arg_spec);
76
const std::string data_dir = parser.get_arg_or("data-dir", "src/tests/data");
77
const std::string pkcs11_lib = parser.get_arg("pkcs11-lib");
78
const std::string provider = parser.get_arg("provider");
79
const std::string drbg_seed = parser.get_arg("drbg-seed");
81
const bool log_success = parser.flag_set("log-success");
82
const bool run_long_tests = parser.flag_set("run-long-tests");
83
const bool run_online_tests = parser.flag_set("run-online-tests");
84
const size_t test_runs = parser.get_arg_sz("test-runs");
86
const std::vector<std::string> suites = parser.get_arg_list("suites");
88
#if defined(BOTAN_HAS_OPENSSL)
89
if(provider.empty() || provider == "openssl")
91
::ERR_load_crypto_strings();
95
Botan_Tests::Test_Runner tests(std::cout);
97
return tests.run(suites, data_dir, pkcs11_lib, provider,
98
log_success, run_online_tests, run_long_tests,
99
drbg_seed, test_runs);
101
catch(std::exception& e)
103
std::cerr << "Exiting with error: " << e.what() << std::endl;
107
std::cerr << "Exiting with unknown exception" << std::endl;