From 2fd9b8072bb15e16446e15c1165566d4a238e4cc Mon Sep 17 00:00:00 2001 From: Zach Mullen Date: Wed, 3 Mar 2010 10:32:03 -0500 Subject: Add unit test for RESOURCE_LOCK test property --- Source/CTest/cmCTestMultiProcessHandler.cxx | 9 +++++--- Tests/CMakeLists.txt | 11 +++++++++- Tests/CTestTestResourceLock/CMakeLists.txt | 13 +++++++++++ Tests/CTestTestResourceLock/CTestConfig.cmake | 7 ++++++ Tests/CTestTestResourceLock/lockFile.c | 31 +++++++++++++++++++++++++++ Tests/CTestTestResourceLock/test.cmake.in | 24 +++++++++++++++++++++ 6 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 Tests/CTestTestResourceLock/CMakeLists.txt create mode 100644 Tests/CTestTestResourceLock/CTestConfig.cmake create mode 100644 Tests/CTestTestResourceLock/lockFile.c create mode 100644 Tests/CTestTestResourceLock/test.cmake.in diff --git a/Source/CTest/cmCTestMultiProcessHandler.cxx b/Source/CTest/cmCTestMultiProcessHandler.cxx index 84df303..c1ca9ea 100644 --- a/Source/CTest/cmCTestMultiProcessHandler.cxx +++ b/Source/CTest/cmCTestMultiProcessHandler.cxx @@ -119,9 +119,12 @@ void cmCTestMultiProcessHandler::StartTestProcess(int test) //--------------------------------------------------------- void cmCTestMultiProcessHandler::LockResources(int index) { - this->LockedResources.insert( - this->Properties[index]->LockedResources.begin(), - this->Properties[index]->LockedResources.end()); + for(std::set::iterator i = + this->Properties[index]->LockedResources.begin(); + i != this->Properties[index]->LockedResources.end(); ++i) + { + this->LockedResources.insert(*i); + } } //--------------------------------------------------------- diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 7004de3..7bc8b33 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1284,7 +1284,16 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ -S "${CMake_BINARY_DIR}/Tests/CTestTestParallel/test.cmake" -V --output-log "${CMake_BINARY_DIR}/Tests/CTestTestParallel/testOutput.log" ) - + + CONFIGURE_FILE( + "${CMake_SOURCE_DIR}/Tests/CTestTestResourceLock/test.cmake.in" + "${CMake_BINARY_DIR}/Tests/CTestTestResourceLock/test.cmake" + @ONLY ESCAPE_QUOTES) + ADD_TEST(CTestTestResourceLock ${CMAKE_CTEST_COMMAND} + -S "${CMake_BINARY_DIR}/Tests/CTestTestResourceLock/test.cmake" -V + --output-log "${CMake_BINARY_DIR}/Tests/CTestTestResourceLock/output.log" + ) + CONFIGURE_FILE( "${CMake_SOURCE_DIR}/Tests/CTestTestScheduler/test.cmake.in" "${CMake_BINARY_DIR}/Tests/CTestTestScheduler/test.cmake" diff --git a/Tests/CTestTestResourceLock/CMakeLists.txt b/Tests/CTestTestResourceLock/CMakeLists.txt new file mode 100644 index 0000000..1041ef1 --- /dev/null +++ b/Tests/CTestTestResourceLock/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required (VERSION 2.6) +PROJECT(CTestTestResourceLock) +INCLUDE(CTest) + +ADD_EXECUTABLE (LockFile lockFile.c) + +ADD_TEST (TestLockedFile1.1 LockFile locked1.txt) +ADD_TEST (TestLockedFile1.2 LockFile locked1.txt) +SET_TESTS_PROPERTIES(TestLockedFile1.1 TestLockedFile1.2 PROPERTIES RESOURCE_LOCK "locked1.txt") + +ADD_TEST (TestLockedFile2.1 LockFile locked2.txt) +ADD_TEST (TestLockedFile2.2 LockFile locked2.txt) +SET_TESTS_PROPERTIES(TestLockedFile2.1 TestLockedFile2.2 PROPERTIES RESOURCE_LOCK "locked2.txt") diff --git a/Tests/CTestTestResourceLock/CTestConfig.cmake b/Tests/CTestTestResourceLock/CTestConfig.cmake new file mode 100644 index 0000000..5fb560b --- /dev/null +++ b/Tests/CTestTestResourceLock/CTestConfig.cmake @@ -0,0 +1,7 @@ +set(CTEST_PROJECT_NAME "CTestTestResourceLock") +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/CTestTestResourceLock/lockFile.c b/Tests/CTestTestResourceLock/lockFile.c new file mode 100644 index 0000000..f8edc3f --- /dev/null +++ b/Tests/CTestTestResourceLock/lockFile.c @@ -0,0 +1,31 @@ +#include + +/* Disable deprecation warning for fopen */ +#define _CRT_SECURE_NO_WARNINGS + +/*if run serially, works fine. + If run in parallel, someone will attempt to delete + a locked file, which will fail */ +int main(int argc, char** argv) +{ + FILE* file; + int i; + const char* fname; + if(argc >= 2) + { + fname = argv[1]; + } + else + { + fname = "lockedFile.txt"; + } + file = fopen(fname, "w"); + + for(i = 0; i < 10000; i++) + { + fprintf(file, "%s", "x"); + fflush(file); + } + fclose(file); + return remove(fname); +} diff --git a/Tests/CTestTestResourceLock/test.cmake.in b/Tests/CTestTestResourceLock/test.cmake.in new file mode 100644 index 0000000..e58ae20 --- /dev/null +++ b/Tests/CTestTestResourceLock/test.cmake.in @@ -0,0 +1,24 @@ +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@-ResourceLock") + +SET(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestResourceLock") +SET(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestResourceLock") +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}) + +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 4) -- cgit v0.12