testuploadreset.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 <common/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 = Utility::qDateTimeToTime_t(modTime);
  31. uploadInfo._size = size;
  32. fakeFolder.syncEngine().journal()->setUploadInfo("A/a0", uploadInfo);
  33. fakeFolder.uploadState().mkdir("1");
  34. fakeFolder.serverErrorPaths().append("1/.file");
  35. QVERIFY(!fakeFolder.syncOnce());
  36. uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
  37. QCOMPARE(uploadInfo._errorCount, 1);
  38. QCOMPARE(uploadInfo._transferid, 1U);
  39. fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
  40. QVERIFY(!fakeFolder.syncOnce());
  41. uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
  42. QCOMPARE(uploadInfo._errorCount, 2);
  43. QCOMPARE(uploadInfo._transferid, 1U);
  44. fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
  45. QVERIFY(!fakeFolder.syncOnce());
  46. uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
  47. QCOMPARE(uploadInfo._errorCount, 3);
  48. QCOMPARE(uploadInfo._transferid, 1U);
  49. fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
  50. QVERIFY(!fakeFolder.syncOnce());
  51. uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
  52. QCOMPARE(uploadInfo._errorCount, 0);
  53. QCOMPARE(uploadInfo._transferid, 0U);
  54. QVERIFY(!uploadInfo._valid);
  55. }
  56. };
  57. QTEST_GUILESS_MAIN(TestUploadReset)
  58. #include "testuploadreset.moc"