diff options
author | Christian Kamm <mail@ckamm.de> | 2017-07-12 10:58:15 +0300 |
---|---|---|
committer | ckamm <mail@ckamm.de> | 2017-09-15 10:27:07 +0300 |
commit | 3a55ff2119f47cb84196d964e3eadc7cc7797989 (patch) | |
tree | 0e583cf7455d9c116d31ca5e6287d5e37c5f3b9a /test/testsyncengine.cpp | |
parent | b5b055e1ae2e2f08f99403811e9e1996cf0805e5 (diff) |
PropagateUpload: Model of remote quota, avoid some uploads #5537
When we see a 507 error, assume that quota is < uploaded size.
Diffstat (limited to 'test/testsyncengine.cpp')
-rw-r--r-- | test/testsyncengine.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index cfac432f9..716bc5329 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -465,6 +465,54 @@ private slots: QVERIFY(fakeFolder.syncOnce()); } + + /** + * Checks whether subsequent large uploads are skipped after a 507 error + */ + void testInsufficientRemoteStorage() + { + FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() }; + + // Disable parallel uploads + SyncOptions syncOptions; + syncOptions._parallelNetworkJobs = false; + fakeFolder.syncEngine().setSyncOptions(syncOptions); + + // Produce an error based on upload size + int remoteQuota = 1000; + int n507 = 0, nPUT = 0; + auto parent = new QObject; + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request) -> QNetworkReply * { + if (op == QNetworkAccessManager::PutOperation) { + nPUT++; + if (request.rawHeader("OC-Total-Length").toInt() > remoteQuota) { + n507++; + return new FakeErrorReply(op, request, parent, 507); + } + } + return nullptr; + }); + + fakeFolder.localModifier().insert("A/big", 800); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(nPUT, 1); + QCOMPARE(n507, 0); + + nPUT = 0; + fakeFolder.localModifier().insert("A/big1", 500); // ok + fakeFolder.localModifier().insert("A/big2", 1200); // 507 (quota guess now 1199) + fakeFolder.localModifier().insert("A/big3", 1200); // skipped + fakeFolder.localModifier().insert("A/big4", 1500); // skipped + fakeFolder.localModifier().insert("A/big5", 1100); // 507 (quota guess now 1099) + fakeFolder.localModifier().insert("A/big6", 900); // ok (quota guess now 199) + fakeFolder.localModifier().insert("A/big7", 200); // skipped + fakeFolder.localModifier().insert("A/big8", 199); // ok (quota guess now 0) + + fakeFolder.localModifier().insert("B/big8", 1150); // 507 + QVERIFY(!fakeFolder.syncOnce()); + QCOMPARE(nPUT, 6); + QCOMPARE(n507, 3); + } }; QTEST_GUILESS_MAIN(TestSyncEngine) |