diff options
author | Olivier Goffart <olivier@woboq.com> | 2017-01-25 21:19:48 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-25 21:19:48 +0300 |
commit | 268fc97a714ad1be18e6727c2f0ca8d2b9b755df (patch) | |
tree | ac32aae9aa33cc2448978ebc33a315007374ede1 /test/syncenginetestutils.h | |
parent | de2458d89233fbd0ec0524fda1c0ddd0ee134814 (diff) | |
parent | 8a70d22af778c84dc3aece2a1e698b9da3ef5fea (diff) |
Merge pull request #5480 from owncloud/chunking-ng-cleanup
Chunking ng cleanup
Diffstat (limited to 'test/syncenginetestutils.h')
-rw-r--r-- | test/syncenginetestutils.h | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index c59495243..0c4bf6cae 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -315,7 +315,10 @@ public: QString fileName = getFilePathFromUrl(request.url()); Q_ASSERT(!fileName.isNull()); // for root, it should be empty const FileInfo *fileInfo = remoteRootFileInfo.find(fileName); - Q_ASSERT(fileInfo); + if (!fileInfo) { + QMetaObject::invokeMethod(this, "respond404", Qt::QueuedConnection); + return; + } QString prefix = request.url().path().left(request.url().path().size() - fileName.size()); // Don't care about the request and just return a full propfind @@ -375,6 +378,13 @@ public: emit finished(); } + Q_INVOKABLE void respond404() { + setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 404); + setError(InternalServerError, "Not Found"); + emit metaDataChanged(); + emit finished(); + } + void abort() override { } qint64 bytesAvailable() const override { return payload.size() + QIODevice::bytesAvailable(); } @@ -524,7 +534,8 @@ class FakeGetReply : public QNetworkReply Q_OBJECT public: const FileInfo *fileInfo; - QByteArray payload; + char payload; + int size; FakeGetReply(FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, QObject *parent) : QNetworkReply{parent} { @@ -540,8 +551,9 @@ public: } Q_INVOKABLE void respond() { - payload.fill(fileInfo->contentChar, fileInfo->size); - setHeader(QNetworkRequest::ContentLengthHeader, payload.size()); + payload = fileInfo->contentChar; + size = fileInfo->size; + setHeader(QNetworkRequest::ContentLengthHeader, size); setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 200); setRawHeader("OC-ETag", fileInfo->etag.toLatin1()); setRawHeader("ETag", fileInfo->etag.toLatin1()); @@ -553,12 +565,12 @@ public: } void abort() override { } - qint64 bytesAvailable() const override { return payload.size() + QIODevice::bytesAvailable(); } + qint64 bytesAvailable() const override { return size + QIODevice::bytesAvailable(); } qint64 readData(char *data, qint64 maxlen) override { - qint64 len = std::min(qint64{payload.size()}, maxlen); - strncpy(data, payload.constData(), len); - payload.remove(0, len); + qint64 len = std::min(qint64{size}, maxlen); + std::fill_n(data, len, payload); + size -= len; return len; } }; @@ -586,7 +598,7 @@ public: Q_ASSERT(sourceFolder->isDir); int count = 0; int size = 0; - char payload = '*'; + char payload = '\0'; do { QString chunkName = QString::number(count).rightJustified(8, '0'); @@ -596,6 +608,7 @@ public: Q_ASSERT(!x.isDir); Q_ASSERT(x.size > 0); // There should not be empty chunks size += x.size; + Q_ASSERT(!payload || payload == x.contentChar); payload = x.contentChar; ++count; } while(true); @@ -607,7 +620,12 @@ public: Q_ASSERT(!fileName.isEmpty()); if ((fileInfo = remoteRootFileInfo.find(fileName))) { - QCOMPARE(request.rawHeader("If"), QByteArray("<" + request.rawHeader("Destination") + "> ([\"" + fileInfo->etag.toLatin1() + "\"])")); + QVERIFY(request.hasRawHeader("If")); // The client should put this header + if (request.rawHeader("If") != QByteArray("<" + request.rawHeader("Destination") + + "> ([\"" + fileInfo->etag.toLatin1() + "\"])")) { + QMetaObject::invokeMethod(this, "respondPreconditionFailed", Qt::QueuedConnection); + return; + } fileInfo->size = size; fileInfo->contentChar = payload; } else { @@ -632,6 +650,13 @@ public: emit finished(); } + Q_INVOKABLE void respondPreconditionFailed() { + setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 412); + setError(InternalServerError, "Precondition Failed"); + emit metaDataChanged(); + emit finished(); + } + void abort() override { } qint64 readData(char *, qint64) override { return 0; } }; |