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:
Zack Galbreath 2016-11-08 15:36:29 -05:00
parent f725b20be3
commit d3633731ab
5 changed files with 4 additions and 77 deletions

View File

@ -354,7 +354,7 @@ void cmCTestMemCheckHandler::GenerateDartOutput(cmXMLWriter& xml)
xml.EndElement(); // Results
xml.StartElement("Log");
if (this->CTest->ShouldCompressMemCheckOutput()) {
if (this->CTest->ShouldCompressTestOutput()) {
this->CTest->CompressString(memcheckstr);
xml.Attribute("compression", "gzip");
xml.Attribute("encoding", "base64");

View File

@ -153,7 +153,7 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started)
if ((!this->TestHandler->MemCheck &&
this->CTest->ShouldCompressTestOutput()) ||
(this->TestHandler->MemCheck &&
this->CTest->ShouldCompressMemCheckOutput())) {
this->CTest->ShouldCompressTestOutput())) {
this->CompressOutput();
}

View File

@ -46,7 +46,6 @@ public:
};
StatusType Status;
std::string CDashVersion;
std::string Filename;
std::string MD5;
std::string Message;
@ -63,12 +62,10 @@ private:
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();
if (name == "cdash") {
this->CDashVersion = this->FindAttribute(atts, "version");
}
}
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!
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()) {
cmCTestOptionalLog(this->CTest, DEBUG, "CURL output: ["
<< cmCTestLogWrite(&*chunk.begin(), chunk.size())

View File

@ -271,7 +271,6 @@ cmCTest::cmCTest()
this->UseHTTP10 = false;
this->PrintLabels = false;
this->CompressTestOutput = true;
this->CompressMemCheckOutput = true;
this->TestModel = cmCTest::EXPERIMENTAL;
this->MaxTestNameWidth = 30;
this->InteractiveDebugMode = true;
@ -289,8 +288,6 @@ cmCTest::cmCTest()
this->DartVersion = 1;
this->DropSiteCDash = false;
this->OutputTestOutputOnTestFailure = false;
this->ComputedCompressTestOutput = false;
this->ComputedCompressMemCheckOutput = false;
this->RepeatTests = 1; // default to run each test once
this->RepeatUntilFail = false;
std::string outOnFail;
@ -358,53 +355,9 @@ void cmCTest::SetTestLoad(unsigned long load)
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;
}
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)
{
// 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")) {
this->CompressTestOutput = false;
this->CompressMemCheckOutput = false;
}
if (this->CheckArgument(arg, "--print-labels")) {

View File

@ -232,11 +232,8 @@ public:
bool ShouldPrintLabels() { return this->PrintLabels; }
bool ShouldCompressTestOutput();
bool ShouldCompressMemCheckOutput();
bool CompressString(std::string& str);
std::string GetCDashVersion();
std::string GetStopTime() { return this->StopTime; }
void SetStopTime(std::string const& time);
@ -487,10 +484,6 @@ private:
bool RunConfigurationScript;
// flag for lazy getter (optimization)
bool ComputedCompressTestOutput;
bool ComputedCompressMemCheckOutput;
int GenerateNotesFile(const char* files);
void DetermineNextDayStop();
@ -547,7 +540,6 @@ private:
bool CompressXMLFiles;
bool CompressTestOutput;
bool CompressMemCheckOutput;
void InitStreams();
std::ostream* StreamOut;