Skip to content

Commit e5ee1aa

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 c0ca583 commit e5ee1aa

File tree

2 files changed

+72
-3
lines changed

2 files changed

+72
-3
lines changed

src/gui/folderman.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class ShareTestHelper;
2727
class EndToEndTestHelper;
2828
class TestSyncConflictsModel;
2929
class TestRemoteWipe;
30+
class TestSyncCfApi;
3031

3132
namespace OCC {
3233

@@ -415,6 +416,7 @@ private slots:
415416
friend class ::EndToEndTestHelper;
416417
friend class ::TestFolderStatusModel;
417418
friend class ::TestRemoteWipe;
419+
friend class ::TestSyncCfApi;
418420
};
419421

420422
} // namespace OCC

test/testsynccfapi.cpp

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,18 @@
77
* any purpose.
88
*/
99

10-
#include <QtTest>
1110
#include "syncenginetestutils.h"
11+
1212
#include "common/vfs.h"
13-
#include "config.h"
14-
#include <syncengine.h>
1513
#include "openfilemanager.h"
14+
#include "syncengine.h"
15+
#include "folderman.h"
16+
#include "accountmanager.h"
17+
#include "configfile.h"
1618
#include "vfs/cfapi/cfapiwrapper.h"
19+
#include "testhelper.h"
20+
21+
#include <QtTest>
1722

1823
namespace cfapi {
1924
using namespace OCC::CfApiWrapper;
@@ -1576,6 +1581,68 @@ private slots:
15761581

15771582
QVERIFY(fakeFolder.syncOnce());
15781583
}
1584+
1585+
void switchVfsOffWithOnDemandFolder()
1586+
{
1587+
std::unique_ptr<FolderMan> folderMan;
1588+
1589+
folderMan.reset({});
1590+
folderMan.reset(new FolderMan{});
1591+
1592+
QTemporaryDir dir;
1593+
ConfigFile::setConfDir(dir.path()); // we don't want to pollute the user's config file
1594+
1595+
QScopedPointer<FakeQNAM> fakeQnam(new FakeQNAM({}));
1596+
OCC::AccountPtr account = OCC::Account::create();
1597+
account->setCredentials(new FakeCredentials{fakeQnam.data()});
1598+
account->setUrl(QUrl(("http://example.de")));
1599+
OCC::AccountManager::instance()->addAccount(account);
1600+
1601+
FakeFolder fakeFolder{FileInfo{}};
1602+
setupVfs(fakeFolder);
1603+
1604+
fakeFolder.remoteModifier().mkdir("directory");
1605+
fakeFolder.remoteModifier().mkdir("directory/subdir");
1606+
fakeFolder.remoteModifier().insert("directory/file1");
1607+
fakeFolder.remoteModifier().insert("directory/file2");
1608+
fakeFolder.remoteModifier().insert("directory/file3");
1609+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt1.txt");
1610+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt2.txt");
1611+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt3.txt");
1612+
1613+
QVERIFY(fakeFolder.syncOnce());
1614+
1615+
FolderMan *folderman = FolderMan::instance();
1616+
QCOMPARE(folderman, folderMan.get());
1617+
OCC::AccountState *accountState = OCC::AccountManager::instance()->accounts().first().data();
1618+
const auto folder = folderman->addFolder(accountState, folderDefinition(fakeFolder.localPath()));
1619+
QVERIFY(folder);
1620+
1621+
auto realFolder = FolderMan::instance()->folderForPath(fakeFolder.localPath());
1622+
QVERIFY(realFolder);
1623+
1624+
// perform an initial sync to ensure local and remote have the same state
1625+
QVERIFY(fakeFolder.syncOnce());
1626+
1627+
auto offVfs = QSharedPointer<Vfs>(createVfsFromPlugin(Vfs::Off).release());
1628+
fakeFolder.switchToVfs(offVfs);
1629+
1630+
// Also wipes virtual files, schedules remote discovery
1631+
realFolder->setVirtualFilesEnabled(false);
1632+
realFolder->setVfsOnOffSwitchPending(false);
1633+
1634+
// Wipe pin states and selective sync db
1635+
realFolder->setRootPinState(PinState::AlwaysLocal);
1636+
realFolder->journalDb()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, {});
1637+
1638+
realFolder->processSwitchedToVirtualFiles();
1639+
1640+
fakeFolder.syncEngine().setLocalDiscoveryOptions(LocalDiscoveryStyle::DatabaseAndFilesystem);
1641+
QVERIFY(fakeFolder.syncOnce());
1642+
1643+
fakeFolder.syncEngine().setLocalDiscoveryOptions(LocalDiscoveryStyle::FilesystemOnly);
1644+
QVERIFY(fakeFolder.syncOnce());
1645+
}
15791646
};
15801647

15811648
QTEST_GUILESS_MAIN(TestSyncCfApi)

0 commit comments

Comments
 (0)