/* * 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 #include "syncenginetestutils.h" #include using namespace OCC; class TestSelectiveSync : public QObject { Q_OBJECT private slots: void testSelectiveSyncBigFolders() { FakeFolder fakeFolder { FileInfo::A12_B12_C12_S12() }; SyncOptions options; options._newBigFolderSizeLimit = 20000; // 20 K fakeFolder.syncEngine().setSyncOptions(options); QStringList sizeRequests; fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation, const QNetworkRequest &req, QIODevice *device) -> QNetworkReply * { // Record what path we are querying for the size if (req.attribute(QNetworkRequest::CustomVerbAttribute) == "PROPFIND") { if (device->readAll().contains("extraDavProperties = "20020"; fakeFolder.remoteModifier().find("A/newBigDir/subDir")->extraDavProperties = "20020"; fakeFolder.remoteModifier().find("B/newSmallDir")->extraDavProperties = "10"; fakeFolder.remoteModifier().find("B/newSmallDir/subDir")->extraDavProperties = "10"; QVERIFY(fakeFolder.syncOnce()); QCOMPARE(newBigFolder.count(), 1); QCOMPARE(newBigFolder.first()[0].toString(), QString("A/newBigDir")); QCOMPARE(newBigFolder.first()[1].toBool(), false); newBigFolder.clear(); QCOMPARE(sizeRequests.count(), 2); // "A/newBigDir" and "B/newSmallDir"; QCOMPARE(sizeRequests.filter("/subDir").count(), 0); // at no point we should request the size of the subdirs sizeRequests.clear(); auto oldSync = fakeFolder.currentLocalState(); // syncing again should do the same fakeFolder.syncEngine().journal()->schedulePathForRemoteDiscovery(QString("A/newBigDir")); QVERIFY(fakeFolder.syncOnce()); QCOMPARE(fakeFolder.currentLocalState(), oldSync); QCOMPARE(newBigFolder.count(), 1); // (since we don't have a real Folder, the files were not added to any list) newBigFolder.clear(); QCOMPARE(sizeRequests.count(), 1); // "A/newBigDir"; sizeRequests.clear(); // Simulate that we accept all files by setting a wildcard white list fakeFolder.syncEngine().journal()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, QStringList() << QLatin1String("/")); fakeFolder.syncEngine().journal()->schedulePathForRemoteDiscovery(QString("A/newBigDir")); QVERIFY(fakeFolder.syncOnce()); QCOMPARE(newBigFolder.count(), 0); QCOMPARE(sizeRequests.count(), 0); QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); } }; QTEST_GUILESS_MAIN(TestSelectiveSync) #include "testselectivesync.moc"