From b5a10d7829409dcb977d9d42c18eb7e48b4f1ab7 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Thu, 3 Mar 2022 16:46:14 +0100 Subject: [PATCH] add new tests dedicated for recovery scenario of wrong mtime on server Signed-off-by: Matthieu Gallien --- test/testsyncengine.cpp | 87 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index bc6125616..5131bbbc2 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -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) -- 2.30.2