diff options
author | aavit <qt-info@nokia.com> | 2010-09-02 12:48:04 (GMT) |
---|---|---|
committer | aavit <qt-info@nokia.com> | 2010-09-02 12:48:04 (GMT) |
commit | 38f0e9dbf41ebc8707398279ccb7038d3927c2d8 (patch) | |
tree | 363088fb3e7cfa439f7fb86a6c7f9fe7259df021 /tests/arthur/common | |
parent | a2332612d9336c1518805eb04857f7cacbfb1fd8 (diff) | |
download | Qt-38f0e9dbf41ebc8707398279ccb7038d3927c2d8.zip Qt-38f0e9dbf41ebc8707398279ccb7038d3927c2d8.tar.gz Qt-38f0e9dbf41ebc8707398279ccb7038d3927c2d8.tar.bz2 |
Rewrite protocol (ImageItem/ImageItemList)
Not finished, but core functionality is in working state.
Diffstat (limited to 'tests/arthur/common')
-rw-r--r-- | tests/arthur/common/baselineprotocol.cpp | 78 | ||||
-rw-r--r-- | tests/arthur/common/baselineprotocol.h | 63 |
2 files changed, 123 insertions, 18 deletions
diff --git a/tests/arthur/common/baselineprotocol.cpp b/tests/arthur/common/baselineprotocol.cpp index 83b7adc..e5545a9 100644 --- a/tests/arthur/common/baselineprotocol.cpp +++ b/tests/arthur/common/baselineprotocol.cpp @@ -26,6 +26,42 @@ QDataStream & operator>> (QDataStream& stream, PlatformInfo& pinfo) return stream; } +ImageItem &ImageItem::operator=(const ImageItem &other) +{ + scriptName = other.scriptName; + scriptChecksum = other.scriptChecksum; + status = other.status; + renderFormat = other.renderFormat; + engine = other.engine; + image = other.image; + imageChecksum = other.imageChecksum; + return *this; +} + +quint64 ImageItem::computeChecksum(const QImage &image) +{ + //### Just fake it for now + return qChecksum((const char *)image.constScanLine(50), image.bytesPerLine()); +} + +QDataStream & operator<< (QDataStream &stream, const ImageItem &ii) +{ + stream << ii.scriptName << ii.scriptChecksum << quint8(ii.status) << quint8(ii.renderFormat) + << quint8(ii.engine) << ii.image << ii.imageChecksum; + return stream; +} + +QDataStream & operator>> (QDataStream &stream, ImageItem &ii) +{ + quint8 encFormat, encStatus, encEngine; + stream >> ii.scriptName >> ii.scriptChecksum >> encStatus >> encFormat + >> encEngine >> ii.image >> ii.imageChecksum; + ii.renderFormat = QImage::Format(encFormat); + ii.status = ImageItem::ItemStatus(encStatus); + ii.engine = ImageItem::GraphicsEngine(encEngine); + return stream; +} + BaselineProtocol::~BaselineProtocol() { socket.close(); @@ -86,8 +122,28 @@ bool BaselineProtocol::acceptConnection(PlatformInfo *pi) } +bool BaselineProtocol::requestBaselineChecksums(ImageItemList *itemList) +{ + errMsg.clear(); + if (!itemList) + return false; + QByteArray block; + QDataStream ds(&block, QIODevice::ReadWrite); + ds << *itemList; + if (!sendBlock(RequestBaselineChecksums, block)) + return false; + Command cmd; + if (!receiveBlock(&cmd, &block)) + return false; + ds.device()->seek(0); + ds >> *itemList; + return true; +} + + bool BaselineProtocol::requestBaseline(const QString &caseId, Command *response, QImage *baseline) { + //### TBD: rewrite to use ImageItem errMsg.clear(); if (!sendBlock(RequestBaseline, caseId.toLatin1())) return false; @@ -115,29 +171,31 @@ bool BaselineProtocol::requestBaseline(const QString &caseId, Command *response, } -bool BaselineProtocol::submitNewBaseline(const QString &caseId, const QImage &baseline) +bool BaselineProtocol::submitNewBaseline(const ImageItem &item) +{ + return sendItem(AcceptNewBaseline, item); +} + + +bool BaselineProtocol::sendItem(Command cmd, const ImageItem &item) { errMsg.clear(); QBuffer buf; buf.open(QIODevice::WriteOnly); QDataStream ds(&buf); - ds << caseId.toLatin1(); - if (!baseline.save(&buf, FileFormat)) { - errMsg = QLatin1String("Failed to convert new baseline image to ") + QLatin1String(FileFormat); - return false; - } - if (!sendBlock(AcceptNewBaseline, buf.data())) { - errMsg.prepend(QLatin1String("Failed to submit new baseline to server. ")); + ds << item; + if (!sendBlock(cmd, buf.data())) { + errMsg.prepend(QLatin1String("Failed to submit image to server. ")); return false; } - Command cmd; - receiveBlock(&cmd, 0); // Just wait for the pong; ignore reply contents + receiveBlock(&cmd, 0); // For now, Just wait for the pong; ignore reply contents return true; } bool BaselineProtocol::submitMismatch(const QString &caseId, const QImage &mismatch, QByteArray *failMsg) { + //### TBD: rewrite to use ImageItem errMsg.clear(); QBuffer buf; buf.open(QIODevice::WriteOnly); diff --git a/tests/arthur/common/baselineprotocol.h b/tests/arthur/common/baselineprotocol.h index 8740413..b16a55b 100644 --- a/tests/arthur/common/baselineprotocol.h +++ b/tests/arthur/common/baselineprotocol.h @@ -3,19 +3,61 @@ #include <QDataStream> #include <QTcpSocket> +#include <QImage> +#include <QVector> #define FileFormat "png" struct PlatformInfo { -public: PlatformInfo(bool useLocal = false); QString buildKey; QString qtVersion; QString hostname; }; +QDataStream & operator<< (QDataStream &stream, const PlatformInfo &pinfo); +QDataStream & operator>> (QDataStream& stream, PlatformInfo& pinfo); +struct ImageItem +{ +public: + ImageItem() + : status(Ok), renderFormat(QImage::Format_Invalid), engine(Raster), imageChecksum(0), scriptChecksum(0) + {} + ImageItem(const ImageItem &other) + { *this = other; } + ~ImageItem() + {} + ImageItem &operator=(const ImageItem &other); + static quint64 computeChecksum(const QImage& image); + + enum ItemStatus { + Ok = 0, + BaselineNotFound = 1, + IgnoreItem = 2 + }; + + enum GraphicsEngine { + Raster = 0, + OpenGL = 1 + }; + + QString scriptName; + ItemStatus status; + QImage::Format renderFormat; + GraphicsEngine engine; + QImage image; + quint64 imageChecksum; + // tbd: add diffscore + quint16 scriptChecksum; +}; +QDataStream & operator<< (QDataStream &stream, const ImageItem &ii); +QDataStream & operator>> (QDataStream& stream, ImageItem& ii); + +Q_DECLARE_METATYPE(ImageItem); + +typedef QVector<ImageItem> ImageItemList; class BaselineProtocol @@ -30,18 +72,21 @@ public: enum Constant { ProtocolVersion = 1, ServerPort = 54129, - Timeout = 100000 + Timeout = 10000 }; enum Command { UnknownError = 0, // Queries AcceptPlatformInfo = 1, - RequestBaseline = 2, - AcceptNewBaseline = 3, - AcceptMismatch = 4, + RequestBaselineChecksums = 2, + RequestBaseline = 3, + AcceptNewBaseline = 4, + AcceptMismatch = 5, // Responses Ack = 128, + + //#### remove these: AcceptBaseline = 129, BaselineNotPresent = 130, IgnoreCase = 131 @@ -49,8 +94,9 @@ public: // For client: bool connect(); + bool requestBaselineChecksums(ImageItemList *itemList); bool requestBaseline(const QString &caseId, Command *response, QImage *baseline); - bool submitNewBaseline(const QString &caseId, const QImage &baseline); + bool submitNewBaseline(const ImageItem &item); bool submitMismatch(const QString &caseId, const QImage &mismatch, QByteArray *failMsg); // For server: @@ -59,6 +105,8 @@ public: QString errorMessage(); private: + bool sendItem(Command cmd, const ImageItem &item); + bool sendBlock(Command cmd, const QByteArray &block); bool receiveBlock(Command *cmd, QByteArray *block); QString errMsg; @@ -69,8 +117,7 @@ private: }; -QDataStream & operator<< (QDataStream &stream, const PlatformInfo &pinfo); -QDataStream & operator>> (QDataStream& stream, PlatformInfo& pinfo); + #endif // BASELINEPROTOCOL_H |