summaryrefslogtreecommitdiffstats
path: root/Source/CTest
diff options
context:
space:
mode:
authorZach Mullen <zach.mullen@kitware.com>2009-09-10 15:16:08 (GMT)
committerZach Mullen <zach.mullen@kitware.com>2009-09-10 15:16:08 (GMT)
commit4b4e801eba8efe6da7407ec3364b3fd04eb59e81 (patch)
tree27fe0619d1452a622ede1975dcd2a2b55a00ec75 /Source/CTest
parent55e4ac5ad1344d7636248803f581e72a7dc37a48 (diff)
downloadCMake-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.cxx22
-rw-r--r--Source/CTest/cmCTestMultiProcessHandler.h4
-rw-r--r--Source/CTest/cmCTestRunTest.cxx31
-rw-r--r--Source/CTest/cmCTestTestHandler.cxx27
-rw-r--r--Source/CTest/cmCTestTestHandler.h1
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);