diff options
author | Hannah von Reth <hannah.vonreth@owncloud.com> | 2020-03-26 16:24:58 +0300 |
---|---|---|
committer | Hannah von Reth <hannah.vonreth@owncloud.com> | 2020-03-26 16:24:58 +0300 |
commit | 4b28fd60b69087167409c6da453f09477f1cea48 (patch) | |
tree | 890f92e2c2eaff4d8097b321f4907dc3e0ef040d /test | |
parent | 41182605f0d8760d8d2573dcee2ed1b36be8bafe (diff) | |
parent | 242e4e1d702ca8a74ffeb6e266c5dd8f7088e46c (diff) |
Merge remote-tracking branch 'origin/2.6'
Diffstat (limited to 'test')
-rw-r--r-- | test/syncenginetestutils.h | 4 | ||||
-rw-r--r-- | test/testsyncfilestatustracker.cpp | 44 | ||||
-rw-r--r-- | test/testsyncmove.cpp | 77 |
3 files changed, 125 insertions, 0 deletions
diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index 3c154ca76..def9d785a 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -307,6 +307,10 @@ public: && children == other.children; } + bool operator!=(const FileInfo &other) const { + return !operator==(other); + } + QString path() const { return (parentPath.isEmpty() ? QString() : (parentPath + '/')) + name; } diff --git a/test/testsyncfilestatustracker.cpp b/test/testsyncfilestatustracker.cpp index 29143be6b..f1b27447c 100644 --- a/test/testsyncfilestatustracker.cpp +++ b/test/testsyncfilestatustracker.cpp @@ -465,6 +465,50 @@ private slots: QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); } + + void renameError() { + FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()}; + fakeFolder.serverErrorPaths().append("A/a1"); + fakeFolder.localModifier().rename("A/a1", "A/a1m"); + fakeFolder.localModifier().rename("B/b1", "B/b1m"); + StatusPushSpy statusSpy(fakeFolder.syncEngine()); + + fakeFolder.scheduleSync(); + fakeFolder.execUntilBeforePropagation(); + + verifyThatPushMatchesPull(fakeFolder, statusSpy); + + QCOMPARE(statusSpy.statusOf("A/a1m"), SyncFileStatus(SyncFileStatus::StatusSync)); + QCOMPARE(statusSpy.statusOf("A/a1"), statusSpy.statusOf("A/a1notexist")); + QCOMPARE(statusSpy.statusOf("A"), SyncFileStatus(SyncFileStatus::StatusSync)); + QCOMPARE(statusSpy.statusOf(""), SyncFileStatus(SyncFileStatus::StatusSync)); + QCOMPARE(statusSpy.statusOf("B"), SyncFileStatus(SyncFileStatus::StatusSync)); + QCOMPARE(statusSpy.statusOf("B/b1m"), SyncFileStatus(SyncFileStatus::StatusSync)); + + fakeFolder.execUntilFinished(); + verifyThatPushMatchesPull(fakeFolder, statusSpy); + QCOMPARE(statusSpy.statusOf("A/a1m"), SyncFileStatus(SyncFileStatus::StatusError)); + QCOMPARE(statusSpy.statusOf("A/a1"), statusSpy.statusOf("A/a1notexist")); + QCOMPARE(statusSpy.statusOf("A"), SyncFileStatus(SyncFileStatus::StatusWarning)); + QCOMPARE(statusSpy.statusOf(""), SyncFileStatus(SyncFileStatus::StatusWarning)); + QCOMPARE(statusSpy.statusOf("B"), SyncFileStatus(SyncFileStatus::StatusUpToDate)); + QCOMPARE(statusSpy.statusOf("B/b1m"), SyncFileStatus(SyncFileStatus::StatusUpToDate)); + statusSpy.clear(); + + QVERIFY(!fakeFolder.syncOnce()); + verifyThatPushMatchesPull(fakeFolder, statusSpy); + statusSpy.clear(); + QVERIFY(!fakeFolder.syncOnce()); + verifyThatPushMatchesPull(fakeFolder, statusSpy); + QCOMPARE(statusSpy.statusOf("A/a1m"), SyncFileStatus(SyncFileStatus::StatusError)); + QCOMPARE(statusSpy.statusOf("A/a1"), statusSpy.statusOf("A/a1notexist")); + QCOMPARE(statusSpy.statusOf("A"), SyncFileStatus(SyncFileStatus::StatusWarning)); + QCOMPARE(statusSpy.statusOf(""), SyncFileStatus(SyncFileStatus::StatusWarning)); + QCOMPARE(statusSpy.statusOf("B"), SyncFileStatus(SyncFileStatus::StatusNone)); + QCOMPARE(statusSpy.statusOf("B/b1m"), SyncFileStatus(SyncFileStatus::StatusNone)); + statusSpy.clear(); + } + }; QTEST_GUILESS_MAIN(TestSyncFileStatusTracker) diff --git a/test/testsyncmove.cpp b/test/testsyncmove.cpp index 9a503be29..9476434fb 100644 --- a/test/testsyncmove.cpp +++ b/test/testsyncmove.cpp @@ -857,6 +857,83 @@ private slots: QVERIFY(fakeFolder.syncOnce()); QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); } + + void testMovedWithError_data() + { + QTest::addColumn<Vfs::Mode>("vfsMode"); + + QTest::newRow("Vfs::Off") << Vfs::Off; + QTest::newRow("Vfs::WithSuffix") << Vfs::WithSuffix; +#ifdef Q_OS_WIN32 + if (isVfsPluginAvailable(Vfs::WindowsCfApi)) + { + QTest::newRow("Vfs::WindowsCfApi") << Vfs::WindowsCfApi; + } else { + QWARN("Skipping Vfs::WindowsCfApi"); + } + +#endif + } + + void testMovedWithError() + { + QFETCH(Vfs::Mode, vfsMode); + const auto getName = [vfsMode] (const QString &s) + { + if (vfsMode == Vfs::WithSuffix) + { + return QStringLiteral("%1" APPLICATION_DOTVIRTUALFILE_SUFFIX).arg(s); + } + return s; + }; + const QString src = "folder/folderA/file.txt"; + const QString dest = "folder/folderB/file.txt"; + FakeFolder fakeFolder{ FileInfo{ QString(), { FileInfo{ QStringLiteral("folder"), { FileInfo{ QStringLiteral("folderA"), { { QStringLiteral("file.txt"), 400 } } }, QStringLiteral("folderB") } } } } }; + + QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); + + if (vfsMode != Vfs::Off) + { + auto vfs = QSharedPointer<Vfs>(createVfsFromPlugin(vfsMode).release()); + QVERIFY(vfs); + fakeFolder.switchToVfs(vfs); + fakeFolder.syncJournal().internalPinStates().setForPath("", PinState::OnlineOnly); + + // make files virtual + fakeFolder.syncOnce(); + } + + + fakeFolder.serverErrorPaths().append(src, 403); + fakeFolder.localModifier().rename(getName(src), getName(dest)); + QVERIFY(!fakeFolder.currentLocalState().find(getName(src))); + QVERIFY(fakeFolder.currentLocalState().find(getName(dest))); + QVERIFY(fakeFolder.currentRemoteState().find(src)); + QVERIFY(!fakeFolder.currentRemoteState().find(dest)); + + // sync1 file gets detected as error, instruction is still NEW_FILE + fakeFolder.syncOnce(); + + // sync2 file is in error state, checkErrorBlacklisting sets instruction to IGNORED + fakeFolder.syncOnce(); + + if (vfsMode != Vfs::Off) + { + fakeFolder.syncJournal().internalPinStates().setForPath("", PinState::AlwaysLocal); + fakeFolder.syncOnce(); + } + + QVERIFY(!fakeFolder.currentLocalState().find(src)); + QVERIFY(fakeFolder.currentLocalState().find(getName(dest))); + if (vfsMode == Vfs::WithSuffix) + { + // the placeholder was not restored as it is still in error state + QVERIFY(!fakeFolder.currentLocalState().find(dest)); + } + QVERIFY(fakeFolder.currentRemoteState().find(src)); + QVERIFY(!fakeFolder.currentRemoteState().find(dest)); + } + }; QTEST_GUILESS_MAIN(TestSyncMove) |