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:
authorHannah von Reth <hannah.vonreth@owncloud.com>2020-03-26 16:24:58 +0300
committerHannah von Reth <hannah.vonreth@owncloud.com>2020-03-26 16:24:58 +0300
commit4b28fd60b69087167409c6da453f09477f1cea48 (patch)
tree890f92e2c2eaff4d8097b321f4907dc3e0ef040d /test
parent41182605f0d8760d8d2573dcee2ed1b36be8bafe (diff)
parent242e4e1d702ca8a74ffeb6e266c5dd8f7088e46c (diff)
Merge remote-tracking branch 'origin/2.6'
Diffstat (limited to 'test')
-rw-r--r--test/syncenginetestutils.h4
-rw-r--r--test/testsyncfilestatustracker.cpp44
-rw-r--r--test/testsyncmove.cpp77
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)