Move the useful has_cmd()/has_cmds() helpers from the virtiofs
test to the avocado_qemu public class.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
tests/acceptance/avocado_qemu/__init__.py | 57 ++++++++++++++++++++++
tests/acceptance/virtiofs_submounts.py | 59 +----------------------
2 files changed, 59 insertions(+), 57 deletions(-)
diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
index b471bee66e0..48c705fe3d2 100644
--- a/tests/acceptance/avocado_qemu/__init__.py
+++ b/tests/acceptance/avocado_qemu/__init__.py
@@ -11,6 +11,7 @@
import logging
import os
import shutil
+import subprocess
import sys
import uuid
import tempfile
@@ -45,6 +46,62 @@
from qemu.accel import tcg_available
from qemu.machine import QEMUMachine
+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):
return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
diff --git a/tests/acceptance/virtiofs_submounts.py b/tests/acceptance/virtiofs_submounts.py
index 46fa65392a1..201645cd740 100644
--- a/tests/acceptance/virtiofs_submounts.py
+++ b/tests/acceptance/virtiofs_submounts.py
@@ -6,67 +6,12 @@
from avocado import skipUnless
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.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):
"""
:avocado: tags=arch:x86_64
--
2.26.2
On 3/15/21 8:08 PM, Philippe Mathieu-Daudé wrote:
> Move the useful has_cmd()/has_cmds() helpers from the virtiofs
> test to the avocado_qemu public class.
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> tests/acceptance/avocado_qemu/__init__.py | 57 ++++++++++++++++++++++
> tests/acceptance/virtiofs_submounts.py | 59 +----------------------
> 2 files changed, 59 insertions(+), 57 deletions(-)
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
>
> diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
> index b471bee66e0..48c705fe3d2 100644
> --- a/tests/acceptance/avocado_qemu/__init__.py
> +++ b/tests/acceptance/avocado_qemu/__init__.py
> @@ -11,6 +11,7 @@
> import logging
> import os
> import shutil
> +import subprocess
> import sys
> import uuid
> import tempfile
> @@ -45,6 +46,62 @@
> from qemu.accel import tcg_available
> from qemu.machine import QEMUMachine
>
> +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):
> return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
>
> diff --git a/tests/acceptance/virtiofs_submounts.py b/tests/acceptance/virtiofs_submounts.py
> index 46fa65392a1..201645cd740 100644
> --- a/tests/acceptance/virtiofs_submounts.py
> +++ b/tests/acceptance/virtiofs_submounts.py
> @@ -6,67 +6,12 @@
>
> from avocado import skipUnless
> 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.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):
> """
> :avocado: tags=arch:x86_64
© 2016 - 2026 Red Hat, Inc.