source: trunk/UNIT_TESTER/UnitTester.hxx

Last change on this file was 16778, checked in by westram, 7 years ago
  • unittests may permit retries using TEST_ALLOW_RETRY
    • workaround for randomly failing tests
File size: 3.0 KB
Line 
1// ================================================================ //
2//                                                                  //
3//   File      : UnitTester.hxx                                     //
4//   Purpose   : unit testing - test one unit                       //
5//                                                                  //
6//   Coded by Ralf Westram (coder@reallysoft.de) in February 2010   //
7//   Institute of Microbiology (Technical University Munich)        //
8//   http://www.arb-home.de/                                        //
9//                                                                  //
10// ================================================================ //
11
12#ifndef UNITTESTER_HXX
13#define UNITTESTER_HXX
14
15#ifndef _GLIBCXX_CSTDLIB
16#include <cstdlib>
17#endif
18#ifndef _GLIBCXX_CSTDIO
19#include <cstdio>
20#endif
21
22typedef void (*UnitTest_function)();
23
24enum UnitTestResult {
25    TEST_OK,                          // test PASSED
26    TEST_TRAPPED,                     // test FAILED
27    TEST_FAILED_POSTCONDITION,
28    TEST_INTERRUPTED,                 // timeout
29    TEST_THREW,                       // exception thrown (tests should never do that)
30    TEST_INVALID,
31    TEST_UNKNOWN_RESULT,
32};
33
34struct UnitTest_simple {
35    UnitTest_function  fun;
36    const char        *name;
37    const char        *location;
38
39    void print_error(FILE *out, UnitTestResult result) const;
40};
41
42struct UnitTester {
43    UnitTester(const char *libname, const UnitTest_simple *simple_tests, int warn_level, size_t skippedTests, const UnitTest_simple *postcond) __attribute__((noreturn));
44};
45
46UnitTestResult execute_guarded(UnitTest_function fun, long *duration_usec, long max_allowed_duration_ms, bool detect_environment_calls);
47void sleepms(long ms);
48
49// ------------------------------
50//      execution time limits
51
52const long SECONDS = 1000;
53const long MINUTES = 60*SECONDS;
54
55#if defined(DEVEL_RALF)
56
57const long MAX_EXEC_MS_NORMAL = 12 * SECONDS;       // kill with segfault after time passed
58const long MAX_EXEC_MS_SLOW   = 60 * SECONDS;       // same for slow tests
59const long MAX_EXEC_MS_ENV    = 80 * SECONDS;       // same for environment setup/cleanup
60const long MAX_EXEC_MS_VGSYS  = 140 * SECONDS;      // same for valgrinded system calls (especially pt_server)
61
62const long WARN_SLOW_ABOVE_MS = 1 * SECONDS;        // when too warn about slow test
63
64#else // !defined(DEVEL_RALF)
65
66// these are temporary test-timings to avoid test timeouts on jenkins build server
67
68const long MAX_EXEC_MS_NORMAL = 30 * MINUTES;       // kill with segfault after time passed
69const long MAX_EXEC_MS_SLOW   = 45 * MINUTES;       // same for slow tests
70const long MAX_EXEC_MS_ENV    = 45 * MINUTES;       // same for environment setup/cleanup
71const long MAX_EXEC_MS_VGSYS  = 45 * MINUTES;       // same for valgrinded system calls (especially pt_server)
72const long WARN_SLOW_ABOVE_MS = 30 * MINUTES;       // when too warn about slow test
73
74#endif
75
76#define FLAGS_DIR "flags"
77#define FLAGS_EXT "flag"
78
79#else
80#error UnitTester.hxx included twice
81#endif // UNITTESTER_HXX
Note: See TracBrowser for help on using the repository browser.