mirror of
https://github.com/ceph/ceph
synced 2025-03-30 07:19:14 +00:00
Merge pull request #33279 from rishabh-d-dave/fs-move-run_shell-and-related-methods
qa/cephfs: move run_shell to mount.py and add methods for negative testing
This commit is contained in:
commit
60504bd048
@ -193,15 +193,85 @@ class CephFSMount(object):
|
||||
return six.ensure_str(p.stdout.getvalue().strip())
|
||||
|
||||
def run_shell(self, args, wait=True, stdin=None, check_status=True,
|
||||
omit_sudo=True):
|
||||
if isinstance(args, str):
|
||||
args = args.split()
|
||||
cwd=None, omit_sudo=True):
|
||||
args = args.split() if isinstance(args, str) else args
|
||||
if not cwd:
|
||||
cwd = self.mountpoint
|
||||
|
||||
args = ["cd", self.mountpoint, run.Raw('&&'), "sudo"] + args
|
||||
return self.client_remote.run(args=args, stdout=BytesIO(),
|
||||
stderr=BytesIO(), wait=wait,
|
||||
stdin=stdin, check_status=check_status,
|
||||
omit_sudo=omit_sudo)
|
||||
return self.client_remote.run(args=args, stdin=stdin, wait=wait,
|
||||
stdout=BytesIO(), stderr=BytesIO(),
|
||||
cwd=cwd, check_status=check_status)
|
||||
|
||||
def run_as_user(self, args, user, wait=True, stdin=None,
|
||||
check_status=True, cwd=None):
|
||||
if isinstance(args, str):
|
||||
args = 'sudo -u %s -s /bin/bash -c %s' % (user, args)
|
||||
elif isinstance(args, list):
|
||||
cmdlist = args
|
||||
cmd = ''
|
||||
for i in cmdlist:
|
||||
cmd = cmd + i + ' '
|
||||
args = ['sudo', '-u', user, '-s', '/bin/bash', '-c']
|
||||
args.append(cmd)
|
||||
if not cwd:
|
||||
cwd = self.mountpoint
|
||||
|
||||
return self.client_remote.run(args=args, wait=wait, stdin=stdin,
|
||||
stdout=BytesIO(), stderr=BytesIO(),
|
||||
check_status=check_status, cwd=cwd)
|
||||
|
||||
def run_as_root(self, args, wait=True, stdin=None, check_status=True,
|
||||
cwd=None):
|
||||
if isinstance(args, str):
|
||||
args = 'sudo ' + args
|
||||
if isinstance(args, list):
|
||||
args.insert(0, 'sudo')
|
||||
if not cwd:
|
||||
cwd = self.mountpoint
|
||||
|
||||
return self.client_remote.run(args=args, wait=wait, stdin=stdin,
|
||||
stdout=BytesIO(), stderr=BytesIO(),
|
||||
check_status=check_status, cwd=cwd)
|
||||
|
||||
def _verify(self, proc, retval=None, errmsg=None):
|
||||
if retval:
|
||||
msg = ('expected return value: {}\nreceived return value: '
|
||||
'{}\n'.format(retval, proc.returncode))
|
||||
assert proc.returncode == retval, msg
|
||||
|
||||
if errmsg:
|
||||
stderr = proc.stderr.getvalue().lower()
|
||||
msg = ('didn\'t find given string in stderr -\nexpected string: '
|
||||
'{}\nreceived error message: {}\nnote: received error '
|
||||
'message is converted to lowercase'.format(errmsg, stderr))
|
||||
assert errmsg in stderr, msg
|
||||
|
||||
def negtestcmd(self, args, retval=None, errmsg=None, stdin=None,
|
||||
cwd=None, wait=True):
|
||||
"""
|
||||
Conduct a negative test for the given command.
|
||||
|
||||
retval and errmsg are parameters to confirm the cause of command
|
||||
failure.
|
||||
"""
|
||||
proc = self.run_shell(args=args, wait=wait, stdin=stdin, cwd=cwd,
|
||||
check_status=False)
|
||||
self._verify(proc, retval, errmsg)
|
||||
return proc
|
||||
|
||||
def negtestcmd_as_user(self, args, user, retval=None, errmsg=None,
|
||||
stdin=None, cwd=None, wait=True):
|
||||
proc = self.run_as_user(args=args, user=user, wait=wait, stdin=stdin,
|
||||
cwd=cwd, check_status=False)
|
||||
self._verify(proc, retval, errmsg)
|
||||
return proc
|
||||
|
||||
def negtestcmd_as_root(self, args, retval=None, errmsg=None, stdin=None,
|
||||
cwd=None, wait=True):
|
||||
proc = self.run_as_root(args=args, wait=wait, stdin=stdin, cwd=cwd,
|
||||
check_status=False)
|
||||
self._verify(proc, retval, errmsg)
|
||||
return proc
|
||||
|
||||
def open_no_data(self, basename):
|
||||
"""
|
||||
|
@ -502,7 +502,6 @@ def safe_kill(pid):
|
||||
else:
|
||||
raise
|
||||
|
||||
|
||||
class LocalKernelMount(KernelMount):
|
||||
def __init__(self, ctx, test_dir, client_id):
|
||||
super(LocalKernelMount, self).__init__(ctx, test_dir, client_id, LocalRemote(), None, None, None)
|
||||
@ -522,67 +521,6 @@ class LocalKernelMount(KernelMount):
|
||||
else:
|
||||
return keyring_path
|
||||
|
||||
def run_shell(self, args, wait=True, stdin=None, check_status=True,
|
||||
omit_sudo=False):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint,
|
||||
stdin=stdin, check_status=check_status,
|
||||
omit_sudo=omit_sudo)
|
||||
|
||||
def run_as_user(self, args, user, wait=True, stdin=None, check_status=True):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
if isinstance(args, str):
|
||||
args = 'sudo -u %s -s /bin/bash -c %s' % (user, args)
|
||||
elif isinstance(args, list):
|
||||
cmdlist = args
|
||||
cmd = ''
|
||||
for i in cmdlist:
|
||||
cmd = cmd + i + ' '
|
||||
args = ['sudo', '-u', user, '-s', '/bin/bash', '-c']
|
||||
args.append(cmd)
|
||||
|
||||
return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint,
|
||||
check_status=check_status, stdin=stdin,
|
||||
omit_sudo=False)
|
||||
|
||||
def run_as_root(self, args, wait=True, stdin=None, check_status=True):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
if isinstance(args, str):
|
||||
args = 'sudo ' + args
|
||||
if isinstance(args, list):
|
||||
args.insert(0, 'sudo')
|
||||
|
||||
return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint,
|
||||
check_status=check_status,
|
||||
omit_sudo=False)
|
||||
|
||||
def testcmd(self, args, wait=True, stdin=None, omit_sudo=False):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
return self.run_shell(args, wait=wait, stdin=stdin, check_status=False,
|
||||
omit_sudo=omit_sudo)
|
||||
|
||||
def testcmd_as_user(self, args, user, wait=True, stdin=None):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
return self.run_as_user(args, user=user, wait=wait, stdin=stdin,
|
||||
check_status=False)
|
||||
|
||||
def testcmd_as_root(self, args, wait=True, stdin=None):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
return self.run_as_root(args, wait=wait, stdin=stdin,
|
||||
check_status=False)
|
||||
|
||||
def setupfs(self, name=None):
|
||||
if name is None and self.fs is not None:
|
||||
# Previous mount existed, reuse the old name
|
||||
@ -711,66 +649,6 @@ class LocalFuseMount(FuseMount):
|
||||
# to avoid assumptions about daemons' pwd
|
||||
return os.path.abspath("./client.{0}.keyring".format(self.client_id))
|
||||
|
||||
def run_shell(self, args, wait=True, stdin=None, check_status=True, omit_sudo=True):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint,
|
||||
stdin=stdin, check_status=check_status,
|
||||
omit_sudo=omit_sudo)
|
||||
|
||||
def run_as_user(self, args, user, wait=True, stdin=None, check_status=True):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
if isinstance(args, str):
|
||||
args = 'sudo -u %s -s /bin/bash -c %s' % (user, args)
|
||||
elif isinstance(args, list):
|
||||
cmdlist = args
|
||||
cmd = ''
|
||||
for i in cmdlist:
|
||||
cmd = cmd + i + ' '
|
||||
args = ['sudo', '-u', user, '-s', '/bin/bash', '-c']
|
||||
args.append(cmd)
|
||||
|
||||
return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint,
|
||||
check_status=check_status, stdin=stdin,
|
||||
omit_sudo=False)
|
||||
|
||||
def run_as_root(self, args, wait=True, stdin=None, check_status=True):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
if isinstance(args, str):
|
||||
args = 'sudo ' + args
|
||||
if isinstance(args, list):
|
||||
args.insert(0, 'sudo')
|
||||
|
||||
return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint,
|
||||
check_status=check_status,
|
||||
omit_sudo=False)
|
||||
|
||||
def testcmd(self, args, wait=True, stdin=None, omit_sudo=True):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
return self.run_shell(args, wait=wait, stdin=stdin, check_status=False,
|
||||
omit_sudo=omit_sudo)
|
||||
|
||||
def testcmd_as_user(self, args, user, wait=True, stdin=None):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
return self.run_as_user(args, user=user, wait=wait, stdin=stdin,
|
||||
check_status=False)
|
||||
|
||||
def testcmd_as_root(self, args, wait=True, stdin=None):
|
||||
# FIXME maybe should add a pwd arg to teuthology.orchestra so that
|
||||
# the "cd foo && bar" shenanigans isn't needed to begin with and
|
||||
# then we wouldn't have to special case this
|
||||
return self.run_as_root(args, wait=wait, stdin=stdin,
|
||||
check_status=False)
|
||||
|
||||
def setupfs(self, name=None):
|
||||
if name is None and self.fs is not None:
|
||||
# Previous mount existed, reuse the old name
|
||||
|
Loading…
Reference in New Issue
Block a user