Print the "timeout correctly killed" message using message(STATUS) so
that 'ctest -S' puts it in the same pipe as the rest of the test command
handler output. This ensures it shows up in the same order every time.
Write to the timeout test log file before sleeping and flush to be sure
it is created. Move the check that the after-sleep line is not written
out to the ctest script. Rename the CheckChild test to TestSleep since
it no longer checks. Do not try to read the log file if it does not
exist.
1: The CTestTestFailedSubmits tests do not need to run the
CTEST_MEMCHECK command. It is covered by the CTestTest2
test. If more coverage *is* required, choose a test that
runs by itself once to add it to... This one gets used
several times in a loop to test submission failure via
the various submission protocols. With memchecking on,
each test here takes 1000 seconds or more on a "fast"
build...
2: Other ctest tests do not need any of the CTEST_MEMORYCHECK_*
variables defined. They don't even call CTEST_MEMCHECK, or
-D NightlyMemCheck, or anything. So: remove the unnecessary
set calls.
3: CTestTest3 has gone intentionally unused for months because
it did not add any coverage and caused no ends of sporadic
randomish failures when network connectivity was spotty.
Remove its directory. Never add it again.
The commit "Make CTestTestTimeout time configurable" added a CMake cache
variable CTestTestTimeout_TIME to configure the length of the timeout
used by the inner CTestTestTimeout test. The reason was to allow users
on slow machines to give this test some extra time without extending the
timeout for everyone. However, Cygwin CMake seems to load slowly enough
that it is worth a longer default timeout for that platform.
In this test we start up a cmake script that runs a process that sleeps,
and the timeout for the script is shorter than the sleep time. However,
in order to properly detect that the sleeping grandchild is killed when
the script times out we need to give sufficient time for the script to
start the grandchild. Otherwise the log file for the grandchild is not
available.
On some (cygwin) builds our previous 1 second timeout for the script was
not long enough to let the interpreter load and start the grandchild.
We make the timeout time configurable by setting CTestTestTimeout_TIME
in the cache for CMake itself. It tells the test how long to let the
script run. The grandchild always sleeps for 4 seconds longer to ensure
a comfortable window during which the process tree can be killed.
We extend the CTestTestTimeout test to check that when a test times out
its children (grandchildren of ctest) are killed. Instead of running
the timeout executable directly, we run it through a cmake script that
redirects the timeout executable output to a file. A second test later
runs and verifies that the timeout executable was unable to complete and
write data to the log file. Only if the first inner test times out and
the second inner test passes (log is empty) does the CTestTestTimeout
test pass.