• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 13749877708

09 Mar 2025 03:23PM UTC coverage: 91.661% (-0.004%) from 91.665%
13749877708

push

github

web-flow
Merge pull request #4762 from randombit/jack/valgrind-runner-script

Run Valgrind in parallel

95868 of 104590 relevant lines covered (91.66%)

11418764.1 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

54.55
/src/tests/main.cpp
1
/*
2
* (C) 2015 Jack Lloyd
3
*
4
* Botan is released under the Simplified BSD License (see license.txt)
5
*/
6

7
#include "../cli/argparse.h"
8
#include "runner/test_runner.h"
9
#include "tests.h"
10
#include <iostream>
11
#include <sstream>
12
#include <string>
13
#include <vector>
14

15
#include <botan/version.h>
16
#include <botan/internal/target_info.h>
17

18
namespace {
19

20
void print_item_list(std::ostringstream& err, const std::set<std::string>& list) {
×
21
   size_t line_len = 0;
×
22

23
   for(const auto& item : list) {
×
24
      err << item << " ";
×
25
      line_len += item.size() + 1;
×
26

27
      if(line_len > 64) {
×
28
         err << "\n";
×
29
         line_len = 0;
30
      }
31
   }
32

33
   if(line_len > 0) {
×
34
      err << "\n";
×
35
   }
36
}
×
37

38
std::string help_text(const std::string& spec) {
×
39
   std::ostringstream err;
×
40

41
   err << "Usage: " << spec << "\n\n"
×
42
       << "Available test suites\n"
43
       << "----------------\n";
×
44

45
   print_item_list(err, Botan_Tests::Test::registered_tests());
×
46

47
   err << '\n'
×
48
       << "Available test categories\n"
49
       << "----------------\n";
×
50

51
   print_item_list(err, Botan_Tests::Test::registered_test_categories());
×
52

53
   return err.str();
×
54
}
×
55

56
}  // namespace
57

58
int main(int argc, char* argv[]) {
1✔
59
   std::cerr << Botan::runtime_version_check(BOTAN_VERSION_MAJOR, BOTAN_VERSION_MINOR, BOTAN_VERSION_PATCH);
2✔
60

61
   try {
1✔
62
      const std::string arg_spec =
1✔
63
         "botan-test --verbose --help --data-dir= --pkcs11-lib= --provider= "
64
         "--tpm2-tcti-name=disabled --tpm2-tcti-conf= --tpm2-persistent-rsa-handle=0x81000008 "
65
         "--tpm2-persistent-ecc-handle=0x81000010 --tpm2-persistent-auth-value=password "
66
         "--log-success --abort-on-first-fail --no-stdout --no-avoid-undefined "
67
         "--skip-tests= --test-threads=0 --test-results-dir= --run-long-tests "
68
         "--run-memory-intensive-tests --run-online-tests --test-runs=1 "
69
         "--drbg-seed= --report-properties= --list-tests *suites";
1✔
70

71
      Botan_CLI::Argument_Parser parser(arg_spec);
1✔
72

73
      parser.parse_args(std::vector<std::string>(argv + 1, argv + argc));
1✔
74

75
      if(parser.flag_set("help")) {
1✔
76
         std::cout << help_text(arg_spec);
×
77
         return 0;
×
78
      }
79

80
      if(parser.flag_set("list-tests")) {
1✔
81
         for(const auto& test_name : Botan_Tests::Test::registered_tests()) {
×
82
            std::cout << test_name << "\n";
×
83
         }
×
84
         return 0;
×
85
      }
86

87
#if defined(BOTAN_TARGET_OS_HAS_POSIX1) && defined(BOTAN_HAS_THREAD_UTILS)
88
      /*
89
      The mlock pool becomes a major contention point when many threads are running,
90
      so disable it unless it was explicitly asked for via setting the env variable
91
      */
92
      if(parser.get_arg_sz("test-threads") != 1) {
1✔
93
         ::setenv("BOTAN_MLOCK_POOL_SIZE", "0", /*overwrite=*/0);
1✔
94
      }
95
#endif
96

97
      const Botan_Tests::Test_Options opts(parser.get_arg_list("suites"),
3✔
98
                                           parser.get_arg_list("skip-tests"),
2✔
99
                                           parser.get_arg_or("data-dir", "src/tests/data"),
2✔
100
                                           parser.get_arg("pkcs11-lib"),
2✔
101
                                           parser.get_arg("provider"),
2✔
102
                                           parser.get_arg("tpm2-tcti-name"),
2✔
103
                                           parser.get_arg("tpm2-tcti-conf"),
2✔
104
                                           parser.get_arg_hex_sz_or("tpm2-persistent-rsa-handle", "0x81000008"),
1✔
105
                                           parser.get_arg_hex_sz_or("tpm2-persistent-ecc-handle", "0x81000010"),
1✔
106
                                           parser.get_arg_or("tpm2-persistent-auth-value", "password"),
2✔
107
                                           parser.get_arg("drbg-seed"),
2✔
108
                                           parser.get_arg("test-results-dir"),
2✔
109
                                           parser.get_arg_list("report-properties"),
2✔
110
                                           parser.get_arg_sz("test-runs"),
1✔
111
                                           parser.get_arg_sz("test-threads"),
1✔
112
                                           parser.flag_set("verbose"),
2✔
113
                                           parser.flag_set("log-success"),
2✔
114
                                           parser.flag_set("run-online-tests"),
2✔
115
                                           parser.flag_set("run-long-tests"),
2✔
116
                                           parser.flag_set("run-memory-intensive-tests"),
2✔
117
                                           parser.flag_set("abort-on-first-fail"),
2✔
118
                                           parser.flag_set("no-stdout"));
6✔
119

120
      Botan_Tests::Test_Runner tests(std::cout);
1✔
121

122
      return tests.run(opts) ? 0 : 1;
1✔
123
   } catch(std::exception& e) {
1✔
124
      std::cerr << "Exiting with error: " << e.what() << std::endl;
×
125
   } catch(...) {
×
126
      std::cerr << "Exiting with unknown exception" << std::endl;
×
127
   }
×
128
   return 2;
129
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc