From 8f848dbc1fb77d69dd3b0a1fafda924dc6d5fe8d Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 8 Dec 2025 15:16:51 -0500 Subject: [PATCH 1/2] Tests/RunCMake/CTestCommandLine: Add case for ctest --rerun-failed Remove the old `CTestTestRerunFailed` test. --- Tests/CMakeLists.txt | 7 ------- Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake | 13 +++++++++++++ .../CTestCommandLine/rerun-failed-result.txt | 1 + .../CTestCommandLine/rerun-failed-stderr.txt | 1 + .../CTestCommandLine/rerun-failed-stdout.txt | 11 +++++++++++ .../RunCMake/CTestCommandLine/rerun-init-result.txt | 1 + .../RunCMake/CTestCommandLine/rerun-init-stderr.txt | 1 + .../RunCMake/CTestCommandLine/rerun-init-stdout.txt | 13 +++++++++++++ 8 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 Tests/RunCMake/CTestCommandLine/rerun-failed-result.txt create mode 100644 Tests/RunCMake/CTestCommandLine/rerun-failed-stderr.txt create mode 100644 Tests/RunCMake/CTestCommandLine/rerun-failed-stdout.txt create mode 100644 Tests/RunCMake/CTestCommandLine/rerun-init-result.txt create mode 100644 Tests/RunCMake/CTestCommandLine/rerun-init-stderr.txt create mode 100644 Tests/RunCMake/CTestCommandLine/rerun-init-stdout.txt diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 22b99bae7a..558f8614b3 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -3047,13 +3047,6 @@ if(BUILD_TESTING) set_tests_properties(CTestTestTimeout PROPERTIES PASS_REGULAR_EXPRESSION "TestTimeout *\\.+ *\\*\\*\\*Timeout.*TestSleep *\\.+ *Passed.*timeout correctly killed child") - add_test( - NAME CTestTestRerunFailed - COMMAND ${CMAKE_CTEST_COMMAND} --rerun-failed) - set_tests_properties(CTestTestRerunFailed PROPERTIES - PASS_REGULAR_EXPRESSION "1/1 Test #1: TestTimeout" DEPENDS CTestTestTimeout - WORKING_DIRECTORY ${CMake_BINARY_DIR}/Tests/CTestTestTimeout) - configure_file( "${CMake_SOURCE_DIR}/Tests/CTestTestDepends/test.cmake.in" "${CMake_BINARY_DIR}/Tests/CTestTestDepends/test.cmake" diff --git a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake index 0b8226ef68..ede949ae85 100644 --- a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake @@ -104,6 +104,19 @@ endfunction() run_repeat_until_fail_tests(--repeat-until-fail 3) run_repeat_until_fail_tests(--repeat until-fail:3) +block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/rerun) + set(RunCMake_TEST_NO_CLEAN 1) + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" " +add_test(works \"${CMAKE_COMMAND}\" -E true) +add_test(fails \"${CMAKE_COMMAND}\" -E false) +") + run_cmake_command(rerun-init ${CMAKE_CTEST_COMMAND}) + run_cmake_command(rerun-failed ${CMAKE_CTEST_COMMAND} --rerun-failed) +endblock() + function(run_BadCTestTestfile) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/BadCTestTestfile) set(RunCMake_TEST_NO_CLEAN 1) diff --git a/Tests/RunCMake/CTestCommandLine/rerun-failed-result.txt b/Tests/RunCMake/CTestCommandLine/rerun-failed-result.txt new file mode 100644 index 0000000000..d197c913c2 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/rerun-failed-result.txt @@ -0,0 +1 @@ +[^0] diff --git a/Tests/RunCMake/CTestCommandLine/rerun-failed-stderr.txt b/Tests/RunCMake/CTestCommandLine/rerun-failed-stderr.txt new file mode 100644 index 0000000000..8d98f9debd --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/rerun-failed-stderr.txt @@ -0,0 +1 @@ +.* diff --git a/Tests/RunCMake/CTestCommandLine/rerun-failed-stdout.txt b/Tests/RunCMake/CTestCommandLine/rerun-failed-stdout.txt new file mode 100644 index 0000000000..b376a7f631 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/rerun-failed-stdout.txt @@ -0,0 +1,11 @@ +^Test project [^ +]*/Tests/RunCMake/CTestCommandLine/rerun + Start 2: fails +1/1 Test #2: fails \.+\*\*\*Failed +[0-9\.]+ sec ++ +0% tests passed, 1 tests failed out of 1 ++ +Total Test time \(real\) = +[0-9\.]+ sec ++ +The following tests FAILED: +[ ]+2 - fails \(Failed\)$ diff --git a/Tests/RunCMake/CTestCommandLine/rerun-init-result.txt b/Tests/RunCMake/CTestCommandLine/rerun-init-result.txt new file mode 100644 index 0000000000..d197c913c2 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/rerun-init-result.txt @@ -0,0 +1 @@ +[^0] diff --git a/Tests/RunCMake/CTestCommandLine/rerun-init-stderr.txt b/Tests/RunCMake/CTestCommandLine/rerun-init-stderr.txt new file mode 100644 index 0000000000..8d98f9debd --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/rerun-init-stderr.txt @@ -0,0 +1 @@ +.* diff --git a/Tests/RunCMake/CTestCommandLine/rerun-init-stdout.txt b/Tests/RunCMake/CTestCommandLine/rerun-init-stdout.txt new file mode 100644 index 0000000000..e1615d2262 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/rerun-init-stdout.txt @@ -0,0 +1,13 @@ +^Test project [^ +]*/Tests/RunCMake/CTestCommandLine/rerun + Start 1: works +1/2 Test #1: works \.+ Passed +[0-9\.]+ sec + Start 2: fails +2/2 Test #2: fails \.+\*\*\*Failed +[0-9\.]+ sec ++ +50% tests passed, 1 tests failed out of 2 ++ +Total Test time \(real\) = +[0-9\.]+ sec ++ +The following tests FAILED: +[ ]+2 - fails \(Failed\)$ From 4a67306ddb59d965d9ecc8cd13800cbbc48241a5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 8 Dec 2025 15:19:06 -0500 Subject: [PATCH 2/2] Tests: Remove redundant CTestTestTimeout test It was superseded by commit 2f5eb1800b (Tests: Add RunCMake.CTestTimeout test, 2020-01-13, v3.17.0-rc1~169^2~1) but was kept as a dependency of the `CTestTestRerunFailed` test. The latter has now been moved into `RunCMake.CTestCommandLine`, so neither is needed. --- Tests/CMakeLists.txt | 12 ------- Tests/CTestTestTimeout/CMakeLists.txt | 21 ------------- Tests/CTestTestTimeout/CTestConfig.cmake | 4 --- Tests/CTestTestTimeout/sleep.c | 21 ------------- Tests/CTestTestTimeout/test.cmake.in | 40 ------------------------ Tests/CTestTestTimeout/timeout.cmake | 6 ---- 6 files changed, 104 deletions(-) delete mode 100644 Tests/CTestTestTimeout/CMakeLists.txt delete mode 100644 Tests/CTestTestTimeout/CTestConfig.cmake delete mode 100644 Tests/CTestTestTimeout/sleep.c delete mode 100644 Tests/CTestTestTimeout/test.cmake.in delete mode 100644 Tests/CTestTestTimeout/timeout.cmake diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 558f8614b3..7863ebeeda 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -3035,18 +3035,6 @@ if(BUILD_TESTING) set_tests_properties(CTestTestSubdir PROPERTIES PASS_REGULAR_EXPRESSION "0 tests failed out of 3") - configure_file( - "${CMake_SOURCE_DIR}/Tests/CTestTestTimeout/test.cmake.in" - "${CMake_BINARY_DIR}/Tests/CTestTestTimeout/test.cmake" - @ONLY ESCAPE_QUOTES) - add_test(CTestTestTimeout ${CMAKE_CTEST_COMMAND} - -C "\${CTestTest_CONFIG}" - -S "${CMake_BINARY_DIR}/Tests/CTestTestTimeout/test.cmake" -V - --output-log "${CMake_BINARY_DIR}/Tests/CTestTestTimeout/testOutput.log" - ) - set_tests_properties(CTestTestTimeout PROPERTIES - PASS_REGULAR_EXPRESSION "TestTimeout *\\.+ *\\*\\*\\*Timeout.*TestSleep *\\.+ *Passed.*timeout correctly killed child") - configure_file( "${CMake_SOURCE_DIR}/Tests/CTestTestDepends/test.cmake.in" "${CMake_BINARY_DIR}/Tests/CTestTestDepends/test.cmake" diff --git a/Tests/CTestTestTimeout/CMakeLists.txt b/Tests/CTestTestTimeout/CMakeLists.txt deleted file mode 100644 index f46d3e202e..0000000000 --- a/Tests/CTestTestTimeout/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(CTestTestTimeout) -include(CTest) - -if(NOT TIMEOUT) - # Give the process time to load and start running. - set(TIMEOUT 4) -endif() - -add_definitions(-DTIMEOUT=${TIMEOUT}) -add_executable (Sleep sleep.c) - -add_test(NAME TestTimeout - COMMAND ${CMAKE_COMMAND} -D Sleep=$ - -D Log=${CMAKE_CURRENT_BINARY_DIR}/timeout.log - -P ${CMAKE_CURRENT_SOURCE_DIR}/timeout.cmake - ) -set_tests_properties(TestTimeout PROPERTIES TIMEOUT ${TIMEOUT}) - -add_test(NAME TestSleep COMMAND Sleep) -set_tests_properties(TestSleep PROPERTIES DEPENDS TestTimeout) diff --git a/Tests/CTestTestTimeout/CTestConfig.cmake b/Tests/CTestTestTimeout/CTestConfig.cmake deleted file mode 100644 index bd265f9811..0000000000 --- a/Tests/CTestTestTimeout/CTestConfig.cmake +++ /dev/null @@ -1,4 +0,0 @@ -set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT") -set(CTEST_DROP_METHOD "http") -set(CTEST_DROP_SITE "open.cdash.org") -set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard") diff --git a/Tests/CTestTestTimeout/sleep.c b/Tests/CTestTestTimeout/sleep.c deleted file mode 100644 index ebe127430d..0000000000 --- a/Tests/CTestTestTimeout/sleep.c +++ /dev/null @@ -1,21 +0,0 @@ -#if defined(_WIN32) -# include -#else -# include -#endif - -#include - -int main(void) -{ - fprintf(stderr, "before sleep\n"); - fflush(stderr); /* should not be needed, but just in case */ -#if defined(_WIN32) - Sleep((TIMEOUT + 4) * 1000); -#else - sleep((TIMEOUT + 4)); -#endif - fprintf(stderr, "after sleep\n"); - fflush(stderr); /* should not be needed, but just in case */ - return 0; -} diff --git a/Tests/CTestTestTimeout/test.cmake.in b/Tests/CTestTestTimeout/test.cmake.in deleted file mode 100644 index c07d724a4c..0000000000 --- a/Tests/CTestTestTimeout/test.cmake.in +++ /dev/null @@ -1,40 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -# Settings: -set(CTEST_DASHBOARD_ROOT "@CMake_BINARY_DIR@/Tests/CTestTest") -set(CTEST_SITE "@SITE@") -set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-Timeout") - -set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestTimeout") -set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestTimeout") -set(CTEST_CVS_COMMAND "@CVSCOMMAND@") -set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@") -set(CTEST_CMAKE_GENERATOR_PLATFORM "@CMAKE_GENERATOR_PLATFORM@") -set(CTEST_CMAKE_GENERATOR_TOOLSET "@CMAKE_GENERATOR_TOOLSET@") -set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") -set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") -set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") - -#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) - -file(WRITE "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt" " -TIMEOUT:STRING=@CTestTestTimeout_TIME@ -") - -CTEST_START(Experimental) -CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) -CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) -CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) - -set(log ${CTEST_BINARY_DIRECTORY}/timeout.log) -if(EXISTS "${log}") - # Verify that the timeout test did not finish sleeping. - file(STRINGS "${log}" after_sleep REGEX "after sleep") - if(after_sleep) - message(FATAL_ERROR "Log indicates timeout did not kill child.") - else() - message(STATUS "Log indicates timeout correctly killed child.") - endif() -else() - message(FATAL_ERROR "Log does not exist:\n ${log}") -endif() diff --git a/Tests/CTestTestTimeout/timeout.cmake b/Tests/CTestTestTimeout/timeout.cmake deleted file mode 100644 index ba2f58b7d1..0000000000 --- a/Tests/CTestTestTimeout/timeout.cmake +++ /dev/null @@ -1,6 +0,0 @@ -# Remove the log file. -file(REMOVE ${Log}) - -# Run a child that sleeps longer than the timeout of this test. -# Log its output so check.cmake can verify it dies. -execute_process(COMMAND ${Sleep} ERROR_FILE ${Log})