| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*
- * This software is in the public domain, furnished "as is", without technical
- * support, and with no warranty, express or implied, as to its usefulness for
- * any purpose.
- *
- */
- #include <QtTest>
- #include "syncenginetestutils.h"
- #include <syncengine.h>
- using namespace OCC;
- /*
- * This test ensure that the SyncEngine::aboutToRemoveAllFiles is correctly called and that when
- * we the user choose to remove all files SyncJournalDb::clearFileTable makes works as expected
- */
- class TestAllFilesDeleted : public QObject
- {
- Q_OBJECT
- private slots:
- void testAllFilesDeletedKeep_data()
- {
- QTest::addColumn<bool>("deleteOnRemote");
- QTest::newRow("local") << false;
- QTest::newRow("remote") << true;
- }
- /*
- * In this test, all files are deleted in the client, or the server, and we simulate
- * that the users press "keep"
- */
- void testAllFilesDeletedKeep()
- {
- QFETCH(bool, deleteOnRemote);
- FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
- //Just set a blacklist so we can check it is still there. This directory does not exists but
- // that does not matter for our purposes.
- QStringList selectiveSyncBlackList = { "Q/" };
- fakeFolder.syncEngine().journal()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList,
- selectiveSyncBlackList);
- auto initialState = fakeFolder.currentLocalState();
- int aboutToRemoveAllFilesCalled = 0;
- QObject::connect(&fakeFolder.syncEngine(), &SyncEngine::aboutToRemoveAllFiles,
- [&](SyncFileItem::Direction dir, bool *cancel) {
- QCOMPARE(aboutToRemoveAllFilesCalled, 0);
- aboutToRemoveAllFilesCalled++;
- QCOMPARE(dir, deleteOnRemote ? SyncFileItem::Down : SyncFileItem::Up);
- *cancel = true;
- fakeFolder.syncEngine().journal()->clearFileTable(); // That's what Folder is doing
- });
- auto &modifier = deleteOnRemote ? fakeFolder.remoteModifier() : fakeFolder.localModifier();
- for (const auto &s : fakeFolder.currentRemoteState().children.keys())
- modifier.remove(s);
- QVERIFY(!fakeFolder.syncOnce()); // Should fail because we cancel the sync
- QCOMPARE(aboutToRemoveAllFilesCalled, 1);
- // Next sync should recover all files
- QVERIFY(fakeFolder.syncOnce());
- QCOMPARE(fakeFolder.currentLocalState(), initialState);
- QCOMPARE(fakeFolder.currentRemoteState(), initialState);
- // The selective sync blacklist should be not have been deleted.
- bool ok = true;
- QCOMPARE(fakeFolder.syncEngine().journal()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok),
- selectiveSyncBlackList);
- }
- void testAllFilesDeletedDelete_data()
- {
- testAllFilesDeletedKeep_data();
- }
- /*
- * This test is like the previous one but we simulate that the user presses "delete"
- */
- void testAllFilesDeletedDelete()
- {
- QFETCH(bool, deleteOnRemote);
- FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
- int aboutToRemoveAllFilesCalled = 0;
- QObject::connect(&fakeFolder.syncEngine(), &SyncEngine::aboutToRemoveAllFiles,
- [&](SyncFileItem::Direction dir, bool *cancel) {
- QCOMPARE(aboutToRemoveAllFilesCalled, 0);
- aboutToRemoveAllFilesCalled++;
- QCOMPARE(dir, deleteOnRemote ? SyncFileItem::Down : SyncFileItem::Up);
- *cancel = false;
- });
- auto &modifier = deleteOnRemote ? fakeFolder.remoteModifier() : fakeFolder.localModifier();
- for (const auto &s : fakeFolder.currentRemoteState().children.keys())
- modifier.remove(s);
- QVERIFY(fakeFolder.syncOnce()); // Should succeed, and all files must then be deleted
- QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
- QCOMPARE(fakeFolder.currentLocalState().children.count(), 0);
- // Try another sync to be sure.
- QVERIFY(fakeFolder.syncOnce()); // Should succeed (doing nothing)
- QCOMPARE(aboutToRemoveAllFilesCalled, 1); // should not have been called.
- QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
- QCOMPARE(fakeFolder.currentLocalState().children.count(), 0);
- }
- };
- QTEST_GUILESS_MAIN(TestAllFilesDeleted)
- #include "testallfilesdeleted.moc"
|