1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#define BOOST_TEST_MODULE GitFS_Config
#include <boost/test/unit_test.hpp>
#include <boost/test/data/test_case.hpp>
#include <definedDirs.h>
#include <compileTimeFormatter.h>
#include "mockDefs.h"
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.commit=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" });
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);
auto dir2 = Ice::checkedCast<NetFS::DirectoryV2Prx>(dir);
for (const auto & dirent : dir2->listdir()) {
BOOST_TEST_CONTEXT(dirent.first) {
BOOST_CHECK_EQUAL(dirent.second.uid, uid);
BOOST_CHECK_EQUAL(dirent.second.gid, gid);
}
}
dir->close();
}
|