mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
tests/avocado: Share useful helpers from virtiofs_submounts test
Move the useful has_cmd()/has_cmds() helpers from the virtiofs test to the avocado_qemu public class. Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com> Reviewed-by: Willian Rampazzo <willianr@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20211105143416.148332-5-f4bug@amsat.org>
This commit is contained in:
parent
5334df4822
commit
0e4b1c9435
2 changed files with 59 additions and 57 deletions
|
@ -11,6 +11,7 @@
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
|
@ -41,6 +42,62 @@ from qemu.utils import (get_info_usernet_hostfwd_port, kvm_available,
|
||||||
tcg_available)
|
tcg_available)
|
||||||
|
|
||||||
|
|
||||||
|
def has_cmd(name, args=None):
|
||||||
|
"""
|
||||||
|
This function is for use in a @avocado.skipUnless decorator, e.g.:
|
||||||
|
|
||||||
|
@skipUnless(*has_cmd('sudo -n', ('sudo', '-n', 'true')))
|
||||||
|
def test_something_that_needs_sudo(self):
|
||||||
|
...
|
||||||
|
"""
|
||||||
|
|
||||||
|
if args is None:
|
||||||
|
args = ('which', name)
|
||||||
|
|
||||||
|
try:
|
||||||
|
_, stderr, exitcode = run_cmd(args)
|
||||||
|
except Exception as e:
|
||||||
|
exitcode = -1
|
||||||
|
stderr = str(e)
|
||||||
|
|
||||||
|
if exitcode != 0:
|
||||||
|
cmd_line = ' '.join(args)
|
||||||
|
err = f'{name} required, but "{cmd_line}" failed: {stderr.strip()}'
|
||||||
|
return (False, err)
|
||||||
|
else:
|
||||||
|
return (True, '')
|
||||||
|
|
||||||
|
def has_cmds(*cmds):
|
||||||
|
"""
|
||||||
|
This function is for use in a @avocado.skipUnless decorator and
|
||||||
|
allows checking for the availability of multiple commands, e.g.:
|
||||||
|
|
||||||
|
@skipUnless(*has_cmds(('cmd1', ('cmd1', '--some-parameter')),
|
||||||
|
'cmd2', 'cmd3'))
|
||||||
|
def test_something_that_needs_cmd1_and_cmd2(self):
|
||||||
|
...
|
||||||
|
"""
|
||||||
|
|
||||||
|
for cmd in cmds:
|
||||||
|
if isinstance(cmd, str):
|
||||||
|
cmd = (cmd,)
|
||||||
|
|
||||||
|
ok, errstr = has_cmd(*cmd)
|
||||||
|
if not ok:
|
||||||
|
return (False, errstr)
|
||||||
|
|
||||||
|
return (True, '')
|
||||||
|
|
||||||
|
def run_cmd(args):
|
||||||
|
subp = subprocess.Popen(args,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
universal_newlines=True)
|
||||||
|
stdout, stderr = subp.communicate()
|
||||||
|
ret = subp.returncode
|
||||||
|
|
||||||
|
return (stdout, stderr, ret)
|
||||||
|
|
||||||
def is_readable_executable_file(path):
|
def is_readable_executable_file(path):
|
||||||
return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
|
return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
|
||||||
|
|
||||||
|
|
|
@ -6,67 +6,12 @@ import time
|
||||||
|
|
||||||
from avocado import skipUnless
|
from avocado import skipUnless
|
||||||
from avocado_qemu import LinuxTest, BUILD_DIR
|
from avocado_qemu import LinuxTest, BUILD_DIR
|
||||||
|
from avocado_qemu import has_cmds
|
||||||
|
from avocado_qemu import run_cmd
|
||||||
from avocado_qemu import wait_for_console_pattern
|
from avocado_qemu import wait_for_console_pattern
|
||||||
from avocado.utils import ssh
|
from avocado.utils import ssh
|
||||||
|
|
||||||
|
|
||||||
def run_cmd(args):
|
|
||||||
subp = subprocess.Popen(args,
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
stderr=subprocess.PIPE,
|
|
||||||
universal_newlines=True)
|
|
||||||
stdout, stderr = subp.communicate()
|
|
||||||
ret = subp.returncode
|
|
||||||
|
|
||||||
return (stdout, stderr, ret)
|
|
||||||
|
|
||||||
def has_cmd(name, args=None):
|
|
||||||
"""
|
|
||||||
This function is for use in a @avocado.skipUnless decorator, e.g.:
|
|
||||||
|
|
||||||
@skipUnless(*has_cmd('sudo -n', ('sudo', '-n', 'true')))
|
|
||||||
def test_something_that_needs_sudo(self):
|
|
||||||
...
|
|
||||||
"""
|
|
||||||
|
|
||||||
if args is None:
|
|
||||||
args = ('which', name)
|
|
||||||
|
|
||||||
try:
|
|
||||||
_, stderr, exitcode = run_cmd(args)
|
|
||||||
except Exception as e:
|
|
||||||
exitcode = -1
|
|
||||||
stderr = str(e)
|
|
||||||
|
|
||||||
if exitcode != 0:
|
|
||||||
cmd_line = ' '.join(args)
|
|
||||||
err = f'{name} required, but "{cmd_line}" failed: {stderr.strip()}'
|
|
||||||
return (False, err)
|
|
||||||
else:
|
|
||||||
return (True, '')
|
|
||||||
|
|
||||||
def has_cmds(*cmds):
|
|
||||||
"""
|
|
||||||
This function is for use in a @avocado.skipUnless decorator and
|
|
||||||
allows checking for the availability of multiple commands, e.g.:
|
|
||||||
|
|
||||||
@skipUnless(*has_cmds(('cmd1', ('cmd1', '--some-parameter')),
|
|
||||||
'cmd2', 'cmd3'))
|
|
||||||
def test_something_that_needs_cmd1_and_cmd2(self):
|
|
||||||
...
|
|
||||||
"""
|
|
||||||
|
|
||||||
for cmd in cmds:
|
|
||||||
if isinstance(cmd, str):
|
|
||||||
cmd = (cmd,)
|
|
||||||
|
|
||||||
ok, errstr = has_cmd(*cmd)
|
|
||||||
if not ok:
|
|
||||||
return (False, errstr)
|
|
||||||
|
|
||||||
return (True, '')
|
|
||||||
|
|
||||||
|
|
||||||
class VirtiofsSubmountsTest(LinuxTest):
|
class VirtiofsSubmountsTest(LinuxTest):
|
||||||
"""
|
"""
|
||||||
:avocado: tags=arch:x86_64
|
:avocado: tags=arch:x86_64
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue