the Compartmented Robust Posix C++ Unit Test system

EXPECT_REALTIME_TIMEOUT_MS(ms)

A modifier which states a minimum duration of the test function run to pass.

Used in: The modifier list of a test. See TEST(name, ...)

The parameter to EXPECT_REALTIME_TIMEOUT_MS(ms) is the minimum duration in milliseconds.

If the test finishes earlier it fails. If the test duration is longer the test process is killed.

[Note]Note
EXPECT_REALTIME_TIMEOUT_MS(ms) cannot be combined with DEADLINE_REALTIME_MS(n).
[Tip]Tip
Combine EXPECT_REALTIME_TIMEOUT_MS(ms) with DEADLINE_CPU_MS(n) to verify that the test goes to sleep.

Example: The test program

     #include <crpcut.hpp>
     
     extern "C"
     {
     #  include <signal.h>
     #  include <unistd.h>
     }
     
     TEST(fail_too_quick, EXPECT_REALTIME_TIMEOUT_MS(100))
     {
     }
     
     TEST(pass_busy_wait, EXPECT_REALTIME_TIMEOUT_MS(100))
     {
       for (;;)
         ;
     }
     
     TEST(fail_busy_wait, EXPECT_REALTIME_TIMEOUT_MS(100), DEADLINE_CPU_MS(3))
     {
       for (;;)
         ;
     }
     
     TEST(pass_sleep, EXPECT_REALTIME_TIMEOUT_MS(100), DEADLINE_CPU_MS(3))
     {
       sleep(1);
     }
     
     int main(int argc, char *argv[])
     {
       return crpcut::run(argc, argv);
     }

reports 2 failed tests:


     FAILED!: fail_too_quick
     phase="running"  --------------------------------------------------------------
     samples/expect_realtime_timeout.cpp:35
     Unexpectedly survived
     Expected 100ms realtime timeout
     -------------------------------------------------------------------------------
     ===============================================================================
     FAILED!: fail_busy_wait
     phase="running"  --------------------------------------------------------------
     samples/expect_realtime_timeout.cpp:45
     Test consumed 102ms CPU-time
     Limit was 3ms
     -------------------------------------------------------------------------------
     ===============================================================================
     4 test cases selected
     
                    Sum   Critical   Non-critical
     PASSED   :       2          2              0
     FAILED   :       2          2              0

[Note]Note
It is possible to extend the timeout limit using the command line parameter --timeout-multiplier=factor, which can be useful when running the test program with time consuming tools like valgrind.
[Note]Note
It is also possible to temporarily disable the expectation with the -t / --disable-timeouts command line flag.