Skip to content

Commit c7efc09

Browse files
committed
chore(vfs/windows): test migration from VFS to classic sync on windows
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
1 parent f214849 commit c7efc09

File tree

1 file changed

+130
-4
lines changed

1 file changed

+130
-4
lines changed

test/testsynccfapi.cpp

Lines changed: 130 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
* any purpose.
88
*/
99

10-
#include <QtTest>
1110
#include "syncenginetestutils.h"
12-
#include "common/vfs.h"
13-
#include "config.h"
14-
#include <syncengine.h>
1511

12+
#include "common/vfs.h"
13+
#include "openfilemanager.h"
14+
#include "syncengine.h"
1615
#include "vfs/cfapi/cfapiwrapper.h"
1716

17+
#include <QtTest>
18+
1819
namespace cfapi {
1920
using namespace OCC::CfApiWrapper;
2021
}
@@ -1582,6 +1583,131 @@ private slots:
15821583
const auto directoryItem = fakeFolder.remoteModifier().find("directory");
15831584
QCOMPARE(directoryItem, nullptr);
15841585
}
1586+
1587+
void syncFoldersOnDemand()
1588+
{
1589+
FakeFolder fakeFolder {FileInfo{}};
1590+
auto vfs = setupVfs(fakeFolder);
1591+
1592+
ItemCompletedSpy completeSpy(fakeFolder);
1593+
1594+
const auto cleanup = [&]() {
1595+
completeSpy.clear();
1596+
};
1597+
1598+
cleanup();
1599+
1600+
fakeFolder.remoteModifier().insert("rootfile1");
1601+
fakeFolder.remoteModifier().mkdir("first folder");
1602+
fakeFolder.remoteModifier().insert("first folder/file1");
1603+
fakeFolder.remoteModifier().insert("first folder/file2");
1604+
fakeFolder.remoteModifier().insert("first folder/file3");
1605+
fakeFolder.remoteModifier().mkdir("first folder/second folder");
1606+
fakeFolder.remoteModifier().insert("first folder/second folder/second file1");
1607+
fakeFolder.remoteModifier().insert("first folder/second folder/second file2");
1608+
fakeFolder.remoteModifier().insert("first folder/second folder/second file3");
1609+
1610+
QVERIFY(fakeFolder.syncOnce());
1611+
QCOMPARE(completeSpy.size(), 9);
1612+
QVERIFY(itemInstruction(completeSpy, "rootfile1", CSYNC_INSTRUCTION_NEW));
1613+
QVERIFY(itemInstruction(completeSpy, "first folder", CSYNC_INSTRUCTION_NEW));
1614+
1615+
cleanup();
1616+
1617+
OCC::showInFileManager(fakeFolder.localPath() + "first folder");
1618+
1619+
QTest::qWait(5000);
1620+
1621+
QVERIFY(fakeFolder.syncOnce());
1622+
1623+
OCC::showInFileManager(fakeFolder.localPath() + "first folder");
1624+
1625+
QTest::qWait(5000);
1626+
1627+
const auto file3Info = fakeFolder.localModifier().find("first folder/file3");
1628+
QVERIFY(file3Info.exists());
1629+
const auto secondFolderInfo = fakeFolder.localModifier().find("first folder/second folder");
1630+
QVERIFY(secondFolderInfo.exists());
1631+
const auto wrongFirstFolderInfo = fakeFolder.localModifier().find("first folder/first folder");
1632+
QVERIFY(!wrongFirstFolderInfo.exists());
1633+
1634+
QVERIFY(fakeFolder.syncOnce());
1635+
1636+
OCC::showInFileManager(fakeFolder.localPath() + "first folder/second folder");
1637+
1638+
QTest::qWait(5000);
1639+
1640+
const auto secondFile3Info = fakeFolder.localModifier().find("first folder/second folder/second file3");
1641+
QVERIFY(secondFile3Info.exists());
1642+
const auto wrongSecondFolderInfo = fakeFolder.localModifier().find("first folder/second folder/second folder");
1643+
QVERIFY(!wrongSecondFolderInfo.exists());
1644+
1645+
QVERIFY(fakeFolder.syncOnce());
1646+
}
1647+
1648+
void switchVfsOffWithOnDemandFolder()
1649+
{
1650+
FakeFolder fakeFolder{FileInfo{}};
1651+
setupVfs(fakeFolder);
1652+
1653+
ItemCompletedSpy completeSpy(fakeFolder);
1654+
1655+
fakeFolder.remoteModifier().insert("firstFile1.txt");
1656+
fakeFolder.remoteModifier().insert("firstFile2.txt");
1657+
fakeFolder.remoteModifier().insert("firstFile3.txt");
1658+
fakeFolder.remoteModifier().mkdir("directory");
1659+
fakeFolder.remoteModifier().mkdir("directory/subdir");
1660+
fakeFolder.remoteModifier().insert("directory/file1");
1661+
fakeFolder.remoteModifier().insert("directory/file2");
1662+
fakeFolder.remoteModifier().insert("directory/file3");
1663+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt1.txt");
1664+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt2.txt");
1665+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt3.txt");
1666+
1667+
QVERIFY(fakeFolder.syncOnce());
1668+
1669+
QCOMPARE(completeSpy.size(), 11);
1670+
QVERIFY(itemInstruction(completeSpy, "directory", CSYNC_INSTRUCTION_NEW));
1671+
QVERIFY(itemInstruction(completeSpy, "firstFile1.txt", CSYNC_INSTRUCTION_NEW));
1672+
QVERIFY(itemInstruction(completeSpy, "firstFile2.txt", CSYNC_INSTRUCTION_NEW));
1673+
QVERIFY(itemInstruction(completeSpy, "firstFile3.txt", CSYNC_INSTRUCTION_NEW));
1674+
completeSpy.clear();
1675+
1676+
SyncEngine::wipeVirtualFiles(fakeFolder.localPath(), fakeFolder.syncJournal(), *fakeFolder.syncEngine().syncOptions()._vfs);
1677+
1678+
fakeFolder.syncEngine().syncOptions()._vfs->stop();
1679+
fakeFolder.syncEngine().syncOptions()._vfs->unregisterFolder();
1680+
1681+
auto noVfsPlugin = QSharedPointer<Vfs>(createVfsFromPlugin(Vfs::Off).release());
1682+
QObject::connect(&fakeFolder.syncEngine().syncFileStatusTracker(), &SyncFileStatusTracker::fileStatusChanged,
1683+
noVfsPlugin.data(), &Vfs::fileStatusChanged);
1684+
fakeFolder.switchToVfs(noVfsPlugin);
1685+
1686+
::setPinState(fakeFolder.localPath(), PinState::Unspecified, cfapi::NoRecurse);
1687+
1688+
fakeFolder.syncJournal().setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, {});
1689+
1690+
fakeFolder.syncEngine().setLocalDiscoveryOptions(LocalDiscoveryStyle::FilesystemOnly);
1691+
QVERIFY(fakeFolder.syncOnce());
1692+
1693+
QCOMPARE(completeSpy.size(), 9);
1694+
QVERIFY(itemInstruction(completeSpy, "directory", CSYNC_INSTRUCTION_NONE));
1695+
QVERIFY(itemInstruction(completeSpy, "firstFile1.txt", CSYNC_INSTRUCTION_NEW));
1696+
QVERIFY(itemInstruction(completeSpy, "firstFile2.txt", CSYNC_INSTRUCTION_NEW));
1697+
QVERIFY(itemInstruction(completeSpy, "firstFile3.txt", CSYNC_INSTRUCTION_NEW));
1698+
QVERIFY(itemInstruction(completeSpy, "directory/subdir", CSYNC_INSTRUCTION_NONE));
1699+
QVERIFY(itemInstruction(completeSpy, "directory/file1", CSYNC_INSTRUCTION_NEW));
1700+
QVERIFY(itemInstruction(completeSpy, "directory/file2", CSYNC_INSTRUCTION_NEW));
1701+
QVERIFY(itemInstruction(completeSpy, "directory/file3", CSYNC_INSTRUCTION_NEW));
1702+
QVERIFY(itemInstruction(completeSpy, "directory/subdir/fileTxt1.txt", CSYNC_INSTRUCTION_NEW));
1703+
QVERIFY(itemInstruction(completeSpy, "directory/subdir/fileTxt2.txt", CSYNC_INSTRUCTION_NEW));
1704+
QVERIFY(itemInstruction(completeSpy, "directory/subdir/fileTxt3.txt", CSYNC_INSTRUCTION_NEW));
1705+
completeSpy.clear();
1706+
1707+
fakeFolder.syncEngine().setLocalDiscoveryOptions(LocalDiscoveryStyle::FilesystemOnly);
1708+
QVERIFY(fakeFolder.syncOnce());
1709+
QCOMPARE(completeSpy.size(), 0);
1710+
}
15851711
};
15861712

15871713
QTEST_GUILESS_MAIN(TestSyncCfApi)

0 commit comments

Comments
 (0)