All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: qemu-block@nongnu.org
Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com,
	den@openvz.org, jsnow@redhat.com, vsementsov@virtuozzo.com
Subject: [PATCH v2 02/17] iotests.py: qemu_img*("create"): support IMGOPTS='compression_type=zstd'
Date: Tue, 20 Jul 2021 14:38:17 +0300	[thread overview]
Message-ID: <20210720113832.586428-3-vsementsov@virtuozzo.com> (raw)
In-Reply-To: <20210720113832.586428-1-vsementsov@virtuozzo.com>

Adding support of IMGOPTS (like in bash tests) allows user to pass a
lot of different options. Still, some may require additional logic.

Now we want compression_type option, so add some smart logic around it:
ignore compression_type=zstd in IMGOPTS, if test want qcow2 in
compatibility mode. As well, ignore compression_type for non-qcow2
formats.

Note that we may instead add support only to qemu_img_create(), but
that works bad:

1. We'll have to update a lot of tests to use qemu_img_create instead
   of qemu_img('create'). (still, we may want do it anyway, but no
   reason to create a dependancy between task of supporting IMGOPTS and
   updating a lot of tests)

2. Some tests use qemu_img_pipe('create', ..) - even more work on
   updating

3. Even if we update all tests to go through qemu_img_create, we'll
   need a way to avoid creating new tests using qemu_img*('create') -
   add assertions.. That doesn't seem good.

So, let's add support of IMGOPTS to most generic
qemu_img_pipe_and_status().

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 tests/qemu-iotests/iotests.py | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index 0d99dd841f..03cc00366e 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -16,6 +16,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+import argparse
 import atexit
 import bz2
 from collections import OrderedDict
@@ -121,11 +122,35 @@ def qemu_tool_pipe_and_status(tool: str, args: Sequence[str],
                                {-subp.returncode}: {cmd}\n')
         return (output, subp.returncode)
 
+def qemu_img_create_prepare_args(args: List[str]) -> List[str]:
+    if not args or args[0] != 'create':
+        return list(args)
+    args = args[1:]
+
+    p = argparse.ArgumentParser(allow_abbrev=False)
+    p.add_argument('-f')
+    parsed, remaining = p.parse_known_args(args)
+
+    result = ['create']
+    if parsed.f is not None:
+        result += ['-f', parsed.f]
+
+    # IMGOPTS most probably contain options specific for the selected format,
+    # like extended_l2 or compression_type for qcow2. Test may want to create
+    # additional images in other formats that doesn't support these options.
+    # So, use IMGOPTS only for images created in imgfmt format.
+    if parsed.f == imgfmt and 'IMGOPTS' in os.environ:
+        result += ['-o', os.environ['IMGOPTS']]
+
+    result += remaining
+
+    return result
+
 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)
+    full_args = qemu_img_args + qemu_img_create_prepare_args(list(args))
     return qemu_tool_pipe_and_status('qemu-img', full_args)
 
 def qemu_img(*args: str) -> int:
-- 
2.29.2



  parent reply	other threads:[~2021-07-20 11:45 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-20 11:38 [PATCH v2 00/17] iotests: support zstd Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 01/17] iotests.py: img_info_log(): rename imgopts argument Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` Vladimir Sementsov-Ogievskiy [this message]
2021-09-13 10:40   ` [PATCH v2 02/17] iotests.py: qemu_img*("create"): support IMGOPTS='compression_type=zstd' Hanna Reitz
2021-07-20 11:38 ` [PATCH v2 03/17] iotests: drop qemu_img_verbose() helper Vladimir Sementsov-Ogievskiy
2021-09-13 10:49   ` Hanna Reitz
2021-07-20 11:38 ` [PATCH v2 04/17] iotests.py: rewrite default luks support in qemu_img Vladimir Sementsov-Ogievskiy
2021-09-13 11:16   ` Hanna Reitz
2021-09-13 13:47     ` Vladimir Sementsov-Ogievskiy
2021-09-14  7:44     ` Vladimir Sementsov-Ogievskiy
2021-09-14  8:02       ` Hanna Reitz
2021-07-20 11:38 ` [PATCH v2 05/17] iotest 303: explicit compression type Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 06/17] iotest 065: " Vladimir Sementsov-Ogievskiy
2021-09-13 11:19   ` Hanna Reitz
2021-07-20 11:38 ` [PATCH v2 07/17] iotests.py: filter out successful output of qemu-img crate Vladimir Sementsov-Ogievskiy
2021-09-13 11:46   ` Hanna Reitz
2021-07-20 11:38 ` [PATCH v2 08/17] iotests.py: filter compression type out Vladimir Sementsov-Ogievskiy
2021-09-13 12:00   ` Hanna Reitz
2021-07-20 11:38 ` [PATCH v2 09/17] iotest 302: use img_info_log() helper Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 10/17] qcow2: simple case support for downgrading of qcow2 images with zstd Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 11/17] iotests/common.rc: introduce _qcow2_dump_header helper Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 12/17] iotests: massive use _qcow2_dump_header Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 13/17] iotest 39: " Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 14/17] iotests: bash tests: filter compression type Vladimir Sementsov-Ogievskiy
2021-09-13 12:25   ` Hanna Reitz
2021-07-20 11:38 ` [PATCH v2 15/17] iotests 60: more accurate set dirty bit in qcow2 header Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 16/17] iotest 214: explicit compression type Vladimir Sementsov-Ogievskiy
2021-07-20 11:38 ` [PATCH v2 17/17] iotests: declare lack of support for compresion_type in IMGOPTS Vladimir Sementsov-Ogievskiy
2021-09-13 12:43   ` Hanna Reitz
2021-09-13 15:55     ` Vladimir Sementsov-Ogievskiy
2021-09-01 13:14 ` [PATCH v2 00/17] iotests: support zstd Vladimir Sementsov-Ogievskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210720113832.586428-3-vsementsov@virtuozzo.com \
    --to=vsementsov@virtuozzo.com \
    --cc=den@openvz.org \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.