[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 32/37] iotests: Factor out qemu_tool_pipe_and_status()
From: |
Kevin Wolf |
Subject: |
[PULL 32/37] iotests: Factor out qemu_tool_pipe_and_status() |
Date: |
Fri, 2 Oct 2020 16:43:40 +0200 |
We have three almost identical functions that call an external process
and return its output and return code. Refactor them into small wrappers
around a common function.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20200924152717.287415-29-kwolf@redhat.com>
Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
tests/qemu-iotests/iotests.py | 49 ++++++++++++++++-------------------
1 file changed, 23 insertions(+), 26 deletions(-)
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index f48460480a..f7ad0c1395 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -88,21 +88,30 @@ luks_default_secret_object = 'secret,id=keysec0,data=' + \
luks_default_key_secret_opt = 'key-secret=keysec0'
-def qemu_img_pipe_and_status(*args: str) -> Tuple[str, int]:
+def qemu_tool_pipe_and_status(tool: str, args: Sequence[str],
+ connect_stderr: bool = True) -> Tuple[str, int]:
"""
- Run qemu-img and return both its output and its exit code
+ Run a tool and return both its output and its exit code
"""
- subp = subprocess.Popen(qemu_img_args + list(args),
+ stderr = subprocess.STDOUT if connect_stderr else None
+ subp = subprocess.Popen(args,
stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
+ stderr=stderr,
universal_newlines=True)
output = subp.communicate()[0]
if subp.returncode < 0:
- sys.stderr.write('qemu-img received signal %i: %s\n'
- % (-subp.returncode,
+ sys.stderr.write('%s received signal %i: %s\n'
+ % (tool, -subp.returncode,
' '.join(qemu_img_args + list(args))))
return (output, subp.returncode)
+def qemu_img_pipe_and_status(*args: str) -> Tuple[str, int]:
+ """
+ Run qemu-img and return both its output and its exit code
+ """
+ full_args = qemu_img_args + list(args)
+ return qemu_tool_pipe_and_status('qemu-img', full_args)
+
def qemu_img(*args: str) -> int:
'''Run qemu-img and return the exit code'''
return qemu_img_pipe_and_status(*args)[1]
@@ -263,19 +272,13 @@ def qemu_nbd(*args):
'''Run qemu-nbd in daemon mode and return the parent's exit code'''
return subprocess.call(qemu_nbd_args + ['--fork'] + list(args))
-def qemu_nbd_early_pipe(*args):
+def qemu_nbd_early_pipe(*args: str) -> Tuple[int, str]:
'''Run qemu-nbd in daemon mode and return both the parent's exit code
and its output in case of an error'''
- subp = subprocess.Popen(qemu_nbd_args + ['--fork'] + list(args),
- stdout=subprocess.PIPE,
- universal_newlines=True)
- output = subp.communicate()[0]
- if subp.returncode < 0:
- sys.stderr.write('qemu-nbd received signal %i: %s\n' %
- (-subp.returncode,
- ' '.join(qemu_nbd_args + ['--fork'] + list(args))))
-
- return subp.returncode, output if subp.returncode else ''
+ full_args = qemu_nbd_args + ['--fork'] + list(args)
+ output, returncode = qemu_tool_pipe_and_status('qemu-nbd', full_args,
+ connect_stderr=False)
+ return returncode, output if returncode else ''
@contextmanager
def qemu_nbd_popen(*args):
@@ -1141,20 +1144,14 @@ def verify_working_luks():
if not working:
notrun(reason)
-def qemu_pipe(*args):
+def qemu_pipe(*args: str) -> str:
"""
Run qemu with an option to print something and exit (e.g. a help option).
:return: QEMU's stdout output.
"""
- args = [qemu_prog] + qemu_opts + list(args)
- subp = subprocess.Popen(args, stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- universal_newlines=True)
- output = subp.communicate()[0]
- if subp.returncode < 0:
- sys.stderr.write('qemu received signal %i: %s\n' %
- (-subp.returncode, ' '.join(args)))
+ full_args = [qemu_prog] + qemu_opts + list(args)
+ output, _ = qemu_tool_pipe_and_status('qemu', full_args)
return output
def supported_formats(read_only=False):
--
2.25.4
- [PULL 26/37] block/export: Move blk to BlockExport, (continued)
- [PULL 26/37] block/export: Move blk to BlockExport, Kevin Wolf, 2020/10/02
- [PULL 23/37] block/export: Move strong user reference to block_exports, Kevin Wolf, 2020/10/02
- [PULL 28/37] block/export: Add query-block-exports, Kevin Wolf, 2020/10/02
- [PULL 30/37] nbd: Merge nbd_export_new() and nbd_export_create(), Kevin Wolf, 2020/10/02
- [PULL 27/37] block/export: Create BlockBackend in blk_exp_add(), Kevin Wolf, 2020/10/02
- [PULL 29/37] block/export: Move writable to BlockExportOptions, Kevin Wolf, 2020/10/02
- [PULL 31/37] nbd: Deprecate nbd-server-add/remove, Kevin Wolf, 2020/10/02
- [PULL 33/37] iotests: Introduce qemu_nbd_list_log(), Kevin Wolf, 2020/10/02
- [PULL 34/37] iotests: Allow supported and unsupported formats at the same time, Kevin Wolf, 2020/10/02
- [PULL 36/37] qemu-storage-daemon: Fix help line for --export, Kevin Wolf, 2020/10/02
- [PULL 32/37] iotests: Factor out qemu_tool_pipe_and_status(),
Kevin Wolf <=
- [PULL 37/37] qcow2: Use L1E_SIZE in qcow2_write_l1_entry(), Kevin Wolf, 2020/10/02
- [PULL 35/37] iotests: Test block-export-* QMP interface, Kevin Wolf, 2020/10/02
- Re: [PULL 00/37] Block layer patches, Peter Maydell, 2020/10/02