mirror of
https://github.com/reactos/CMake.git
synced 2024-11-27 13:30:39 +00:00
GoogleTest: Add timeout to discovery
Add a TIMEOUT option to gtest_discover_tests. This provides a work-around in case a test goes out to lunch, rather than causing the build to simply hang. (Although this is still a problem with the user's project, hanging the build is not cool, especially in the case of automatically running CI builds. It is much preferred that the build should actively fail in this case, and it is trivially easy for us to implement that.)
This commit is contained in:
parent
e99e39829b
commit
29731d8919
@ -217,6 +217,14 @@ same as the Google Test name (i.e. ``suite.testcase``); see also
|
||||
executable is being used in multiple calls to ``gtest_discover_tests()``.
|
||||
Note that this variable is only available in CTest.
|
||||
|
||||
``TIMEOUT num``
|
||||
Specifies how long (in seconds) CMake will wait for the test to enumerate
|
||||
available tests. If the test takes longer than this, discovery (and your
|
||||
build) will fail. Most test executables will enumerate their tests very
|
||||
quickly, but under some exceptional circumstances, a test may require a
|
||||
longer timeout. The default is 5. See also the ``TIMEOUT`` option of
|
||||
:command:`execute_process`.
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
@ -349,7 +357,7 @@ function(gtest_discover_tests TARGET)
|
||||
cmake_parse_arguments(
|
||||
""
|
||||
"NO_PRETTY_TYPES;NO_PRETTY_VALUES"
|
||||
"TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST"
|
||||
"TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST;TIMEOUT"
|
||||
"EXTRA_ARGS;PROPERTIES"
|
||||
${ARGN}
|
||||
)
|
||||
@ -360,6 +368,9 @@ function(gtest_discover_tests TARGET)
|
||||
if(NOT _TEST_LIST)
|
||||
set(_TEST_LIST ${TARGET}_TESTS)
|
||||
endif()
|
||||
if(NOT _TIMEOUT)
|
||||
set(_TIMEOUT 5)
|
||||
endif()
|
||||
|
||||
get_property(
|
||||
has_counter
|
||||
@ -407,6 +418,7 @@ function(gtest_discover_tests TARGET)
|
||||
-D "NO_PRETTY_VALUES=${_NO_PRETTY_VALUES}"
|
||||
-D "TEST_LIST=${_TEST_LIST}"
|
||||
-D "CTEST_FILE=${ctest_tests_file}"
|
||||
-D "TEST_DISCOVERY_TIMEOUT=${_TIMEOUT}"
|
||||
-P "${_GOOGLETEST_DISCOVER_TESTS_SCRIPT}"
|
||||
VERBATIM
|
||||
)
|
||||
|
@ -30,6 +30,7 @@ if(NOT EXISTS "${TEST_EXECUTABLE}")
|
||||
endif()
|
||||
execute_process(
|
||||
COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" --gtest_list_tests
|
||||
TIMEOUT ${TEST_DISCOVERY_TIMEOUT}
|
||||
OUTPUT_VARIABLE output
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
|
1
Tests/RunCMake/GoogleTest/GoogleTest-timeout-result.txt
Normal file
1
Tests/RunCMake/GoogleTest/GoogleTest-timeout-result.txt
Normal file
@ -0,0 +1 @@
|
||||
[^0]
|
7
Tests/RunCMake/GoogleTest/GoogleTest-timeout-stdout.txt
Normal file
7
Tests/RunCMake/GoogleTest/GoogleTest-timeout-stdout.txt
Normal file
@ -0,0 +1,7 @@
|
||||
( *|[0-9]+>)CMake Error at .*GoogleTestAddTests.cmake:[0-9]+ \(message\):
|
||||
( *|[0-9]+>) Error running test executable.
|
||||
?( *|[0-9]+>)
|
||||
( *|[0-9]+>) Path: '.*timeout_test(\.exe)?'
|
||||
( *|[0-9]+>) Result: Process terminated due to timeout
|
||||
( *|[0-9]+>) Output:
|
||||
( *|[0-9]+>) +
|
@ -21,3 +21,9 @@ gtest_discover_tests(
|
||||
EXTRA_ARGS how now "\"brown\" cow"
|
||||
PROPERTIES LABELS TEST2
|
||||
)
|
||||
|
||||
add_executable(timeout_test timeout_test.cpp)
|
||||
|
||||
gtest_discover_tests(
|
||||
timeout_test
|
||||
)
|
||||
|
@ -9,18 +9,32 @@ function(run_GoogleTest)
|
||||
endif()
|
||||
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||
|
||||
run_cmake(GoogleTest)
|
||||
|
||||
run_cmake_command(GoogleTest-build
|
||||
${CMAKE_COMMAND}
|
||||
--build .
|
||||
--config Debug
|
||||
--target fake_gtest
|
||||
)
|
||||
|
||||
set(RunCMake_TEST_OUTPUT_MERGE 1)
|
||||
run_cmake_command(GoogleTest-timeout
|
||||
${CMAKE_COMMAND}
|
||||
--build .
|
||||
--config Debug
|
||||
--target timeout_test
|
||||
)
|
||||
set(RunCMake_TEST_OUTPUT_MERGE 0)
|
||||
|
||||
run_cmake_command(GoogleTest-test1
|
||||
${CMAKE_CTEST_COMMAND}
|
||||
-C Debug
|
||||
-L TEST1
|
||||
--no-label-summary
|
||||
)
|
||||
|
||||
run_cmake_command(GoogleTest-test2
|
||||
${CMAKE_CTEST_COMMAND}
|
||||
-C Debug
|
||||
|
15
Tests/RunCMake/GoogleTest/timeout_test.cpp
Normal file
15
Tests/RunCMake/GoogleTest/timeout_test.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
#if defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
Sleep(10000);
|
||||
#else
|
||||
sleep(10);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user