testuploadreset.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * This software is in the public domain, furnished "as is", without technical
  3. * support, and with no warranty, express or implied, as to its usefulness for
  4. * any purpose.
  5. *
  6. */
  7. #include <QtTest>
  8. #include "syncenginetestutils.h"
  9. #include <syncengine.h>
  10. #include <syncjournaldb.h>
  11. using namespace OCC;
  12. class TestUploadReset : public QObject
  13. {
  14. Q_OBJECT
  15. private slots:
  16. // Verify that the chunked transfer eventually gets reset with the new chunking
  17. void testFileUploadNg() {
  18. FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
  19. fakeFolder.syncEngine().account()->setCapabilities({ { "dav", QVariantMap{
  20. {"chunking", "1.0"},
  21. {"httpErrorCodesThatResetFailingChunkedUploads", QVariantList{500} } } } });
  22. const int size = 100 * 1000 * 1000; // 100 MB
  23. fakeFolder.localModifier().insert("A/a0", size);
  24. QDateTime modTime = QDateTime::currentDateTime();
  25. fakeFolder.localModifier().setModTime("A/a0", modTime);
  26. // Create a transfer id, so we can make the final MOVE fail
  27. SyncJournalDb::UploadInfo uploadInfo;
  28. uploadInfo._transferid = 1;
  29. uploadInfo._valid = true;
  30. uploadInfo._modtime = modTime;
  31. fakeFolder.syncEngine().journal()->setUploadInfo("A/a0", uploadInfo);
  32. fakeFolder.uploadState().mkdir("1");
  33. fakeFolder.serverErrorPaths().append("1/.file");
  34. QVERIFY(!fakeFolder.syncOnce());
  35. uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
  36. QCOMPARE(uploadInfo._errorCount, 1);
  37. QCOMPARE(uploadInfo._transferid, 1);
  38. fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
  39. QVERIFY(!fakeFolder.syncOnce());
  40. uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
  41. QCOMPARE(uploadInfo._errorCount, 2);
  42. QCOMPARE(uploadInfo._transferid, 1);
  43. fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
  44. QVERIFY(!fakeFolder.syncOnce());
  45. uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
  46. QCOMPARE(uploadInfo._errorCount, 3);
  47. QCOMPARE(uploadInfo._transferid, 1);
  48. fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
  49. QVERIFY(!fakeFolder.syncOnce());
  50. uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
  51. QCOMPARE(uploadInfo._errorCount, 0);
  52. QCOMPARE(uploadInfo._transferid, 0);
  53. QVERIFY(!uploadInfo._valid);
  54. }
  55. };
  56. QTEST_GUILESS_MAIN(TestUploadReset)
  57. #include "testuploadreset.moc"