summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/arthur/baselineserver/src/baselineserver.cpp29
-rw-r--r--tests/arthur/baselineserver/src/baselineserver.h2
-rw-r--r--tests/arthur/baselineserver/src/htmlpage.cpp11
-rw-r--r--tests/arthur/baselineserver/src/main.cpp3
-rw-r--r--tests/arthur/common/baselineprotocol.cpp86
-rw-r--r--tests/arthur/common/baselineprotocol.h26
-rw-r--r--tests/auto/lancelot/lancelot.pro1
7 files changed, 89 insertions, 69 deletions
diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp
index dd26a85..03d6499 100644
--- a/tests/arthur/baselineserver/src/baselineserver.cpp
+++ b/tests/arthur/baselineserver/src/baselineserver.cpp
@@ -133,24 +133,29 @@ BaselineHandler::BaselineHandler(int socketDescriptor)
proto.socket.setSocketDescriptor(socketDescriptor);
}
-QString BaselineHandler::logtime()
+const char *BaselineHandler::logtime()
{
- return QTime::currentTime().toString(QLS("mm:ss.zzz"));
+ return 0;
+ //return QTime::currentTime().toString(QLS("mm:ss.zzz"));
}
void BaselineHandler::receiveRequest()
{
if (!connectionEstablished) {
if (!proto.acceptConnection(&plat)) {
- qWarning() << runId << logtime() << "Accepting new connection failed. " << proto.errorMessage();
- QThread::currentThread()->exit(1);
+ qWarning() << runId << logtime() << "Accepting new connection from" << proto.socket.peerAddress().toString() << "failed." << proto.errorMessage();
+ proto.socket.disconnectFromHost();
return;
}
connectionEstablished = true;
- qDebug() << runId << logtime() << "Connection established with" << plat.hostName << "[" << proto.socket.peerAddress().toString() << "]"
- << "OS:" << plat.osName << "[" << plat.osVersion << "]" << "Qt version:" << plat.qtVersion << "[" << plat.buildKey << "]"
- << "git commit:" << plat.gitCommit;
- return;
+ QString logMsg;
+ foreach (QString key, plat.keys()) {
+ if (key != PI_HostName && key != PI_HostAddress)
+ logMsg += key + QLS(": '") + plat.value(key) + QLS("', ");
+ }
+ qDebug() << runId << logtime() << "Connection established with" << plat.value(PI_HostName)
+ << "[" << qPrintable(plat.value(PI_HostAddress)) << "]" << logMsg;
+ return;
}
QByteArray block;
@@ -284,7 +289,7 @@ QString BaselineHandler::itemSubPath(const QString &engine, const QString &forma
QString BaselineHandler::pathForItem(const ImageItem &item, bool isBaseline, bool absolute)
{
if (pathForRun.isNull()) {
- QString host = plat.hostName.section(QLC('.'), 0, 0); // Filter away domain, if any
+ QString host = plat.value(PI_HostName).section(QLC('.'), 0, 0); // Filter away domain, if any
if (host.isEmpty() || host == QLS("localhost")) {
host = proto.socket.peerAddress().toString();
if (host.isEmpty())
@@ -438,11 +443,11 @@ void BaselineHandler::testPathMapping()
item.imageChecksums << 0x0123456789abcdefULL;
item.scriptChecksum = 0x0123;
- plat.qtVersion = QLS("4.8.0");
- plat.buildKey = QLS("(nobuildkey)");
+ plat.insert(PI_QtVersion, QLS("4.8.0"));
+ plat.insert(PI_BuildKey, QLS("(nobuildkey)"));
foreach(const QString& host, hosts) {
pathForRun = QString();
- plat.hostName = host;
+ plat.insert(PI_HostName, host);
qDebug() << "Baseline from" << host << "->" << pathForItem(item, true).remove(BaselineServer::storagePath());
qDebug() << "Mismatch from" << host << "->" << pathForItem(item, false).remove(BaselineServer::storagePath());
}
diff --git a/tests/arthur/baselineserver/src/baselineserver.h b/tests/arthur/baselineserver/src/baselineserver.h
index bbebabb..e311527 100644
--- a/tests/arthur/baselineserver/src/baselineserver.h
+++ b/tests/arthur/baselineserver/src/baselineserver.h
@@ -116,7 +116,7 @@ private:
void provideBaselineChecksums(const QByteArray &itemListBlock);
void storeImage(const QByteArray &itemBlock, bool isBaseline);
QString pathForItem(const ImageItem &item, bool isBaseline = true, bool absolute = true);
- QString logtime();
+ const char *logtime();
QString computeMismatchScore(const QImage& baseline, const QImage& rendered);
QString engineForItem(const ImageItem &item);
diff --git a/tests/arthur/baselineserver/src/htmlpage.cpp b/tests/arthur/baselineserver/src/htmlpage.cpp
index 00d07f1..ad7f8b7 100644
--- a/tests/arthur/baselineserver/src/htmlpage.cpp
+++ b/tests/arthur/baselineserver/src/htmlpage.cpp
@@ -89,9 +89,12 @@ void HTMLPage::writeHeader(const ImageItem &item)
out.setDevice(&file);
out << "<html><body><h1>Lancelot results from run " << id << "</h1>\n\n";
- out << "<h3>Host: " << plat.hostName << " [" << address << "] OS: " << plat.osName << " [enum: " << plat.osVersion << "]</h3>\n";
- out << "<h3>Qt version: " << plat.qtVersion << " [commit: " << plat.gitCommit << "] Build key: \"" << plat.buildKey << "\"</h3>\n";
- out << "<h3>Engine: " << item.engineAsString() << " Format: " << item.formatAsString() << "</h3>\n\n";
+ out << "<h3>Platform Info:</h3>\n";
+ out << "<table>\n";
+ foreach (QString key, plat.keys())
+ out << "<tr><td>" << key << "</td><td>" << plat.value(key) << "</td></tr>\n";
+ out << "</table>\n";
+
#if 0
out << "<h3><a href=\"/cgi-bin/server.cgi?cmd=updateAllBaselines&id="<< id << "&host=" << plat.hostName
<< "&engine=" << item.engineAsString() << "&format=" << item.formatAsString()
@@ -161,7 +164,7 @@ void HTMLPage::end()
if (imageItems.at(i).status == ImageItem::IgnoreItem) {
out << "<span style=\"background-color:yellow\">Blacklisted</span><br>"
"<a href=\"/cgi-bin/server.cgi?cmd=whitelist&scriptName="
- << imageItems.at(i).scriptName << "&host=" << plat.hostName
+ << imageItems.at(i).scriptName << "&host=" << plat.value(PI_HostName)
<< "&engine=" << imageItems.at(i).engineAsString()
<< "&format=" << imageItems.at(i).formatAsString()
<< "&url=" << pageUrl
diff --git a/tests/arthur/baselineserver/src/main.cpp b/tests/arthur/baselineserver/src/main.cpp
index dcddfdf..a5ec4db 100644
--- a/tests/arthur/baselineserver/src/main.cpp
+++ b/tests/arthur/baselineserver/src/main.cpp
@@ -64,6 +64,7 @@ int main(int argc, char *argv[])
return 1;
}
- qDebug() << "Listening for connections";
+ qDebug() << "\n*****" << argv[0] << "started, ready to serve on port" << BaselineProtocol::ServerPort
+ << "with baseline protocol version" << BaselineProtocol::ProtocolVersion << "*****\n";
return a.exec();
}
diff --git a/tests/arthur/common/baselineprotocol.cpp b/tests/arthur/common/baselineprotocol.cpp
index baa6f8b..3e60011 100644
--- a/tests/arthur/common/baselineprotocol.cpp
+++ b/tests/arthur/common/baselineprotocol.cpp
@@ -45,30 +45,40 @@
#include <QHostInfo>
#include <QSysInfo>
#include <QProcess>
+#include <QFileInfo>
+
+#ifndef QMAKESPEC
+#define QMAKESPEC "Unknown"
+#endif
PlatformInfo::PlatformInfo(bool useLocal)
+ : QMap<QString, QString>()
{
if (useLocal) {
- buildKey = QLibraryInfo::buildKey();
- qtVersion = QLatin1String(qVersion());
- hostName = QHostInfo::localHostName();
- osVersion = -1;
+ insert(PI_HostName, QHostInfo::localHostName());
+ insert(PI_QtVersion, QLS(qVersion()));
+ insert(PI_QMakeSpec, QFileInfo(QLS(QMAKESPEC)).fileName());
+ insert(PI_BuildKey, QLibraryInfo::buildKey());
#if defined(Q_OS_LINUX)
- osName = QLatin1String("Linux");
+ insert(PI_OSName, QLS("Linux"));
+ QProcess uname;
+ uname.start(QLS("uname"), QStringList() << QLS("-r"));
+ if (uname.waitForFinished(3000))
+ insert(PI_OSVersion, QString::fromLocal8Bit(uname.readAllStandardOutput().constData()).simplified());
#elif defined(Q_OS_WINCE)
- osName = QLatin1String("WinCE");
- osVersion = QSysInfo::windowsVersion();
+ insert(PI_OSName, QLS("WinCE"));
+ insert(PI_OSVersion, QString::number(QSysInfo::windowsVersion()));
#elif defined(Q_OS_WIN)
- osName = QLatin1String("Windows");
- osVersion = QSysInfo::windowsVersion();
+ insert(PI_OSName, QLS("Windows"));
+ insert(PI_OSVersion, QString::number(QSysInfo::windowsVersion()));
#elif defined(Q_OS_MAC)
- osName = QLatin1String("MacOS");
- osVersion = qMacVersion();
+ insert(PI_OSName, QLS("MacOS"));
+ insert(PI_OSVersion, QString::number(qMacVersion()));
#elif defined(Q_OS_SYMBIAN)
- osName = QLatin1String("Symbian");
- osVersion = QSysInfo::symbianVersion();
+ insert(PI_OSName, QLS("Symbian"));
+ insert(PI_OSVersion, QString::number(QSysInfo::symbianVersion());
#else
- osName = QLatin1String("Other");
+ insert(PI_OSName, QLS("Other"));
#endif
QProcess git;
@@ -80,27 +90,23 @@ PlatformInfo::PlatformInfo(bool useLocal)
#else
cmd = QLS("git");
#endif
- args << QLS("log") << QLS("--max-count=1") << QLS("--pretty=%H");
+ args << QLS("log") << QLS("--max-count=1") << QLS("--pretty=%H [%an] [%ad] %s");
git.start(cmd, args);
git.waitForFinished(3000);
if (!git.exitCode())
- gitCommit = QString::fromLocal8Bit(git.readAllStandardOutput().constData()).trimmed();
+ insert(PI_GitCommit, QString::fromLocal8Bit(git.readAllStandardOutput().constData()).simplified());
else
- gitCommit = QLS("Unknown");
+ insert(PI_GitCommit, QLS("Unknown"));
}
-}
-QDataStream & operator<< (QDataStream &stream, const PlatformInfo &p)
-{
- stream << p.hostName << p.osName << p.osVersion << p.qtVersion << p.buildKey << p.gitCommit;
- return stream;
+ QByteArray gb = qgetenv("PULSE_GIT_BRANCH");
+ if (!gb.isEmpty())
+ insert(PI_PulseGitBranch, QString::fromLatin1(gb));
+ QByteArray tb = qgetenv("PULSE_TESTR_BRANCH");
+ if (!tb.isEmpty())
+ insert(PI_PulseTestrBranch, QString::fromLatin1(tb));
}
-QDataStream & operator>> (QDataStream& stream, PlatformInfo& p)
-{
- stream >> p.hostName >> p.osName >> p.osVersion >> p.qtVersion >> p.buildKey >> p.gitCommit;
- return stream;
-}
ImageItem &ImageItem::operator=(const ImageItem &other)
{
@@ -151,15 +157,15 @@ QString ImageItem::engineAsString() const
{
switch (engine) {
case Raster:
- return QLatin1String("Raster");
+ return QLS("Raster");
break;
case OpenGL:
- return QLatin1String("OpenGL");
+ return QLS("OpenGL");
break;
default:
break;
}
- return QLatin1String("Unknown");
+ return QLS("Unknown");
}
QString ImageItem::formatAsString() const
@@ -184,8 +190,8 @@ QString ImageItem::formatAsString() const
"ARGB4444-Premult"
};
if (renderFormat < 0 || renderFormat >= numFormats)
- return QLatin1String("UnknownFormat");
- return QLatin1String(formatNames[renderFormat]);
+ return QLS("UnknownFormat");
+ return QLS(formatNames[renderFormat]);
}
QDataStream & operator<< (QDataStream &stream, const ImageItem &ii)
@@ -223,7 +229,7 @@ bool BaselineProtocol::connect()
socket.connectToHost(serverName, ServerPort);
if (!socket.waitForConnected(Timeout)) {
- errMsg += QLatin1String("TCP connectToHost failed. Host:") + serverName + QLatin1String(" port:") + QString::number(ServerPort);
+ errMsg += QLS("TCP connectToHost failed. Host:") + serverName + QLS(" port:") + QString::number(ServerPort);
return false;
}
@@ -232,13 +238,13 @@ bool BaselineProtocol::connect()
QDataStream ds(&block, QIODevice::ReadWrite);
ds << pi;
if (!sendBlock(AcceptPlatformInfo, block)) {
- errMsg += QLatin1String("Failed to send data to server.");
+ errMsg += QLS("Failed to send data to server.");
return false;
}
Command cmd = Ack;
if (!receiveBlock(&cmd, &block) || cmd != Ack) {
- errMsg += QLatin1String("Failed to get response from server.");
+ errMsg += QLS("Failed to get response from server.");
return false;
}
@@ -258,6 +264,7 @@ bool BaselineProtocol::acceptConnection(PlatformInfo *pi)
if (pi) {
QDataStream ds(block);
ds >> *pi;
+ pi->insert(PI_HostAddress, socket.peerAddress().toString());
}
if (!sendBlock(Ack, QByteArray()))
@@ -307,7 +314,7 @@ bool BaselineProtocol::sendItem(Command cmd, const ImageItem &item)
QDataStream ds(&buf);
ds << item;
if (!sendBlock(cmd, buf.data())) {
- errMsg.prepend(QLatin1String("Failed to submit image to server. "));
+ errMsg.prepend(QLS("Failed to submit image to server. "));
return false;
}
return true;
@@ -334,9 +341,8 @@ bool BaselineProtocol::receiveBlock(Command *cmd, QByteArray *block)
quint16 rcvProtocolVersion, rcvCmd;
ds >> rcvProtocolVersion >> rcvCmd;
if (rcvProtocolVersion != ProtocolVersion) {
- // TBD: More resilient handling of this case; the server should accept client's version
- errMsg = QLatin1String("Server protocol version mismatch, received:") + QString::number(rcvProtocolVersion);
-
+ errMsg = QLS("Baseline protocol version mismatch, received:") + QString::number(rcvProtocolVersion)
+ + QLS(" expected:") + QString::number(ProtocolVersion);
return false;
}
if (cmd)
@@ -368,6 +374,6 @@ QString BaselineProtocol::errorMessage()
{
QString ret = errMsg;
if (socket.error() >= 0)
- ret += QLatin1String(" Socket state: ") + socket.errorString();
+ ret += QLS(" Socket state: ") + socket.errorString();
return ret;
}
diff --git a/tests/arthur/common/baselineprotocol.h b/tests/arthur/common/baselineprotocol.h
index a0ae028..162a19f 100644
--- a/tests/arthur/common/baselineprotocol.h
+++ b/tests/arthur/common/baselineprotocol.h
@@ -45,25 +45,29 @@
#include <QTcpSocket>
#include <QImage>
#include <QVector>
+#include <QMap>
#define QLS QLatin1String
#define QLC QLatin1Char
#define FileFormat "png"
-struct PlatformInfo
+const QString PI_HostName(QLS("HostName"));
+const QString PI_HostAddress(QLS("HostAddress"));
+const QString PI_OSName(QLS("OSName"));
+const QString PI_OSVersion(QLS("OSVersion"));
+const QString PI_QtVersion(QLS("QtVersion"));
+const QString PI_BuildKey(QLS("BuildKey"));
+const QString PI_GitCommit(QLS("GitCommit"));
+const QString PI_QMakeSpec(QLS("QMakeSpec"));
+const QString PI_PulseGitBranch(QLS("PulseGitBranch"));
+const QString PI_PulseTestrBranch(QLS("PulseTestrBranch"));
+
+class PlatformInfo : public QMap<QString, QString>
{
+public:
PlatformInfo(bool useLocal = false);
-
- QString hostName;
- QString osName;
- int osVersion;
- QString qtVersion;
- QString buildKey;
- QString gitCommit;
};
-QDataStream & operator<< (QDataStream &stream, const PlatformInfo &p);
-QDataStream & operator>> (QDataStream& stream, PlatformInfo& p);
struct ImageItem
{
@@ -117,7 +121,7 @@ public:
// Important constants here
// ****************************************************
enum Constant {
- ProtocolVersion = 1,
+ ProtocolVersion = 2,
ServerPort = 54129,
Timeout = 10000
};
diff --git a/tests/auto/lancelot/lancelot.pro b/tests/auto/lancelot/lancelot.pro
index 3859a55..6498f6c 100644
--- a/tests/auto/lancelot/lancelot.pro
+++ b/tests/auto/lancelot/lancelot.pro
@@ -8,5 +8,6 @@ HEADERS += $$QT_SOURCE_TREE/tests/arthur/common/paintcommands.h
RESOURCES += $$QT_SOURCE_TREE/tests/arthur/common/images.qrc
include($$QT_SOURCE_TREE/tests/arthur/common/baselineprotocol.pri)
+DEFINES += QMAKESPEC=\\\"$$QMAKESPEC\\\"
!symbian:!wince*:DEFINES += SRCDIR=\\\"$$PWD\\\"