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

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Goffart <olivier@woboq.com>2017-01-25 21:19:48 +0300
committerGitHub <noreply@github.com>2017-01-25 21:19:48 +0300
commit268fc97a714ad1be18e6727c2f0ca8d2b9b755df (patch)
treeac32aae9aa33cc2448978ebc33a315007374ede1 /test/syncenginetestutils.h
parentde2458d89233fbd0ec0524fda1c0ddd0ee134814 (diff)
parent8a70d22af778c84dc3aece2a1e698b9da3ef5fea (diff)
Merge pull request #5480 from owncloud/chunking-ng-cleanup
Chunking ng cleanup
Diffstat (limited to 'test/syncenginetestutils.h')
-rw-r--r--test/syncenginetestutils.h45
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; }
};