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.
This commit is contained in:
parent
55e4ac5ad1
commit
4b4e801eba
|
@ -342,6 +342,7 @@ INCLUDE_DIRECTORIES(
|
|||
#
|
||||
SET(CTEST_SRCS cmCTest.cxx
|
||||
CTest/cmProcess.cxx
|
||||
CTest/cmCTestBatchTestHandler.cxx
|
||||
CTest/cmCTestBuildAndTestHandler.cxx
|
||||
CTest/cmCTestBuildCommand.cxx
|
||||
CTest/cmCTestBuildHandler.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();
|
||||
|
@ -75,18 +75,6 @@ void cmCTestMultiProcessHandler::RunTests()
|
|||
this->MarkFinished();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -32,6 +32,7 @@ class cmCTestTestHandler : public cmCTestGenericHandler
|
|||
{
|
||||
friend class cmCTestRunTest;
|
||||
friend class cmCTestMultiProcessHandler;
|
||||
friend class cmCTestBatchTestHandler;
|
||||
public:
|
||||
cmTypeMacro(cmCTestTestHandler, cmCTestGenericHandler);
|
||||
|
||||
|
|
Loading…
Reference in New Issue