summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2006-10-19 14:45:19 (GMT)
committerKen Martin <ken.martin@kitware.com>2006-10-19 14:45:19 (GMT)
commitf7a5289e318e3802737a2629c7fe2ed24dbfc5b9 (patch)
tree200ff8466c8dd3da1cec87f51689eaea6651b50e /Source
parent2fd1b374c17f4da904a0f3e62802a352f8ab6c72 (diff)
downloadCMake-f7a5289e318e3802737a2629c7fe2ed24dbfc5b9.zip
CMake-f7a5289e318e3802737a2629c7fe2ed24dbfc5b9.tar.gz
CMake-f7a5289e318e3802737a2629c7fe2ed24dbfc5b9.tar.bz2
ENH: added total time limit for a CTest run bug 1207
Diffstat (limited to 'Source')
-rw-r--r--Source/CTest/cmCTestBuildHandler.cxx6
-rw-r--r--Source/CTest/cmCTestCoverageHandler.cxx6
-rw-r--r--Source/CTest/cmCTestScriptHandler.cxx21
-rw-r--r--Source/CTest/cmCTestScriptHandler.h7
-rw-r--r--Source/CTest/cmCTestTestHandler.cxx8
-rw-r--r--Source/cmCTest.cxx44
-rw-r--r--Source/cmCTest.h7
7 files changed, 93 insertions, 6 deletions
diff --git a/Source/CTest/cmCTestBuildHandler.cxx b/Source/CTest/cmCTestBuildHandler.cxx
index 47c708b..e0d7c84 100644
--- a/Source/CTest/cmCTestBuildHandler.cxx
+++ b/Source/CTest/cmCTestBuildHandler.cxx
@@ -250,6 +250,12 @@ int cmCTestBuildHandler::ProcessHandler()
{
cmCTestLog(this->CTest, HANDLER_OUTPUT, "Build project" << std::endl);
+ // do we have time for this
+ if (this->CTest->GetRemainingTimeAllowed() < 120)
+ {
+ return 0;
+ }
+
int entry;
for ( entry = 0;
cmCTestWarningErrorFileLine[entry].RegularExpressionString;
diff --git a/Source/CTest/cmCTestCoverageHandler.cxx b/Source/CTest/cmCTestCoverageHandler.cxx
index 8a0dad8..b0dee01 100644
--- a/Source/CTest/cmCTestCoverageHandler.cxx
+++ b/Source/CTest/cmCTestCoverageHandler.cxx
@@ -180,6 +180,12 @@ int cmCTestCoverageHandler::ProcessHandler()
{
int error = 0;
+ // do we have time for this
+ if (this->CTest->GetRemainingTimeAllowed() < 120)
+ {
+ return error;
+ }
+
std::string sourceDir
= this->CTest->GetCTestConfiguration("SourceDirectory");
std::string binaryDir
diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx
index 905a40b..0346e43 100644
--- a/Source/CTest/cmCTestScriptHandler.cxx
+++ b/Source/CTest/cmCTestScriptHandler.cxx
@@ -965,3 +965,24 @@ bool cmCTestScriptHandler::EmptyBinaryDirectory(const char *sname)
}
return true;
}
+
+//-------------------------------------------------------------------------
+double cmCTestScriptHandler::GetRemainingTimeAllowed()
+{
+ if (!this->Makefile)
+ {
+ return 1.0e7;
+ }
+
+ const char *timelimitS
+ = this->Makefile->GetDefinition("CTEST_TIME_LIMIT");
+
+ if (!timelimitS)
+ {
+ return 1.0e7;
+ }
+
+ double timelimit = atof(timelimitS);
+
+ return timelimit - cmSystemTools::GetTime() + this->ScriptStartTime;
+}
diff --git a/Source/CTest/cmCTestScriptHandler.h b/Source/CTest/cmCTestScriptHandler.h
index 503ddcc..f82f3ea 100644
--- a/Source/CTest/cmCTestScriptHandler.h
+++ b/Source/CTest/cmCTestScriptHandler.h
@@ -96,6 +96,13 @@ public:
static void SleepInSeconds(unsigned int secondsToWait);
void UpdateElapsedTime();
+ /**
+ * Return the time remaianing that the script is allowed to run in
+ * seconds if the user has set the variable CTEST_TIME_LIMIT. If that has
+ * not been set it returns 1e7 seconds
+ */
+ double GetRemainingTimeAllowed();
+
cmCTestScriptHandler();
~cmCTestScriptHandler();
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx
index c1a8dc8..fef7e42 100644
--- a/Source/CTest/cmCTestTestHandler.cxx
+++ b/Source/CTest/cmCTestTestHandler.cxx
@@ -605,6 +605,14 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<cmStdString> &passed,
{
inREcnt++;
}
+
+ // if we are out of time then skip this test, we leave two minutes
+ // to submit results
+ if (this->CTest->GetRemainingTimeAllowed() - 120 <= 0)
+ {
+ continue;
+ }
+
const std::string& testname = it->Name;
std::vector<std::string>& args = it->Args;
cmCTestTestResult cres;
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index 8fa576c..8d05762 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -792,7 +792,8 @@ int cmCTest::ProcessTests()
break;
}
}
- if ( this->Tests[UPDATE_TEST] || this->Tests[ALL_TEST] )
+ if (( this->Tests[UPDATE_TEST] || this->Tests[ALL_TEST] ) &&
+ (this->GetRemainingTimeAllowed() - 120 > 0))
{
cmCTestGenericHandler* uphandler = this->GetHandler("update");
uphandler->SetPersistentOption("SourceDirectory",
@@ -807,14 +808,16 @@ int cmCTest::ProcessTests()
{
return 0;
}
- if ( this->Tests[CONFIGURE_TEST] || this->Tests[ALL_TEST] )
+ if (( this->Tests[CONFIGURE_TEST] || this->Tests[ALL_TEST] )&&
+ (this->GetRemainingTimeAllowed() - 120 > 0))
{
if (this->GetHandler("configure")->ProcessHandler() < 0)
{
res |= cmCTest::CONFIGURE_ERRORS;
}
}
- if ( this->Tests[BUILD_TEST] || this->Tests[ALL_TEST] )
+ if (( this->Tests[BUILD_TEST] || this->Tests[ALL_TEST] )&&
+ (this->GetRemainingTimeAllowed() - 120 > 0))
{
this->UpdateCTestConfiguration();
if (this->GetHandler("build")->ProcessHandler() < 0)
@@ -822,7 +825,8 @@ int cmCTest::ProcessTests()
res |= cmCTest::BUILD_ERRORS;
}
}
- if ( this->Tests[TEST_TEST] || this->Tests[ALL_TEST] || notest )
+ if (( this->Tests[TEST_TEST] || this->Tests[ALL_TEST] || notest ) &&
+ (this->GetRemainingTimeAllowed() - 120 > 0))
{
this->UpdateCTestConfiguration();
if (this->GetHandler("test")->ProcessHandler() < 0)
@@ -830,7 +834,8 @@ int cmCTest::ProcessTests()
res |= cmCTest::TEST_ERRORS;
}
}
- if ( this->Tests[COVERAGE_TEST] || this->Tests[ALL_TEST] )
+ if (( this->Tests[COVERAGE_TEST] || this->Tests[ALL_TEST] ) &&
+ (this->GetRemainingTimeAllowed() - 120 > 0))
{
this->UpdateCTestConfiguration();
if (this->GetHandler("coverage")->ProcessHandler() < 0)
@@ -838,7 +843,8 @@ int cmCTest::ProcessTests()
res |= cmCTest::COVERAGE_ERRORS;
}
}
- if ( this->Tests[MEMCHECK_TEST] || this->Tests[ALL_TEST] )
+ if (( this->Tests[MEMCHECK_TEST] || this->Tests[ALL_TEST] )&&
+ (this->GetRemainingTimeAllowed() - 120 > 0))
{
this->UpdateCTestConfiguration();
if (this->GetHandler("memcheck")->ProcessHandler() < 0)
@@ -1109,6 +1115,19 @@ int cmCTest::RunTest(std::vector<const char*> argv,
{
cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1);
}
+
+ // do we have time for
+ double timeout = this->GetRemainingTimeAllowed() - 120;
+ if (this->TimeOut && this->TimeOut < timeout)
+ {
+ timeout = this->TimeOut;
+ }
+ // always have at least 1 second if we got to here
+ if (timeout <= 0)
+ {
+ timeout = 1;
+ }
+
cmsysProcess_SetTimeout(cp, this->TimeOut);
cmsysProcess_Execute(cp);
@@ -2547,3 +2566,16 @@ void cmCTest::Log(int logType, const char* file, int line, const char* msg)
}
}
+//-------------------------------------------------------------------------
+double cmCTest::GetRemainingTimeAllowed()
+{
+ if (!this->GetHandler("script"))
+ {
+ return 1.0e7;
+ }
+
+ cmCTestScriptHandler* ch
+ = static_cast<cmCTestScriptHandler*>(this->GetHandler("script"));
+
+ return ch->GetRemainingTimeAllowed();
+}
diff --git a/Source/cmCTest.h b/Source/cmCTest.h
index 962431a..ca2e1a9 100644
--- a/Source/cmCTest.h
+++ b/Source/cmCTest.h
@@ -137,6 +137,13 @@ public:
///! Get the current time as string
std::string CurrentTime();
+ /**
+ * Return the time remaianing that the script is allowed to run in
+ * seconds if the user has set the variable CTEST_TIME_LIMIT. If that has
+ * not been set it returns 1e7 seconds
+ */
+ double GetRemainingTimeAllowed();
+
///! Open file in the output directory and set the stream
bool OpenOutputFile(const std::string& path,
const std::string& name,