diff options
author | Zach Mullen <zach.mullen@kitware.com> | 2009-09-10 15:16:08 (GMT) |
---|---|---|
committer | Zach Mullen <zach.mullen@kitware.com> | 2009-09-10 15:16:08 (GMT) |
commit | 4b4e801eba8efe6da7407ec3364b3fd04eb59e81 (patch) | |
tree | 27fe0619d1452a622ede1975dcd2a2b55a00ec75 /Source/CTest | |
parent | 55e4ac5ad1344d7636248803f581e72a7dc37a48 (diff) | |
download | CMake-4b4e801eba8efe6da7407ec3364b3fd04eb59e81.zip CMake-4b4e801eba8efe6da7407ec3364b3fd04eb59e81.tar.gz CMake-4b4e801eba8efe6da7407ec3364b3fd04eb59e81.tar.bz2 |
BUG: Fixed segfault and bad reporting if a ctest executable could not be found. Also added some batch testing code that is not yet complete.
Diffstat (limited to 'Source/CTest')
-rw-r--r-- | Source/CTest/cmCTestMultiProcessHandler.cxx | 22 | ||||
-rw-r--r-- | Source/CTest/cmCTestMultiProcessHandler.h | 4 | ||||
-rw-r--r-- | Source/CTest/cmCTestRunTest.cxx | 31 | ||||
-rw-r--r-- | Source/CTest/cmCTestTestHandler.cxx | 27 | ||||
-rw-r--r-- | Source/CTest/cmCTestTestHandler.h | 1 |
5 files changed, 37 insertions, 48 deletions
diff --git a/Source/CTest/cmCTestMultiProcessHandler.cxx b/Source/CTest/cmCTestMultiProcessHandler.cxx index 637c2d5..bebaf1e 100644 --- a/Source/CTest/cmCTestMultiProcessHandler.cxx +++ b/Source/CTest/cmCTestMultiProcessHandler.cxx @@ -27,6 +27,11 @@ cmCTestMultiProcessHandler::cmCTestMultiProcessHandler() this->Completed = 0; this->RunningCount = 0; } + +cmCTestMultiProcessHandler::~cmCTestMultiProcessHandler() +{ +} + // Set the tests void cmCTestMultiProcessHandler::SetTests(TestMap& tests, @@ -55,11 +60,6 @@ void cmCTestMultiProcessHandler::SetParallelLevel(size_t level) //--------------------------------------------------------- void cmCTestMultiProcessHandler::RunTests() { - if(this->CTest->GetBatchJobs()) - { - this->SubmitBatchTests(); - return; - } this->CheckResume(); this->TestHandler->SetMaxIndex(this->FindMaxIndex()); this->StartNextTests(); @@ -76,18 +76,6 @@ void cmCTestMultiProcessHandler::RunTests() } //--------------------------------------------------------- -void cmCTestMultiProcessHandler::SubmitBatchTests() -{ - for(cmCTest::CTestConfigurationMap::iterator i = - this->CTest->CTestConfiguration.begin(); - i != this->CTest->CTestConfiguration.end(); ++i) - { - cmCTestLog(this->CTest, HANDLER_OUTPUT, i->first - << " = " << i->second << std::endl); - } -} - -//--------------------------------------------------------- void cmCTestMultiProcessHandler::StartTestProcess(int test) { cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "test " << test << "\n"); diff --git a/Source/CTest/cmCTestMultiProcessHandler.h b/Source/CTest/cmCTestMultiProcessHandler.h index ff1141c..2ecea22 100644 --- a/Source/CTest/cmCTestMultiProcessHandler.h +++ b/Source/CTest/cmCTestMultiProcessHandler.h @@ -36,13 +36,13 @@ public: std::map<int, cmCTestTestHandler::cmCTestTestProperties*> {}; cmCTestMultiProcessHandler(); + virtual ~cmCTestMultiProcessHandler(); // Set the tests void SetTests(TestMap& tests, PropertiesMap& properties); // Set the max number of tests that can be run at the same time. void SetParallelLevel(size_t); - void RunTests(); + virtual void RunTests(); void PrintTestList(); - void SubmitBatchTests(); void SetPassFailVectors(std::vector<cmStdString>* passed, std::vector<cmStdString>* failed) diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx index 2f20adf..92df585 100644 --- a/Source/CTest/cmCTestRunTest.cxx +++ b/Source/CTest/cmCTestRunTest.cxx @@ -92,9 +92,9 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) this->WriteLogOutputTop(completed, total); std::string reason; bool passed = true; - int res = this->TestProcess->GetProcessStatus(); + int res = started ? this->TestProcess->GetProcessStatus() + : cmsysProcess_State_Error; int retVal = this->TestProcess->GetExitValue(); - std::vector<std::pair<cmsys::RegularExpression, std::string> >::iterator passIt; bool forceFail = false; @@ -197,7 +197,6 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) } passed = this->TestResult.Status == cmCTestTestHandler::COMPLETED; - char buf[1024]; sprintf(buf, "%6.2f sec", this->TestProcess->GetTotalTime()); cmCTestLog(this->CTest, HANDLER_OUTPUT, buf << "\n" ); @@ -208,9 +207,9 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) this->DartProcessing(); // if this is doing MemCheck then all the output needs to be put into // Output since that is what is parsed by cmCTestMemCheckHandler - if(!this->TestHandler->MemCheck) + if(!this->TestHandler->MemCheck && started) { - if ( this->TestResult.Status == cmCTestTestHandler::COMPLETED ) + if (this->TestResult.Status == cmCTestTestHandler::COMPLETED) { this->TestHandler->CleanTestOutput(this->ProcessOutput, static_cast<size_t> @@ -224,7 +223,7 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) } } this->TestResult.Reason = reason; - if ( this->TestHandler->LogFile ) + if (this->TestHandler->LogFile) { bool pass = true; const char* reasonType = "Test Pass Reason"; @@ -272,10 +271,10 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) this->TestResult.ReturnValue = this->TestProcess->GetExitValue(); this->TestResult.CompletionStatus = "Completed"; this->TestResult.ExecutionTime = this->TestProcess->GetTotalTime(); - this->TestHandler->TestResults.push_back( this->TestResult ); - } - this->MemCheckPostProcess(); + this->TestHandler->TestResults.push_back(this->TestResult); + this->MemCheckPostProcess(); + } delete this->TestProcess; return passed; } @@ -324,20 +323,18 @@ bool cmCTestRunTest::StartTest() this->TestResult.Name = this->TestProperties->Name; this->TestResult.Path = this->TestProperties->Directory.c_str(); - // continue if we did not find the executable - if (this->TestCommand == "") + // log and return if we did not find the executable + if (this->ActualCommand == "") { + this->TestProcess = new cmProcess; *this->TestHandler->LogFile << "Unable to find executable: " << args[1].c_str() << std::endl; cmCTestLog(this->CTest, ERROR_MESSAGE, "Unable to find executable: " << args[1].c_str() << std::endl); this->TestResult.Output = "Unable to find executable: " + args[1]; - if ( !this->CTest->GetShowOnly() ) - { - this->TestResult.FullCommandLine = this->ActualCommand; - this->TestHandler->TestResults.push_back( this->TestResult ); - return false; - } + this->TestResult.FullCommandLine = ""; + this->TestHandler->TestResults.push_back(this->TestResult); + return false; } this->StartTime = this->CTest->CurrentTime(); diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index 229f92a..c6af20d 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -17,6 +17,7 @@ #include "cmCTestTestHandler.h" #include "cmCTestMultiProcessHandler.h" +#include "cmCTestBatchTestHandler.h" #include "cmCTest.h" #include "cmCTestRunTest.h" #include "cmake.h" @@ -999,10 +1000,11 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<cmStdString> &passed, this->StartTestTime = static_cast<unsigned int>(cmSystemTools::GetTime()); double elapsed_time_start = cmSystemTools::GetTime(); - cmCTestMultiProcessHandler parallel; - parallel.SetCTest(this->CTest); - parallel.SetParallelLevel(this->CTest->GetParallelLevel()); - parallel.SetTestHandler(this); + cmCTestMultiProcessHandler* parallel = this->CTest->GetBatchJobs() ? + new cmCTestBatchTestHandler : new cmCTestMultiProcessHandler; + parallel->SetCTest(this->CTest); + parallel->SetParallelLevel(this->CTest->GetParallelLevel()); + parallel->SetTestHandler(this); *this->LogFile << "Start testing: " << this->CTest->CurrentTime() << std::endl @@ -1013,7 +1015,7 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<cmStdString> &passed, cmCTestMultiProcessHandler::PropertiesMap properties; for (ListOfTests::iterator it = this->TestList.begin(); - it != this->TestList.end(); it ++ ) + it != this->TestList.end(); ++it) { cmCTestTestProperties& p = *it; cmCTestMultiProcessHandler::TestSet depends; @@ -1021,10 +1023,10 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<cmStdString> &passed, if(p.Depends.size()) { for(std::vector<std::string>::iterator i = p.Depends.begin(); - i != p.Depends.end(); ++i) + i != p.Depends.end(); ++i) { for(ListOfTests::iterator it2 = this->TestList.begin(); - it2 != this->TestList.end(); it2 ++ ) + it2 != this->TestList.end(); ++it2) { if(it2->Name == *i) { @@ -1037,18 +1039,19 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<cmStdString> &passed, tests[it->Index] = depends; properties[it->Index] = &*it; } - parallel.SetTests(tests, properties); - parallel.SetPassFailVectors(&passed, &failed); + parallel->SetTests(tests, properties); + parallel->SetPassFailVectors(&passed, &failed); this->TestResults.clear(); - parallel.SetTestResults(&this->TestResults); + parallel->SetTestResults(&this->TestResults); if(this->CTest->GetShowOnly()) { - parallel.PrintTestList(); + parallel->PrintTestList(); } else { - parallel.RunTests(); + parallel->RunTests(); } + delete parallel; this->EndTest = this->CTest->CurrentTime(); this->EndTestTime = static_cast<unsigned int>(cmSystemTools::GetTime()); this->ElapsedTestingTime = cmSystemTools::GetTime() - elapsed_time_start; diff --git a/Source/CTest/cmCTestTestHandler.h b/Source/CTest/cmCTestTestHandler.h index ac46e57..0580f10 100644 --- a/Source/CTest/cmCTestTestHandler.h +++ b/Source/CTest/cmCTestTestHandler.h @@ -32,6 +32,7 @@ class cmCTestTestHandler : public cmCTestGenericHandler { friend class cmCTestRunTest; friend class cmCTestMultiProcessHandler; + friend class cmCTestBatchTestHandler; public: cmTypeMacro(cmCTestTestHandler, cmCTestGenericHandler); |