Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2017-12-11 19:03:24 +0300
committerOlivier Goffart <olivier@woboq.com>2017-12-14 13:56:12 +0300
commit4369853ddb21525a9b83f83ef3d44dd838a17d8d (patch)
tree5085b13ae00287dee76632a30dacbced80c797ee /test
parentd8707297090592a8178289848adea18e3c565a04 (diff)
TestSystem: Add QIODevice in the serverOverride function, and add a DelayedReply
Preparing to add test that needs the QIODevice. Also make the DelayedReply so we can generalize the existing delay on FakeChunkMoveReply to any reply.
Diffstat (limited to 'test')
-rw-r--r--test/syncenginetestutils.h38
-rw-r--r--test/testchunkingng.cpp10
-rw-r--r--test/testoauth.cpp2
-rw-r--r--test/testsyncengine.cpp6
-rw-r--r--test/testsyncmove.cpp6
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)