#define BOOST_TEST_MODULE GitFS_Config #include // IWYU pragma: keep #include #include "mockDefs.h" #include #include #include #include #include #include #include #include #include namespace NetFS { class ConfigError; } using namespace GitFS; using namespace GitFS::Test; using namespace AdHoc::literals; namespace btdata = boost::unit_test::data; class IdsIce : public IceTray::DryIce { public: IdsIce(const char * uid, const char * gid) : IceTray::DryIce({ "--GitFS.testrepo.gitdir=%?"_fmt(rootDir.string()), "--GitFS.testrepo.authkey=%?"_fmt("testauth"), "--GitFS.testrepo.gid=%?"_fmt(gid), "--GitFS.testrepo.uid=%?"_fmt(uid), "--GitFS.testrepo.commitish=7a0ccb40084c3ab31d9856e7f689c0514c28c930", }) { } }; const auto USERS = btdata::make({"root", "gituser", "www"}); const auto GROUPS = btdata::make({"root", "gitgroup", "www"}); const auto DIRS = btdata::make({"/", "/src", "/unittests/fixtures"}); const auto FILES = btdata::make({"/Jamroot.jam", "/src/repo.cpp", "/unittests/fixtures/executable"}); const auto LINKS = btdata::make({"/unittests/fixtures/symlink"}); const auto COMMITISHS = btdata::make({"", "master", "origin/master", "testcommit", "7a0ccb40084c3ab31d9856e7f689c0514c28c930"}); BOOST_DATA_TEST_CASE(uid_gid_override_getattr, USERS * GROUPS *(DIRS + FILES + LINKS), uid, gid, path) { IdsIce s(uid, gid); VolumeClient c; BOOST_CHECK_NO_THROW(c.s->ice_ping()); auto attr = c.v->getattr(c.env, path); BOOST_CHECK_EQUAL(attr.uid, uid); BOOST_CHECK_EQUAL(attr.gid, gid); } BOOST_DATA_TEST_CASE(uid_gid_override_fgetattr, USERS * GROUPS * FILES, uid, gid, path) { IdsIce s(uid, gid); VolumeClient c; BOOST_CHECK_NO_THROW(c.s->ice_ping()); auto file = c.v->open(c.env, path, {}); auto attr = file->fgetattr(c.env); BOOST_CHECK_EQUAL(attr.uid, uid); BOOST_CHECK_EQUAL(attr.gid, gid); file->close(); } BOOST_DATA_TEST_CASE(uid_gid_override_list, USERS * GROUPS * DIRS, uid, gid, path) { IdsIce s(uid, gid); VolumeClient c; BOOST_CHECK_NO_THROW(c.s->ice_ping()); auto dir = c.v->opendir(c.env, path); for (const auto & dirent : dir->listdir()) { BOOST_TEST_CONTEXT(dirent.first) { BOOST_CHECK_EQUAL(dirent.second.uid, uid); BOOST_CHECK_EQUAL(dirent.second.gid, gid); } } dir->close(); } BOOST_DATA_TEST_CASE(commitishs, COMMITISHS *(FILES + DIRS), commitish, path) { IceTray::DryIce di({ "--GitFS.testrepo.gitdir=%?"_fmt(rootDir.string()), "--GitFS.testrepo.authkey=%?"_fmt("testauth"), "--GitFS.testrepo.commitish=%?"_fmt(commitish), }); VolumeClient c; BOOST_CHECK_NO_THROW(c.v->ice_ping()); BOOST_CHECK_NO_THROW(c.v->getattr(c.env, path)); } BOOST_DATA_TEST_CASE(bad_commitishs, FILES, commitish) // File paths aren't commitishs { IceTray::DryIce di({ "--GitFS.testrepo.gitdir=%?"_fmt(rootDir.string()), "--GitFS.testrepo.authkey=%?"_fmt("testauth"), "--GitFS.testrepo.commitish=%?"_fmt(commitish), }); Client c; BOOST_CHECK_THROW(c.s->connect("testrepo", "testauth"), NetFS::ConfigError); }