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

randombit / botan / 5111374265

29 May 2023 11:19AM UTC coverage: 92.227% (+0.5%) from 91.723%
5111374265

push

github

randombit
Next release will be 3.1.0. Update release notes

75588 of 81959 relevant lines covered (92.23%)

11886470.91 hits per line

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

52.94
/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

17
namespace {
18

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

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

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

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

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

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

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

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

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

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

55
}  // namespace
56

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

60
   try {
1✔
61
      const std::string arg_spec =
1✔
62
         "botan-test --verbose --help --data-dir= --pkcs11-lib= --provider= "
63
         "--log-success --abort-on-first-fail --no-avoid-undefined --skip-tests= "
64
         "--test-threads=0 --test-results-dir= --run-long-tests --run-memory-intensive-tests "
65
         "--run-online-tests --test-runs=1 --drbg-seed= --report-properties= *suites";
1✔
66

67
      Botan_CLI::Argument_Parser parser(arg_spec);
2✔
68

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

71
      if(parser.flag_set("help")) {
2✔
72
         std::cout << help_text(arg_spec);
×
73
         return 0;
×
74
      }
75

76
#if defined(BOTAN_TARGET_OS_HAS_POSIX1) && defined(BOTAN_HAS_THREAD_UTILS)
77
      /*
78
      The mlock pool becomes a major contention point when many threads are running,
79
      so disable it unless it was explicitly asked for via setting the env variable
80
      */
81
      if(parser.get_arg_sz("test-threads") != 1) {
1✔
82
         ::setenv("BOTAN_MLOCK_POOL_SIZE", "0", /*overwrite=*/0);
1✔
83
      }
84
#endif
85

86
      const Botan_Tests::Test_Options opts(parser.get_arg_list("suites"),
3✔
87
                                           parser.get_arg_list("skip-tests"),
2✔
88
                                           parser.get_arg_or("data-dir", "src/tests/data"),
2✔
89
                                           parser.get_arg("pkcs11-lib"),
2✔
90
                                           parser.get_arg("provider"),
2✔
91
                                           parser.get_arg("drbg-seed"),
2✔
92
                                           parser.get_arg("test-results-dir"),
3✔
93
                                           parser.get_arg_list("report-properties"),
3✔
94
                                           parser.get_arg_sz("test-runs"),
95
                                           parser.get_arg_sz("test-threads"),
96
                                           parser.flag_set("verbose"),
2✔
97
                                           parser.flag_set("log-success"),
2✔
98
                                           parser.flag_set("run-online-tests"),
2✔
99
                                           parser.flag_set("run-long-tests"),
2✔
100
                                           parser.flag_set("run-memory-intensive-tests"),
2✔
101
                                           parser.flag_set("abort-on-first-fail"));
9✔
102

103
      Botan_Tests::Test_Runner tests(std::cout);
1✔
104

105
      return tests.run(opts) ? 0 : 1;
1✔
106
   } catch(std::exception& e) { std::cerr << "Exiting with error: " << e.what() << std::endl; } catch(...) {
2✔
107
      std::cerr << "Exiting with unknown exception" << std::endl;
×
108
   }
×
109
   return 2;
110
}
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

© 2025 Coveralls, Inc