summaryrefslogtreecommitdiffstats
path: root/qa/tasks/cephfs/caps_helper.py
diff options
context:
space:
mode:
Diffstat (limited to 'qa/tasks/cephfs/caps_helper.py')
-rw-r--r--qa/tasks/cephfs/caps_helper.py33
1 files changed, 31 insertions, 2 deletions
diff --git a/qa/tasks/cephfs/caps_helper.py b/qa/tasks/cephfs/caps_helper.py
index ac9bc4401..1ead57b71 100644
--- a/qa/tasks/cephfs/caps_helper.py
+++ b/qa/tasks/cephfs/caps_helper.py
@@ -160,11 +160,11 @@ class CapTester(CephFSTestCase):
else:
raise RuntimeError(f'perm = {perm}\nIt should be "r" or "rw".')
- def conduct_pos_test_for_read_caps(self):
+ def conduct_pos_test_for_read_caps(self, sudo_read=False):
for mount, path, data in self.test_set:
log.info(f'test read perm: read file {path} and expect data '
f'"{data}"')
- contents = mount.read_file(path)
+ contents = mount.read_file(path, sudo_read)
self.assertEqual(data, contents)
log.info(f'read perm was tested successfully: "{data}" was '
f'successfully read from path {path}')
@@ -193,3 +193,32 @@ class CapTester(CephFSTestCase):
cmdargs.pop(-1)
log.info('absence of write perm was tested successfully: '
f'failed to be write data to file {path}.')
+
+ def _conduct_neg_test_for_root_squash_caps(self, _cmdargs, sudo_write=False):
+ possible_errmsgs = ('permission denied', 'operation not permitted')
+ cmdargs = ['sudo'] if sudo_write else ['']
+ cmdargs += _cmdargs
+
+ for mount, path, data in self.test_set:
+ log.info(f'test absence of {_cmdargs[0]} perm: expect failure {path}.')
+
+ # open the file and hold it. The MDS will issue CEPH_CAP_EXCL_*
+ # to mount
+ proc = mount.open_background(path)
+ cmdargs.append(path)
+ mount.negtestcmd(args=cmdargs, retval=1, errmsgs=possible_errmsgs)
+ cmdargs.pop(-1)
+ mount._kill_background(proc)
+ log.info(f'absence of {_cmdargs[0]} perm was tested successfully')
+
+ def conduct_neg_test_for_chown_caps(self, sudo_write=True):
+ # flip ownership to nobody. assumption: nobody's id is 65534
+ cmdargs = ['chown', '-h', '65534:65534']
+ self._conduct_neg_test_for_root_squash_caps(cmdargs, sudo_write)
+
+ def conduct_neg_test_for_truncate_caps(self, sudo_write=True):
+ cmdargs = ['truncate', '-s', '10GB']
+ self._conduct_neg_test_for_root_squash_caps(cmdargs, sudo_write)
+
+ def conduct_pos_test_for_open_caps(self, sudo_read=True):
+ self.conduct_pos_test_for_read_caps(sudo_read)