the Compartmented Robust Posix C++ Unit Test system |
|
---|
A test modifier to set the maximum CPU-time (in milliseconds) a test is allowed before it is considered failed. If the CPU-time consumed is vastly more, the test process is killed.
Used in: The modifier list of a test definition. See
TEST(name, ...)
![]() | Note |
---|---|
The CPU-time consumption is enforced using
setrlimit() with RLIMIT_CPU . If
set it to something else inside the test, or if the
SIGXCPU signal is handled by the test, crpcut may
be unable to enforce the limit. crpcut will still be able to measure
the consumed CPU-time, however, and report violations. |
![]() | Note |
---|---|
The time measured is the running of the test function only.
Construction and destruction time are excluded (see
TEST(name, ...) for information
about fixtures.) |
Example: The test program
#include <crpcut.hpp> extern "C" { #include "unistd.h" } TEST(test_killed, DEADLINE_CPU_MS(2)) { for (;;) ; } TEST(test_succeeds_long_wait, DEADLINE_CPU_MS(2)) { usleep(50000); // realtime passes, not cpu-time since process is inactive } int main(int argc, char *argv[]) { return crpcut::run(argc, argv); }
reports one failed test:
FAILED!: test_killed /tmp/crpcutP4bNpX/test_killed is not empty!! phase="running" -------------------------------------------------------------- Died with core dump ------------------------------------------------------------------------------- =============================================================================== Files remain under /tmp/crpcutP4bNpX 2 test cases selected Total : Sum Critical Non-critical PASSED : 1 1 0 FAILED : 1 1 0
See also
DEADLINE_REALTIME_MS(n)
for a deadline in real-time rather than CPU-time. Both can be
combined in the modifier list for the same
TEST(name, ...)
.
![]() | Note |
---|---|
It is possible to temporarily disable the deadline with the
-t / --disable-timeouts
command line flag.
|