Skip to content

Commit

Permalink
Merge pull request #6832 from nextcloud/ci/testIsMountRootProperty
Browse files Browse the repository at this point in the history
Ci/test is mount root property
  • Loading branch information
mgallien authored Jun 25, 2024
2 parents b836308 + 54ffce5 commit d5b32da
Showing 1 changed file with 93 additions and 4 deletions.
97 changes: 93 additions & 4 deletions test/testsyncmove.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,26 @@ struct OperationCounter {
int nPUT = 0;
int nMOVE = 0;
int nDELETE = 0;
int nPROPFIND = 0;
int nMKCOL = 0;

void reset() { *this = {}; }

auto functor() {
return [&](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *) {
if (op == QNetworkAccessManager::GetOperation)
if (op == QNetworkAccessManager::GetOperation) {
++nGET;
if (op == QNetworkAccessManager::PutOperation)
} else if (op == QNetworkAccessManager::PutOperation) {
++nPUT;
if (op == QNetworkAccessManager::DeleteOperation)
} else if (op == QNetworkAccessManager::DeleteOperation) {
++nDELETE;
if (req.attribute(QNetworkRequest::CustomVerbAttribute).toString() == "MOVE")
} else if (req.attribute(QNetworkRequest::CustomVerbAttribute).toString() == "MOVE") {
++nMOVE;
} else if (req.attribute(QNetworkRequest::CustomVerbAttribute).toString() == "PROPFIND") {
++nPROPFIND;
} else if (req.attribute(QNetworkRequest::CustomVerbAttribute).toString() == "MKCOL") {
++nMKCOL;
}
return nullptr;
};
}
Expand Down Expand Up @@ -79,6 +86,13 @@ bool expectAndWipeConflict(FileModifier &local, FileInfo state, const QString pa
return false;
}

static void setAllPerm(FileInfo *fi, OCC::RemotePermissions perm)
{
fi->permissions = perm;
for (auto &subFi : fi->children)
setAllPerm(&subFi, perm);
}

class TestSyncMove : public QObject
{
Q_OBJECT
Expand Down Expand Up @@ -1125,6 +1139,81 @@ private slots:

QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
}

void testBlockRenameTopFolderFromGroupFolder()
{
FakeFolder fakeFolder{{}};
fakeFolder.syncEngine().account()->setServerVersion("29.0.2.0");

fakeFolder.remoteModifier().mkdir("FolA");
auto groupFolderRoot = fakeFolder.remoteModifier().find("FolA");
groupFolderRoot->extraDavProperties = "<nc:is-mount-root>true</nc:is-mount-root>";
setAllPerm(groupFolderRoot, RemotePermissions::fromServerString("WDNVCKRM"));
fakeFolder.remoteModifier().mkdir("FolA/FolB");
fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC");
fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC/FolD");
fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC/FolD/FolE");
fakeFolder.remoteModifier().insert("FolA/FileA.txt");
fakeFolder.remoteModifier().insert("FolA/FolB/FileB.txt");
fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FileC.txt");
fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FolD/FileD.txt");
fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FolD/FolE/FileE.txt");
QVERIFY(fakeFolder.syncOnce());

OperationCounter counter;
fakeFolder.setServerOverride(counter.functor());

fakeFolder.localModifier().insert("FolA/FileA2.txt");
fakeFolder.localModifier().insert("FolA/FolB/FileB2.txt");
fakeFolder.localModifier().insert("FolA/FolB/FolC/FileC2.txt");
fakeFolder.localModifier().insert("FolA/FolB/FolC/FolD/FileD2.txt");
fakeFolder.localModifier().insert("FolA/FolB/FolC/FolD/FolE/FileE2.txt");
fakeFolder.localModifier().rename("FolA", "FolA_Renamed");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(counter.nDELETE, 0);
QCOMPARE(counter.nGET, 0);
QCOMPARE(counter.nPUT, 10);
QCOMPARE(counter.nMOVE, 0);
QCOMPARE(counter.nMKCOL, 5);
}

void testAllowRenameChildFolderFromGroupFolder()
{
FakeFolder fakeFolder{{}};
fakeFolder.syncEngine().account()->setServerVersion("29.0.2.0");

fakeFolder.remoteModifier().mkdir("FolA");
auto groupFolderRoot = fakeFolder.remoteModifier().find("FolA");
groupFolderRoot->extraDavProperties = "<nc:is-mount-root>true</nc:is-mount-root>";
setAllPerm(groupFolderRoot, RemotePermissions::fromServerString("WDNVCKRM"));
fakeFolder.remoteModifier().mkdir("FolA/FolB");
fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC");
fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC/FolD");
fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC/FolD/FolE");
fakeFolder.remoteModifier().insert("FolA/FileA.txt");
fakeFolder.remoteModifier().insert("FolA/FolB/FileB.txt");
fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FileC.txt");
fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FolD/FileD.txt");
fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FolD/FolE/FileE.txt");
QVERIFY(fakeFolder.syncOnce());

OperationCounter counter;
fakeFolder.setServerOverride(counter.functor());

fakeFolder.localModifier().insert("FolA/FileA2.txt");
fakeFolder.localModifier().insert("FolA/FolB/FileB2.txt");
fakeFolder.localModifier().insert("FolA/FolB/FolC/FileC2.txt");
fakeFolder.localModifier().insert("FolA/FolB/FolC/FolD/FileD2.txt");
fakeFolder.localModifier().insert("FolA/FolB/FolC/FolD/FolE/FileE2.txt");
fakeFolder.localModifier().rename("FolA/FolB", "FolA/FolB_Renamed");
fakeFolder.localModifier().rename("FolA/FileA.txt", "FolA/FileA_Renamed.txt");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(counter.nDELETE, 0);
QCOMPARE(counter.nGET, 0);
QCOMPARE(counter.nPUT, 5);
QCOMPARE(counter.nMOVE, 2);
QCOMPARE(counter.nMKCOL, 0);
}
};

QTEST_GUILESS_MAIN(TestSyncMove)
Expand Down

0 comments on commit d5b32da

Please sign in to comment.