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
path: root/test
diff options
context:
space:
mode:
authorChristian Kamm <mail@ckamm.de>2019-04-10 12:07:15 +0300
committerChristian Kamm <mail@ckamm.de>2019-04-11 14:48:56 +0300
commit440c06c54a9012a115a7b39f1096e90edebb4b5a (patch)
tree98b780d4a0ac375a6d07a01de4e1b8778646dbf3 /test
parent702a494cbbd5fbdab39ee25a5d6c0c703b467d6d (diff)
Discovery: 403 and 503 on root cause error
Previously these result codes during remote discovery of the sync root would not cause an error and the discovery would get stuck. Also extends RemoteDiscovery tests to check for errors on the root item.
Diffstat (limited to 'test')
-rw-r--r--test/testremotediscovery.cpp43
1 files changed, 30 insertions, 13 deletions
diff --git a/test/testremotediscovery.cpp b/test/testremotediscovery.cpp
index 9eecb094b..27ae8de11 100644
--- a/test/testremotediscovery.cpp
+++ b/test/testremotediscovery.cpp
@@ -64,15 +64,16 @@ private slots:
QTest::addColumn<int>("errorKind");
QTest::addColumn<QString>("expectedErrorString");
- QString httpErrorMessage = "Server replied with an error while reading directory 'B' : Internal Server Fake Error";
+ QString itemErrorMessage = "Internal Server Fake Error";
- QTest::newRow("404") << 404 << httpErrorMessage;
- QTest::newRow("500") << 500 << httpErrorMessage;
- QTest::newRow("503") << 503 << httpErrorMessage;
+ QTest::newRow("403") << 403 << itemErrorMessage;
+ QTest::newRow("404") << 404 << itemErrorMessage;
+ QTest::newRow("500") << 500 << itemErrorMessage;
+ QTest::newRow("503") << 503 << itemErrorMessage;
// 200 should be an error since propfind should return 207
- QTest::newRow("200") << 200 << httpErrorMessage;
- QTest::newRow("InvalidXML") << +InvalidXML << "error while reading directory 'B' : Unknown error";
- QTest::newRow("Timeout") << +Timeout << "error while reading directory 'B' : Operation canceled";
+ QTest::newRow("200") << 200 << itemErrorMessage;
+ QTest::newRow("InvalidXML") << +InvalidXML << "Unknown error";
+ QTest::newRow("Timeout") << +Timeout << "Operation canceled";
}
@@ -81,7 +82,8 @@ private slots:
{
QFETCH(int, errorKind);
QFETCH(QString, expectedErrorString);
- bool syncSucceeds = errorKind == 503; // 503 just ignore the temporarily unavailable directory
+ // 403/503 just ignore the temporarily unavailable directory
+ bool syncSucceeds = errorKind == 503 || errorKind == 403;
FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() };
@@ -96,9 +98,11 @@ private slots:
auto oldLocalState = fakeFolder.currentLocalState();
auto oldRemoteState = fakeFolder.currentRemoteState();
+ QString errorFolder = "webdav/B";
+ QString fatalErrorPrefix = "Server replied with an error while reading directory 'B' : ";
fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *)
-> QNetworkReply *{
- if (req.attribute(QNetworkRequest::CustomVerbAttribute) == "PROPFIND" && req.url().path().endsWith("/B")) {
+ if (req.attribute(QNetworkRequest::CustomVerbAttribute) == "PROPFIND" && req.url().path().endsWith(errorFolder)) {
if (errorKind == InvalidXML) {
return new FakeBrokenXmlPropfindReply(fakeFolder.remoteModifier(), op, req, this);
} else if (errorKind == Timeout) {
@@ -113,22 +117,35 @@ private slots:
// So the test that test timeout finishes fast
QScopedValueRollback<int> setHttpTimeout(AbstractNetworkJob::httpTimeout, errorKind == Timeout ? 1 : 10000);
+ QSignalSpy completeSpy(&fakeFolder.syncEngine(), SIGNAL(itemCompleted(const SyncFileItemPtr &)));
QSignalSpy errorSpy(&fakeFolder.syncEngine(), &SyncEngine::syncError);
QCOMPARE(fakeFolder.syncOnce(), syncSucceeds);
- qDebug() << "errorSpy=" << errorSpy;
// The folder B should not have been sync'ed (and in particular not removed)
QCOMPARE(oldLocalState.children["B"], fakeFolder.currentLocalState().children["B"]);
QCOMPARE(oldRemoteState.children["B"], fakeFolder.currentRemoteState().children["B"]);
if (!syncSucceeds) {
- // Check we got the right error
- QCOMPARE(errorSpy.count(), 1);
- QVERIFY(errorSpy[0][0].toString().contains(expectedErrorString));
+ QCOMPARE(errorSpy.size(), 1);
+ QCOMPARE(errorSpy[0][0].toString(), QString(fatalErrorPrefix + expectedErrorString));
} else {
+ QCOMPARE(findItem(completeSpy, "B")->_instruction, CSYNC_INSTRUCTION_IGNORE);
+ QVERIFY(findItem(completeSpy, "B")->_errorString.contains(expectedErrorString));
+
// The other folder should have been sync'ed as the sync just ignored the faulty dir
QCOMPARE(fakeFolder.currentRemoteState().children["A"], fakeFolder.currentLocalState().children["A"]);
QCOMPARE(fakeFolder.currentRemoteState().children["C"], fakeFolder.currentLocalState().children["C"]);
+ QCOMPARE(findItem(completeSpy, "A/z1")->_instruction, CSYNC_INSTRUCTION_NEW);
}
+
+ //
+ // Check the same discovery error on the sync root
+ //
+ errorFolder = "webdav/";
+ fatalErrorPrefix = "Server replied with an error while reading directory '' : ";
+ errorSpy.clear();
+ QVERIFY(!fakeFolder.syncOnce());
+ QCOMPARE(errorSpy.size(), 1);
+ QCOMPARE(errorSpy[0][0].toString(), QString(fatalErrorPrefix + expectedErrorString));
}
void testMissingData()