diff options
-rw-r--r-- | test/syncenginetestutils.h | 38 | ||||
-rw-r--r-- | test/testchunkingng.cpp | 10 | ||||
-rw-r--r-- | test/testoauth.cpp | 2 | ||||
-rw-r--r-- | test/testsyncengine.cpp | 6 | ||||
-rw-r--r-- | test/testsyncmove.cpp | 6 |
5 files changed, 43 insertions, 19 deletions
diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index c9f4e088a..9122040be 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -441,7 +441,8 @@ public: QMetaObject::invokeMethod(this, "respond", Qt::QueuedConnection); } - Q_INVOKABLE void respond() { + Q_INVOKABLE virtual void respond() + { emit uploadProgress(fileInfo->size, fileInfo->size); setRawHeader("OC-ETag", fileInfo->etag.toLatin1()); setRawHeader("ETag", fileInfo->etag.toLatin1()); @@ -615,7 +616,7 @@ class FakeChunkMoveReply : public QNetworkReply public: FakeChunkMoveReply(FileInfo &uploadsFileInfo, FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, - quint64 delayMs, QObject *parent) + QObject *parent) : QNetworkReply{ parent } { setRequest(request); @@ -675,10 +676,11 @@ public: fileInfo->lastModified = OCC::Utility::qDateTimeFromTime_t(request.rawHeader("X-OC-Mtime").toLongLong()); remoteRootFileInfo.find(fileName, /*invalidate_etags=*/true); - QTimer::singleShot(delayMs, this, &FakeChunkMoveReply::respond); + QTimer::singleShot(0, this, &FakeChunkMoveReply::respond); } - Q_INVOKABLE void respond() { + Q_INVOKABLE virtual void respond() + { setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 201); setRawHeader("OC-ETag", fileInfo->etag.toLatin1()); setRawHeader("ETag", fileInfo->etag.toLatin1()); @@ -744,10 +746,32 @@ public: qint64 readData(char *, qint64) override { return 0; } }; +// A delayed reply +template <class OriginalReply> +class DelayedReply : public OriginalReply +{ +public: + template <typename... Args> + explicit DelayedReply(quint64 delayMS, Args &&... args) + : OriginalReply(std::forward<Args>(args)...) + , _delayMs(delayMS) + { + } + quint64 _delayMs; + + void respond() override + { + QTimer::singleShot(_delayMs, static_cast<OriginalReply *>(this), [this] { + // Explicit call to bases's respond(); + this->OriginalReply::respond(); + }); + } +}; + class FakeQNAM : public QNetworkAccessManager { public: - using Override = std::function<QNetworkReply *(Operation, const QNetworkRequest &)>; + using Override = std::function<QNetworkReply *(Operation, const QNetworkRequest &, QIODevice *)>; private: FileInfo _remoteRootFileInfo; @@ -770,7 +794,7 @@ protected: QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0) { if (_override) { - if (auto reply = _override(op, request)) + if (auto reply = _override(op, request, outgoingData)) return reply; } const QString fileName = getFilePathFromUrl(request.url()); @@ -796,7 +820,7 @@ protected: else if (verb == QLatin1String("MOVE") && !isUpload) return new FakeMoveReply{info, op, request, this}; else if (verb == QLatin1String("MOVE") && isUpload) - return new FakeChunkMoveReply{ info, _remoteRootFileInfo, op, request, 0, this }; + return new FakeChunkMoveReply{ info, _remoteRootFileInfo, op, request, this }; else { qDebug() << verb << outgoingData; Q_UNREACHABLE(); diff --git a/test/testchunkingng.cpp b/test/testchunkingng.cpp index 78003b295..a61bdc15d 100644 --- a/test/testchunkingng.cpp +++ b/test/testchunkingng.cpp @@ -79,7 +79,7 @@ private slots: // Add a fake file to make sure it gets deleted fakeFolder.uploadState().children.first().insert("10000", size); - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request) -> QNetworkReply * { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (op == QNetworkAccessManager::PutOperation) { // Test that we properly resuming and are not sending past data again. Q_ASSERT(request.rawHeader("OC-Chunk-Offset").toULongLong() >= uploadedSize); @@ -109,11 +109,11 @@ private slots: QByteArray moveChecksumHeader; int nGET = 0; int responseDelay = 10000; // bigger than abort-wait timeout - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request) -> QNetworkReply * { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (request.attribute(QNetworkRequest::CustomVerbAttribute) == "MOVE") { QTimer::singleShot(50, parent, [&]() { fakeFolder.syncEngine().abort(); }); moveChecksumHeader = request.rawHeader("OC-Checksum"); - return new FakeChunkMoveReply(fakeFolder.uploadState(), fakeFolder.remoteModifier(), op, request, responseDelay, parent); + return new DelayedReply<FakeChunkMoveReply>(responseDelay, fakeFolder.uploadState(), fakeFolder.remoteModifier(), op, request, parent); } else if (op == QNetworkAccessManager::GetOperation) { nGET++; } @@ -203,11 +203,11 @@ private slots: QByteArray moveChecksumHeader; int nGET = 0; int responseDelay = 2000; // smaller than abort-wait timeout - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request) -> QNetworkReply * { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (request.attribute(QNetworkRequest::CustomVerbAttribute) == "MOVE") { QTimer::singleShot(50, parent, [&]() { fakeFolder.syncEngine().abort(); }); moveChecksumHeader = request.rawHeader("OC-Checksum"); - return new FakeChunkMoveReply(fakeFolder.uploadState(), fakeFolder.remoteModifier(), op, request, responseDelay, parent); + return new DelayedReply<FakeChunkMoveReply>(responseDelay, fakeFolder.uploadState(), fakeFolder.remoteModifier(), op, request, parent); } else if (op == QNetworkAccessManager::GetOperation) { nGET++; } diff --git a/test/testoauth.cpp b/test/testoauth.cpp index 76dbb3bc5..49eb3ce6c 100644 --- a/test/testoauth.cpp +++ b/test/testoauth.cpp @@ -111,7 +111,7 @@ public: account->setUrl(sOAuthTestServer); account->setCredentials(new FakeCredentials{fakeQnam}); fakeQnam->setParent(this); - fakeQnam->setOverride([this] (QNetworkAccessManager::Operation op, const QNetworkRequest &req) { + fakeQnam->setOverride([this](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *) { return this->tokenReply(op, req); }); diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index e5dccd939..744835efe 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -301,7 +301,7 @@ private slots: FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() }; int nGET = 0; - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &) { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &, QIODevice *) { if (op == QNetworkAccessManager::GetOperation) ++nGET; return nullptr; @@ -431,7 +431,7 @@ private slots: int remoteQuota = 1000; int n507 = 0, nPUT = 0; auto parent = new QObject; - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request) -> QNetworkReply * { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (op == QNetworkAccessManager::PutOperation) { nPUT++; if (request.rawHeader("OC-Total-Length").toInt() > remoteQuota) { @@ -472,7 +472,7 @@ private slots: QByteArray checksumValue; QByteArray contentMd5Value; - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request) -> QNetworkReply * { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (op == QNetworkAccessManager::GetOperation) { auto reply = new FakeGetReply(fakeFolder.remoteModifier(), op, request, &parent); if (!checksumValue.isNull()) diff --git a/test/testsyncmove.cpp b/test/testsyncmove.cpp index 5049b019a..67d3c22be 100644 --- a/test/testsyncmove.cpp +++ b/test/testsyncmove.cpp @@ -158,7 +158,7 @@ private slots: int nPUT = 0; int nDELETE = 0; - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &) { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &, QIODevice *) { if (op == QNetworkAccessManager::PutOperation) ++nPUT; if (op == QNetworkAccessManager::DeleteOperation) @@ -268,7 +268,7 @@ private slots: QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); int nGET = 0; - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &) { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &, QIODevice *) { if (op == QNetworkAccessManager::GetOperation) ++nGET; return nullptr; @@ -313,7 +313,7 @@ private slots: int nPUT = 0; int nMOVE = 0; int nDELETE = 0; - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &req) { + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *) { if (op == QNetworkAccessManager::GetOperation) ++nGET; if (op == QNetworkAccessManager::PutOperation) |