Browse Source

CTest: Fix regression in handling of a RUN_SERIAL test that fails

Refactoring in commit v3.4.0-rc1~390^2~1 (cmCTestMultiProcessHandler:
Refactor RUN_SERIAL implementation, 2015-06-01) forgot to update a code
path for cleaning up after a failed RUN_SERIAL test.  This causes an
infinite loop after a RUN_SERIAL test fails.  Fix it and add a test.
Brad King 10 years ago
parent
commit
e61973e1ab

+ 4 - 5
Source/CTest/cmCTestMultiProcessHandler.cxx

@@ -198,6 +198,10 @@ void cmCTestMultiProcessHandler::UnlockResources(int index)
     {
     this->LockedResources.erase(*i);
     }
+  if (this->Properties[index]->RunSerial)
+    {
+    this->SerialTestRunning = false;
+    }
 }
 
 //---------------------------------------------------------
@@ -451,11 +455,6 @@ bool cmCTestMultiProcessHandler::CheckOutput()
     this->WriteCheckpoint(test);
     this->UnlockResources(test);
     this->RunningCount -= GetProcessorsUsed(test);
-    if (this->Properties[test]->RunSerial)
-      {
-      this->SerialTestRunning = false;
-      }
-
     delete p;
     }
   return true;

+ 15 - 0
Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake

@@ -78,6 +78,21 @@ endfunction()
 
 run_LabelCount()
 
+function(run_SerialFailed)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SerialFailed)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+  file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+  file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" "
+add_test(NoSuchCommand no_such_command)
+set_tests_properties(NoSuchCommand PROPERTIES RUN_SERIAL ON)
+add_test(Echo \"${CMAKE_COMMAND}\" -E echo \"EchoTest\")
+")
+
+  run_cmake_command(SerialFailed ${CMAKE_CTEST_COMMAND} -V)
+endfunction()
+run_SerialFailed()
+
 function(run_TestLoad name load)
   set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TestLoad)
   set(RunCMake_TEST_NO_CLEAN 1)

+ 1 - 0
Tests/RunCMake/CTestCommandLine/SerialFailed-result.txt

@@ -0,0 +1 @@
+8

+ 1 - 0
Tests/RunCMake/CTestCommandLine/SerialFailed-stderr.txt

@@ -0,0 +1 @@
+Unable to find executable: no_such_command

+ 10 - 0
Tests/RunCMake/CTestCommandLine/SerialFailed-stdout.txt

@@ -0,0 +1,10 @@
+Could not find executable no_such_command
+.*
+2/2 Test #2: Echo .............................   Passed +[0-9.]+ sec
++
+50% tests passed, 1 tests failed out of 2
++
+Total Test time \(real\) = +[0-9.]+ sec
++
+The following tests FAILED:
+[	 ]+1 - NoSuchCommand \(Not Run\)$