mirror of
https://github.com/Kitware/CMake.git
synced 2026-03-16 23:41:15 -05:00
Do not query CDash for version
This check was not functioning properly for the following reasons: * The "DropSite" and "DropLocation" CTest Configurations do not get set until ctest_submit() is called. So if ctest_submit() was not called before ctest_test() we would end up with uncompressed output, even if the CDash server was new enough to support this feature. * CDash's API is now versioned. The current location to query is now /api/v1/getversion.php, not /api/getversion.php. As a result of these issues, CTest would not compress test/memcheck output when it should. Rather than fix this check, we now assume that CTest is communicating with a new enough version of CDash. This behavior can be controlled through the use of the --no-compress-output command-line argument.
This commit is contained in:
@@ -354,7 +354,7 @@ void cmCTestMemCheckHandler::GenerateDartOutput(cmXMLWriter& xml)
|
|||||||
xml.EndElement(); // Results
|
xml.EndElement(); // Results
|
||||||
|
|
||||||
xml.StartElement("Log");
|
xml.StartElement("Log");
|
||||||
if (this->CTest->ShouldCompressMemCheckOutput()) {
|
if (this->CTest->ShouldCompressTestOutput()) {
|
||||||
this->CTest->CompressString(memcheckstr);
|
this->CTest->CompressString(memcheckstr);
|
||||||
xml.Attribute("compression", "gzip");
|
xml.Attribute("compression", "gzip");
|
||||||
xml.Attribute("encoding", "base64");
|
xml.Attribute("encoding", "base64");
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started)
|
|||||||
if ((!this->TestHandler->MemCheck &&
|
if ((!this->TestHandler->MemCheck &&
|
||||||
this->CTest->ShouldCompressTestOutput()) ||
|
this->CTest->ShouldCompressTestOutput()) ||
|
||||||
(this->TestHandler->MemCheck &&
|
(this->TestHandler->MemCheck &&
|
||||||
this->CTest->ShouldCompressMemCheckOutput())) {
|
this->CTest->ShouldCompressTestOutput())) {
|
||||||
this->CompressOutput();
|
this->CompressOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
StatusType Status;
|
StatusType Status;
|
||||||
std::string CDashVersion;
|
|
||||||
std::string Filename;
|
std::string Filename;
|
||||||
std::string MD5;
|
std::string MD5;
|
||||||
std::string Message;
|
std::string Message;
|
||||||
@@ -63,12 +62,10 @@ private:
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartElement(const std::string& name, const char** atts) CM_OVERRIDE
|
void StartElement(const std::string& /*name*/,
|
||||||
|
const char** /*atts*/) CM_OVERRIDE
|
||||||
{
|
{
|
||||||
this->CurrentValue.clear();
|
this->CurrentValue.clear();
|
||||||
if (name == "cdash") {
|
|
||||||
this->CDashVersion = this->FindAttribute(atts, "version");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CharacterDataHandler(const char* data, int length) CM_OVERRIDE
|
void CharacterDataHandler(const char* data, int length) CM_OVERRIDE
|
||||||
@@ -470,20 +467,6 @@ bool cmCTestSubmitHandler::SubmitUsingHTTP(const std::string& localprefix,
|
|||||||
// Now run off and do what you've been told!
|
// Now run off and do what you've been told!
|
||||||
res = ::curl_easy_perform(curl);
|
res = ::curl_easy_perform(curl);
|
||||||
|
|
||||||
if (cmSystemTools::IsOn(this->GetOption("InternalTest")) &&
|
|
||||||
cmSystemTools::VersionCompare(cmSystemTools::OP_LESS,
|
|
||||||
this->CTest->GetCDashVersion().c_str(),
|
|
||||||
"1.7")) {
|
|
||||||
// mock failure output for internal test case
|
|
||||||
std::string mock_output =
|
|
||||||
"<cdash version=\"1.7.0\">\n"
|
|
||||||
" <status>ERROR</status>\n"
|
|
||||||
" <message>Checksum failed for file.</message>\n"
|
|
||||||
"</cdash>\n";
|
|
||||||
chunk.clear();
|
|
||||||
chunk.assign(mock_output.begin(), mock_output.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!chunk.empty()) {
|
if (!chunk.empty()) {
|
||||||
cmCTestOptionalLog(this->CTest, DEBUG, "CURL output: ["
|
cmCTestOptionalLog(this->CTest, DEBUG, "CURL output: ["
|
||||||
<< cmCTestLogWrite(&*chunk.begin(), chunk.size())
|
<< cmCTestLogWrite(&*chunk.begin(), chunk.size())
|
||||||
|
|||||||
@@ -271,7 +271,6 @@ cmCTest::cmCTest()
|
|||||||
this->UseHTTP10 = false;
|
this->UseHTTP10 = false;
|
||||||
this->PrintLabels = false;
|
this->PrintLabels = false;
|
||||||
this->CompressTestOutput = true;
|
this->CompressTestOutput = true;
|
||||||
this->CompressMemCheckOutput = true;
|
|
||||||
this->TestModel = cmCTest::EXPERIMENTAL;
|
this->TestModel = cmCTest::EXPERIMENTAL;
|
||||||
this->MaxTestNameWidth = 30;
|
this->MaxTestNameWidth = 30;
|
||||||
this->InteractiveDebugMode = true;
|
this->InteractiveDebugMode = true;
|
||||||
@@ -289,8 +288,6 @@ cmCTest::cmCTest()
|
|||||||
this->DartVersion = 1;
|
this->DartVersion = 1;
|
||||||
this->DropSiteCDash = false;
|
this->DropSiteCDash = false;
|
||||||
this->OutputTestOutputOnTestFailure = false;
|
this->OutputTestOutputOnTestFailure = false;
|
||||||
this->ComputedCompressTestOutput = false;
|
|
||||||
this->ComputedCompressMemCheckOutput = false;
|
|
||||||
this->RepeatTests = 1; // default to run each test once
|
this->RepeatTests = 1; // default to run each test once
|
||||||
this->RepeatUntilFail = false;
|
this->RepeatUntilFail = false;
|
||||||
std::string outOnFail;
|
std::string outOnFail;
|
||||||
@@ -358,53 +355,9 @@ void cmCTest::SetTestLoad(unsigned long load)
|
|||||||
|
|
||||||
bool cmCTest::ShouldCompressTestOutput()
|
bool cmCTest::ShouldCompressTestOutput()
|
||||||
{
|
{
|
||||||
if (!this->ComputedCompressTestOutput) {
|
|
||||||
std::string cdashVersion = this->GetCDashVersion();
|
|
||||||
// version >= 1.6?
|
|
||||||
bool cdashSupportsGzip = cmSystemTools::VersionCompare(
|
|
||||||
cmSystemTools::OP_GREATER_EQUAL, cdashVersion.c_str(), "1.6");
|
|
||||||
this->CompressTestOutput &= cdashSupportsGzip;
|
|
||||||
this->ComputedCompressTestOutput = true;
|
|
||||||
}
|
|
||||||
return this->CompressTestOutput;
|
return this->CompressTestOutput;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cmCTest::ShouldCompressMemCheckOutput()
|
|
||||||
{
|
|
||||||
if (!this->ComputedCompressMemCheckOutput) {
|
|
||||||
std::string cdashVersion = this->GetCDashVersion();
|
|
||||||
|
|
||||||
bool compressionSupported = cmSystemTools::VersionCompare(
|
|
||||||
cmSystemTools::OP_GREATER, cdashVersion.c_str(), "1.9.0");
|
|
||||||
this->CompressMemCheckOutput &= compressionSupported;
|
|
||||||
this->ComputedCompressMemCheckOutput = true;
|
|
||||||
}
|
|
||||||
return this->CompressMemCheckOutput;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string cmCTest::GetCDashVersion()
|
|
||||||
{
|
|
||||||
#ifdef CMAKE_BUILD_WITH_CMAKE
|
|
||||||
// First query the server. If that fails, fall back to the local setting
|
|
||||||
std::string response;
|
|
||||||
std::string url = "http://";
|
|
||||||
url += this->GetCTestConfiguration("DropSite");
|
|
||||||
|
|
||||||
std::string cdashUri = this->GetCTestConfiguration("DropLocation");
|
|
||||||
cdashUri = cdashUri.substr(0, cdashUri.find("/submit.php"));
|
|
||||||
|
|
||||||
int res = 1;
|
|
||||||
if (!cdashUri.empty()) {
|
|
||||||
url += cdashUri + "/api/getversion.php";
|
|
||||||
res = cmCTest::HTTPRequest(url, cmCTest::HTTP_GET, response, "", "", 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res ? this->GetCTestConfiguration("CDashVersion") : response;
|
|
||||||
#else
|
|
||||||
return this->GetCTestConfiguration("CDashVersion");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
cmCTest::Part cmCTest::GetPartFromName(const char* name)
|
cmCTest::Part cmCTest::GetPartFromName(const char* name)
|
||||||
{
|
{
|
||||||
// Look up by lower-case to make names case-insensitive.
|
// Look up by lower-case to make names case-insensitive.
|
||||||
@@ -1746,7 +1699,6 @@ bool cmCTest::HandleCommandLineArguments(size_t& i,
|
|||||||
|
|
||||||
if (this->CheckArgument(arg, "--no-compress-output")) {
|
if (this->CheckArgument(arg, "--no-compress-output")) {
|
||||||
this->CompressTestOutput = false;
|
this->CompressTestOutput = false;
|
||||||
this->CompressMemCheckOutput = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->CheckArgument(arg, "--print-labels")) {
|
if (this->CheckArgument(arg, "--print-labels")) {
|
||||||
|
|||||||
@@ -232,11 +232,8 @@ public:
|
|||||||
bool ShouldPrintLabels() { return this->PrintLabels; }
|
bool ShouldPrintLabels() { return this->PrintLabels; }
|
||||||
|
|
||||||
bool ShouldCompressTestOutput();
|
bool ShouldCompressTestOutput();
|
||||||
bool ShouldCompressMemCheckOutput();
|
|
||||||
bool CompressString(std::string& str);
|
bool CompressString(std::string& str);
|
||||||
|
|
||||||
std::string GetCDashVersion();
|
|
||||||
|
|
||||||
std::string GetStopTime() { return this->StopTime; }
|
std::string GetStopTime() { return this->StopTime; }
|
||||||
void SetStopTime(std::string const& time);
|
void SetStopTime(std::string const& time);
|
||||||
|
|
||||||
@@ -487,10 +484,6 @@ private:
|
|||||||
|
|
||||||
bool RunConfigurationScript;
|
bool RunConfigurationScript;
|
||||||
|
|
||||||
// flag for lazy getter (optimization)
|
|
||||||
bool ComputedCompressTestOutput;
|
|
||||||
bool ComputedCompressMemCheckOutput;
|
|
||||||
|
|
||||||
int GenerateNotesFile(const char* files);
|
int GenerateNotesFile(const char* files);
|
||||||
|
|
||||||
void DetermineNextDayStop();
|
void DetermineNextDayStop();
|
||||||
@@ -547,7 +540,6 @@ private:
|
|||||||
|
|
||||||
bool CompressXMLFiles;
|
bool CompressXMLFiles;
|
||||||
bool CompressTestOutput;
|
bool CompressTestOutput;
|
||||||
bool CompressMemCheckOutput;
|
|
||||||
|
|
||||||
void InitStreams();
|
void InitStreams();
|
||||||
std::ostream* StreamOut;
|
std::ostream* StreamOut;
|
||||||
|
|||||||
Reference in New Issue
Block a user