|
|
@@ -1157,6 +1157,93 @@ private slots:
|
|
|
|
|
|
QVERIFY(!fakeFolder.syncOnce());
|
|
|
}
|
|
|
+
|
|
|
+ void testInvalidMtimeRecoveryAtStart()
|
|
|
+ {
|
|
|
+ constexpr auto INVALID_MTIME = 0;
|
|
|
+ constexpr auto CURRENT_MTIME = 1646057277;
|
|
|
+
|
|
|
+ FakeFolder fakeFolder{FileInfo{}};
|
|
|
+ QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
|
|
|
+
|
|
|
+ const QString fooFileRootFolder("foo");
|
|
|
+ const QString barFileRootFolder("bar");
|
|
|
+ const QString fooFileSubFolder("subfolder/foo");
|
|
|
+ const QString barFileSubFolder("subfolder/bar");
|
|
|
+ const QString fooFileAaaSubFolder("aaa/subfolder/foo");
|
|
|
+ const QString barFileAaaSubFolder("aaa/subfolder/bar");
|
|
|
+
|
|
|
+ fakeFolder.remoteModifier().insert(fooFileRootFolder);
|
|
|
+ fakeFolder.remoteModifier().insert(barFileRootFolder);
|
|
|
+ fakeFolder.remoteModifier().mkdir(QStringLiteral("subfolder"));
|
|
|
+ fakeFolder.remoteModifier().insert(fooFileSubFolder);
|
|
|
+ fakeFolder.remoteModifier().insert(barFileSubFolder);
|
|
|
+ fakeFolder.remoteModifier().mkdir(QStringLiteral("aaa"));
|
|
|
+ fakeFolder.remoteModifier().mkdir(QStringLiteral("aaa/subfolder"));
|
|
|
+ fakeFolder.remoteModifier().insert(fooFileAaaSubFolder);
|
|
|
+ fakeFolder.remoteModifier().setModTime(fooFileAaaSubFolder, QDateTime::fromSecsSinceEpoch(INVALID_MTIME));
|
|
|
+ fakeFolder.remoteModifier().insert(barFileAaaSubFolder);
|
|
|
+ fakeFolder.remoteModifier().setModTime(barFileAaaSubFolder, QDateTime::fromSecsSinceEpoch(INVALID_MTIME));
|
|
|
+
|
|
|
+ QVERIFY(!fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ QVERIFY(!fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ fakeFolder.remoteModifier().setModTimeKeepEtag(fooFileAaaSubFolder, QDateTime::fromSecsSinceEpoch(CURRENT_MTIME));
|
|
|
+ fakeFolder.remoteModifier().setModTimeKeepEtag(barFileAaaSubFolder, QDateTime::fromSecsSinceEpoch(CURRENT_MTIME));
|
|
|
+
|
|
|
+ QVERIFY(fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ QVERIFY(fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ auto expectedState = fakeFolder.currentLocalState();
|
|
|
+ QCOMPARE(fakeFolder.currentRemoteState(), expectedState);
|
|
|
+ }
|
|
|
+
|
|
|
+ void testInvalidMtimeRecovery()
|
|
|
+ {
|
|
|
+ constexpr auto INVALID_MTIME = 0;
|
|
|
+ constexpr auto CURRENT_MTIME = 1646057277;
|
|
|
+
|
|
|
+ FakeFolder fakeFolder{FileInfo{}};
|
|
|
+ QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
|
|
|
+
|
|
|
+ const QString fooFileRootFolder("foo");
|
|
|
+ const QString barFileRootFolder("bar");
|
|
|
+ const QString fooFileSubFolder("subfolder/foo");
|
|
|
+ const QString barFileSubFolder("subfolder/bar");
|
|
|
+ const QString fooFileAaaSubFolder("aaa/subfolder/foo");
|
|
|
+ const QString barFileAaaSubFolder("aaa/subfolder/bar");
|
|
|
+
|
|
|
+ fakeFolder.remoteModifier().insert(fooFileRootFolder);
|
|
|
+ fakeFolder.remoteModifier().insert(barFileRootFolder);
|
|
|
+ fakeFolder.remoteModifier().mkdir(QStringLiteral("subfolder"));
|
|
|
+ fakeFolder.remoteModifier().insert(fooFileSubFolder);
|
|
|
+ fakeFolder.remoteModifier().insert(barFileSubFolder);
|
|
|
+ fakeFolder.remoteModifier().mkdir(QStringLiteral("aaa"));
|
|
|
+ fakeFolder.remoteModifier().mkdir(QStringLiteral("aaa/subfolder"));
|
|
|
+ fakeFolder.remoteModifier().insert(fooFileAaaSubFolder);
|
|
|
+ fakeFolder.remoteModifier().insert(barFileAaaSubFolder);
|
|
|
+
|
|
|
+ QVERIFY(fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ fakeFolder.remoteModifier().setModTime(fooFileAaaSubFolder, QDateTime::fromSecsSinceEpoch(INVALID_MTIME));
|
|
|
+ fakeFolder.remoteModifier().setModTime(barFileAaaSubFolder, QDateTime::fromSecsSinceEpoch(INVALID_MTIME));
|
|
|
+
|
|
|
+ QVERIFY(!fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ QVERIFY(!fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ fakeFolder.remoteModifier().setModTimeKeepEtag(fooFileAaaSubFolder, QDateTime::fromSecsSinceEpoch(CURRENT_MTIME));
|
|
|
+ fakeFolder.remoteModifier().setModTimeKeepEtag(barFileAaaSubFolder, QDateTime::fromSecsSinceEpoch(CURRENT_MTIME));
|
|
|
+
|
|
|
+ QVERIFY(fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ QVERIFY(fakeFolder.syncOnce());
|
|
|
+
|
|
|
+ auto expectedState = fakeFolder.currentLocalState();
|
|
|
+ QCOMPARE(fakeFolder.currentRemoteState(), expectedState);
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
QTEST_GUILESS_MAIN(TestSyncEngine)
|