Add CTestLimitDashJ test (#12904)
Add a test that verifies that when ctest -j 4 is called, at most, 4 tests
are executed at any one time.
The test works by running the same script as each of 100 tests. And then setting
up test properties for DEPENDS, RUN_SERIAL, PROCESSORS and COST in order to get
the tests to run in a semi-deterministic ordering, even in parallel. The script
writes a file, sleeps for a bit, and then deletes the file. In the meantime, it
counts files that currently exist, and emits output that triggers a test failure
if the count of files is ever greater than 4.
Prior to the commit that fixed bug #12904, this would result in a failed test
because the output of some of the tests would indicate that more than 4 tests
were running simultaneously.
Now that this issue is resolved, this test will help guarantee that it stays
resolved moving forward.
2012-12-27 00:22:59 +04:00
|
|
|
cmake_minimum_required(VERSION 2.8)
|
|
|
|
project(CTestLimitDashJ NONE)
|
|
|
|
|
2016-08-12 22:06:35 +03:00
|
|
|
# This file demonstrates https://gitlab.kitware.com/cmake/cmake/issues/12904
|
Add CTestLimitDashJ test (#12904)
Add a test that verifies that when ctest -j 4 is called, at most, 4 tests
are executed at any one time.
The test works by running the same script as each of 100 tests. And then setting
up test properties for DEPENDS, RUN_SERIAL, PROCESSORS and COST in order to get
the tests to run in a semi-deterministic ordering, even in parallel. The script
writes a file, sleeps for a bit, and then deletes the file. In the meantime, it
counts files that currently exist, and emits output that triggers a test failure
if the count of files is ever greater than 4.
Prior to the commit that fixed bug #12904, this would result in a failed test
because the output of some of the tests would indicate that more than 4 tests
were running simultaneously.
Now that this issue is resolved, this test will help guarantee that it stays
resolved moving forward.
2012-12-27 00:22:59 +04:00
|
|
|
# when configured with CMake 2.8.10.2 and earlier, and when running
|
|
|
|
# "ctest -j 4" in the resulting build tree. This example is hard-coded
|
|
|
|
# to assume -j 4 just to reproduce the issue easily. Adjust the
|
|
|
|
# FAIL_REGULAR_EXPRESSION and PROCESSORS values to reproduce this problem
|
|
|
|
# with a different ctest -j value...
|
|
|
|
|
|
|
|
if(EXISTS "${CMAKE_BINARY_DIR}/Testing/Temporary/CTestCostData.txt")
|
|
|
|
message(STATUS "Removing CTestCostData.txt to force ordering by COST PROPERTY value rather than prior run data")
|
|
|
|
file(REMOVE "${CMAKE_BINARY_DIR}/Testing/Temporary/CTestCostData.txt")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
include(CTest)
|
|
|
|
|
|
|
|
configure_file(
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/CreateSleepDelete.cmake
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/CreateSleepDelete.cmake
|
|
|
|
@ONLY
|
|
|
|
)
|
|
|
|
|
|
|
|
foreach(n RANGE 1 100)
|
|
|
|
add_test(NAME t${n}
|
|
|
|
COMMAND ${CMAKE_CTEST_COMMAND}
|
|
|
|
-D basefilename=f${n}
|
|
|
|
-S ${CMAKE_CURRENT_BINARY_DIR}/CreateSleepDelete.cmake
|
|
|
|
)
|
|
|
|
set_property(TEST t${n} PROPERTY FAIL_REGULAR_EXPRESSION "(c='[5-9]'|c='[1-9][0-9]+')")
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
set_property(TEST t1 PROPERTY RUN_SERIAL 1)
|
|
|
|
set_property(TEST t1 PROPERTY PROCESSORS 4)
|
|
|
|
|
|
|
|
set_property(TEST t51 PROPERTY RUN_SERIAL 1)
|
|
|
|
set_property(TEST t51 PROPERTY PROCESSORS 4)
|
|
|
|
|
|
|
|
foreach(n RANGE 2 50)
|
|
|
|
set_property(TEST t${n} PROPERTY DEPENDS t1)
|
|
|
|
endforeach()
|
|
|
|
set_property(TEST t1 PROPERTY DEPENDS t51)
|
|
|
|
set_property(TEST t51 PROPERTY DEPENDS t100)
|
|
|
|
|
|
|
|
foreach(n 50)
|
|
|
|
set_property(TEST t${n} PROPERTY COST 6)
|
|
|
|
endforeach()
|
|
|
|
foreach(n RANGE 52 99)
|
|
|
|
set_property(TEST t${n} PROPERTY COST 3)
|
|
|
|
endforeach()
|