the Compartmented Robust Posix C++ Unit Test system

DEADLINE_CPU_MS(n)

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]Note
The CPU-time consumption is enforced using setrlimit() with RLIMIT_CPU. If set it to something else inside the test, crpcut may be unable to enforce the limit.
[Note]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/crpcutY0TOSY/test_killed is not empty!!
     phase="running"  --------------------------------------------------------------
     Died with core dump
     -------------------------------------------------------------------------------
     ===============================================================================
     Files remain under /tmp/crpcutY0TOSY
     Total 2 test cases selected
     UNTESTED : 0
     PASSED   : 1
     FAILED   : 1

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, ...).