Browse Source

Merge topic 'ctest-resource-lock' into release-3.29

85745cce7a ctest: Restore enforcement of RESOURCE_LOCK test property

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Acked-by: scivision <[email protected]>
Merge-request: !9394
Brad King 1 year ago
parent
commit
659bc156ef

+ 11 - 4
Source/CTest/cmCTestMultiProcessHandler.cxx

@@ -442,6 +442,15 @@ void cmCTestMultiProcessHandler::SetStopTimePassed()
   }
 }
 
+bool cmCTestMultiProcessHandler::ResourceLocksAvailable(int test)
+{
+  return std::all_of(this->Properties[test]->ProjectResources.begin(),
+                     this->Properties[test]->ProjectResources.end(),
+                     [this](std::string const& r) -> bool {
+                       return !cm::contains(this->ProjectResourcesLocked, r);
+                     });
+}
+
 void cmCTestMultiProcessHandler::LockResources(int index)
 {
   this->RunningCount += this->GetProcessorsUsed(index);
@@ -643,10 +652,8 @@ void cmCTestMultiProcessHandler::StartNextTests()
     }
 
     // Exclude tests that depend on currently-locked project resources.
-    for (std::string const& i : this->Properties[test]->ProjectResources) {
-      if (cm::contains(this->ProjectResourcesLocked, i)) {
-        continue;
-      }
+    if (!this->ResourceLocksAvailable(test)) {
+      continue;
     }
 
     // Allocate system resources needed by this test.

+ 1 - 0
Source/CTest/cmCTestMultiProcessHandler.h

@@ -143,6 +143,7 @@ protected:
   void InitializeLoop();
   void FinalizeLoop();
 
+  bool ResourceLocksAvailable(int test);
   void LockResources(int index);
   void UnlockResources(int index);
 

+ 0 - 9
Tests/CMakeLists.txt

@@ -3103,15 +3103,6 @@ if(BUILD_TESTING)
     WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Tests/CTestTestLabelRegExp
   )
 
-  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"

+ 0 - 13
Tests/CTestTestResourceLock/CMakeLists.txt

@@ -1,13 +0,0 @@
-cmake_minimum_required (VERSION 3.5)
-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")

+ 0 - 4
Tests/CTestTestResourceLock/CTestConfig.cmake

@@ -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")

+ 0 - 27
Tests/CTestTestResourceLock/lockFile.c

@@ -1,27 +0,0 @@
-#include <stdio.h>
-
-/* Disable deprecation warning for fopen */
-#pragma warning(disable : 4996)
-
-/*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);
-}

+ 0 - 21
Tests/CTestTestResourceLock/test.cmake.in

@@ -1,21 +0,0 @@
-cmake_minimum_required(VERSION 3.5)
-
-# 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_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_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)

+ 12 - 0
Tests/RunCMake/ctest_test/ResourceLock-stdout.txt

@@ -0,0 +1,12 @@
+Test project [^
+]*/Tests/RunCMake/ctest_test/ResourceLock-build
+    Start 2: test1
+1/4 Test #2: test1 ............................   Passed +[0-9.]+ sec
+    Start 3: test2
+2/4 Test #3: test2 ............................   Passed +[0-9.]+ sec
+    Start 4: test3
+3/4 Test #4: test3 ............................   Passed +[0-9.]+ sec
+    Start 5: test4
+4/4 Test #5: test4 ............................   Passed +[0-9.]+ sec
++
+100% tests passed, 0 tests failed out of 4

+ 9 - 0
Tests/RunCMake/ctest_test/RunCMakeTest.cmake

@@ -13,6 +13,15 @@ endfunction()
 
 run_ctest_test(TestQuiet QUIET)
 
+set(CASE_CMAKELISTS_SUFFIX_CODE [[
+foreach(i RANGE 1 4)
+  add_test(NAME test${i} COMMAND ${CMAKE_COMMAND} -E true)
+  set_property(TEST test${i} PROPERTY RESOURCE_LOCK resource)
+endforeach()
+]])
+run_ctest_test(ResourceLock INCLUDE test PARALLEL_LEVEL 4)
+unset(CASE_CMAKELISTS_SUFFIX_CODE)
+
 set(ENV{__CTEST_FAKE_PROCESSOR_COUNT_FOR_TESTING} 4)
 set(CASE_CMAKELISTS_SUFFIX_CODE [[
 foreach(i RANGE 1 6)