From fe7c4d0c2a240ee5fcde25d595a6f3e9ae84f84d Mon Sep 17 00:00:00 2001 From: Zach Mullen Date: Wed, 3 Feb 2010 15:06:29 -0500 Subject: [PATCH] Add unit test to ensure that CTestCostData scheduling works correctly --- Tests/CMakeLists.txt | 11 ++++++++ Tests/CTestTestScheduler/CMakeLists.txt | 9 +++++++ Tests/CTestTestScheduler/CTestConfig.cmake | 7 +++++ Tests/CTestTestScheduler/sleep.c | 21 +++++++++++++++ Tests/CTestTestScheduler/test.cmake.in | 31 ++++++++++++++++++++++ 5 files changed, 79 insertions(+) create mode 100644 Tests/CTestTestScheduler/CMakeLists.txt create mode 100644 Tests/CTestTestScheduler/CTestConfig.cmake create mode 100644 Tests/CTestTestScheduler/sleep.c create mode 100644 Tests/CTestTestScheduler/test.cmake.in diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 7defb285f..8a83d726a 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1285,6 +1285,17 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel --output-log "${CMake_BINARY_DIR}/Tests/CTestTestParallel/testOutput.log" ) + CONFIGURE_FILE( + "${CMake_SOURCE_DIR}/Tests/CTestTestScheduler/test.cmake.in" + "${CMake_BINARY_DIR}/Tests/CTestTestScheduler/test.cmake" + @ONLY ESCAPE_QUOTES) + ADD_TEST(CTestTestScheduler ${CMAKE_CTEST_COMMAND} + -S "${CMake_BINARY_DIR}/Tests/CTestTestScheduler/test.cmake" -V + --output-log "${CMake_BINARY_DIR}/Tests/CTestTestScheduler/testOutput.log" + ) + SET_TESTS_PROPERTIES(CTestTestScheduler PROPERTIES + PASS_REGULAR_EXPRESSION "Start 1.*Start 2.*Start 3.*Start 4.*Start 5.*Start 5.*Start 4.*Start 3.*Start 2.*Start 1") + CONFIGURE_FILE( "${CMake_SOURCE_DIR}/Tests/CTestTestSubdir/test.cmake.in" "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/test.cmake" diff --git a/Tests/CTestTestScheduler/CMakeLists.txt b/Tests/CTestTestScheduler/CMakeLists.txt new file mode 100644 index 000000000..8e7678dd0 --- /dev/null +++ b/Tests/CTestTestScheduler/CMakeLists.txt @@ -0,0 +1,9 @@ +CMAKE_MINIMUM_REQUIRED (VERSION 2.6) +PROJECT (CTestTestScheduler) +INCLUDE (CTest) + +ADD_EXECUTABLE (Sleep sleep.c) + +FOREACH (time RANGE 1 5) + ADD_TEST (TestSleep${time} Sleep ${time}) +ENDFOREACH (time RANGE 1 5) diff --git a/Tests/CTestTestScheduler/CTestConfig.cmake b/Tests/CTestTestScheduler/CTestConfig.cmake new file mode 100644 index 000000000..7da8f6f53 --- /dev/null +++ b/Tests/CTestTestScheduler/CTestConfig.cmake @@ -0,0 +1,7 @@ +set(CTEST_PROJECT_NAME "CTestTestScheduler") +set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set(CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestScheduler/sleep.c b/Tests/CTestTestScheduler/sleep.c new file mode 100644 index 000000000..b06776c2b --- /dev/null +++ b/Tests/CTestTestScheduler/sleep.c @@ -0,0 +1,21 @@ +#if defined(_WIN32) +# include +#else +# include +#endif + +/* sleeps for 2n seconds, where n is the argument to the program */ +int main(int argc, char** argv) +{ + int time; + if(argc > 1) + { + time = 3 * atoi(argv[1]); + } +#if defined(_WIN32) + Sleep(time * 1000); +#else + sleep(time); +#endif + return 0; +} diff --git a/Tests/CTestTestScheduler/test.cmake.in b/Tests/CTestTestScheduler/test.cmake.in new file mode 100644 index 000000000..2a91829f4 --- /dev/null +++ b/Tests/CTestTestScheduler/test.cmake.in @@ -0,0 +1,31 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.1) + +# Settings: +SET(CTEST_DASHBOARD_ROOT "@CMake_BINARY_DIR@/Tests/CTestTest") +SET(CTEST_SITE "@SITE@") +SET(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-Scheduler") + +SET(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestScheduler") +SET(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestScheduler") +SET(CTEST_CVS_COMMAND "@CVSCOMMAND@") +SET(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +SET(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +SET(CTEST_MEMORYCHECK_COMMAND "@MEMORYCHECK_COMMAND@") +SET(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE "@MEMORYCHECK_SUPPRESSIONS_FILE@") +SET(CTEST_MEMORYCHECK_COMMAND_OPTIONS "@MEMORYCHECK_COMMAND_OPTIONS@") +SET(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +SET(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +# Remove old cost data file if it exists +IF(EXISTS "${CTEST_BINARY_DIRECTORY}/Testing/Temporary/CTestCostData.txt") + FILE(REMOVE "${CTEST_BINARY_DIRECTORY}/Testing/Temporary/CTestCostData.txt") +ENDIF(EXISTS "${CTEST_BINARY_DIRECTORY}/Testing/Temporary/CTestCostData.txt") + +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 PARALLEL_LEVEL 5) +# Run test set a second time to make sure they run in reverse order +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res PARALLEL_LEVEL 5)