All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Maxim Levitsky <mlevitsk@redhat.com>,
	qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>
Subject: [PATCH v3 22/22] iotests: Allow check -o data_file
Date: Thu,  7 Nov 2019 17:37:08 +0100	[thread overview]
Message-ID: <20191107163708.833192-23-mreitz@redhat.com> (raw)
In-Reply-To: <20191107163708.833192-1-mreitz@redhat.com>

The problem with allowing the data_file option is that you want to use a
different data file per image used in the test.  Therefore, we need to
allow patterns like -o data_file='$TEST_IMG.data_file'.

Then, we need to filter it out from qemu-img map, qemu-img create, and
remove the data file in _rm_test_img.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
---
 tests/qemu-iotests/common.filter | 23 +++++++++++++++++++++--
 tests/qemu-iotests/common.rc     | 22 +++++++++++++++++++++-
 2 files changed, 42 insertions(+), 3 deletions(-)

diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter
index 8a0169f19a..6902f9d94b 100644
--- a/tests/qemu-iotests/common.filter
+++ b/tests/qemu-iotests/common.filter
@@ -122,7 +122,13 @@ _filter_actual_image_size()
 # replace driver-specific options in the "Formatting..." line
 _filter_img_create()
 {
-    $SED -e "s#$REMOTE_TEST_DIR#TEST_DIR#g" \
+    data_file_filter=()
+    if data_file=$(_get_data_file "$TEST_IMG"); then
+        data_file_filter=(-e "s# data_file=$data_file##")
+    fi
+
+    $SED "${data_file_filter[@]}" \
+        -e "s#$REMOTE_TEST_DIR#TEST_DIR#g" \
         -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
         -e "s#$TEST_DIR#TEST_DIR#g" \
         -e "s#$SOCK_DIR#SOCK_DIR#g" \
@@ -207,9 +213,22 @@ _filter_img_info()
 # human and json output
 _filter_qemu_img_map()
 {
+    # Assuming the data_file value in $IMGOPTS contains a '$TEST_IMG',
+    # create a filter that replaces the data file name by $TEST_IMG.
+    # Example:
+    #   In $IMGOPTS: 'data_file=$TEST_IMG.data_file'
+    #   Then data_file_pattern == '\(.*\).data_file'
+    #   And  data_file_filter  == -e 's#\(.*\).data_file#\1#
+    data_file_filter=()
+    if data_file_pattern=$(_get_data_file '\\(.*\\)'); then
+        data_file_filter=(-e "s#$data_file_pattern#\\1#")
+    fi
+
     $SED -e 's/\([0-9a-fx]* *[0-9a-fx]* *\)[0-9a-fx]* */\1/g' \
         -e 's/"offset": [0-9]\+/"offset": OFFSET/g' \
-        -e 's/Mapped to *//' | _filter_testdir | _filter_imgfmt
+        -e 's/Mapped to *//' \
+        "${data_file_filter[@]}" \
+        | _filter_testdir | _filter_imgfmt
 }
 
 _filter_nbd()
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index a623485f96..a07a10a305 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -297,6 +297,20 @@ _stop_nbd_server()
     fi
 }
 
+# Gets the data_file value from IMGOPTS and replaces the '$TEST_IMG'
+# pattern by '$1'
+# Caution: The replacement is done with sed, so $1 must be escaped
+#          properly.  (The delimiter is '#'.)
+_get_data_file()
+{
+    if ! echo "$IMGOPTS" | grep -q 'data_file='; then
+        return 1
+    fi
+
+    echo "$IMGOPTS" | sed -e 's/.*data_file=\([^,]*\).*/\1/' \
+                    | sed -e "s#\\\$TEST_IMG#$1#"
+}
+
 _make_test_img()
 {
     # extra qemu-img options can be added by tests
@@ -317,7 +331,8 @@ _make_test_img()
     fi
 
     if [ -n "$IMGOPTS" ]; then
-        optstr=$(_optstr_add "$optstr" "$IMGOPTS")
+        imgopts_expanded=$(echo "$IMGOPTS" | sed -e "s#\\\$TEST_IMG#$img_name#")
+        optstr=$(_optstr_add "$optstr" "$imgopts_expanded")
     fi
     if [ -n "$IMGKEYSECRET" ]; then
         object_options="--object secret,id=keysec0,data=$IMGKEYSECRET"
@@ -396,6 +411,11 @@ _rm_test_img()
         # Remove all the extents for vmdk
         "$QEMU_IMG" info "$img" 2>/dev/null | grep 'filename:' | cut -f 2 -d: \
             | xargs -I {} rm -f "{}"
+    elif [ "$IMGFMT" = "qcow2" ]; then
+        # Remove external data file
+        if data_file=$(_get_data_file "$img"); then
+            rm -f "$data_file"
+        fi
     fi
     rm -f "$img"
 }
-- 
2.23.0



  parent reply	other threads:[~2019-11-07 16:54 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-07 16:36 [PATCH v3 00/22] iotests: Allow ./check -o data_file Max Reitz
2019-11-07 16:36 ` [PATCH v3 01/22] iotests: s/qocw2/qcow2/ Max Reitz
2019-11-07 18:02   ` Eric Blake
2019-11-08 15:39   ` Maxim Levitsky
2019-11-07 16:36 ` [PATCH v3 02/22] iotests/qcow2.py: Add dump-header-exts Max Reitz
2019-11-07 16:36 ` [PATCH v3 03/22] iotests/qcow2.py: Split feature fields into bits Max Reitz
2019-11-07 16:36 ` [PATCH v3 04/22] iotests: Add _filter_json_filename Max Reitz
2019-11-07 16:36 ` [PATCH v3 05/22] iotests: Filter refcount_order in 036 Max Reitz
2019-11-07 16:36 ` [PATCH v3 06/22] iotests: Replace IMGOPTS by _unsupported_imgopts Max Reitz
2019-11-07 16:36 ` [PATCH v3 07/22] iotests: Drop compat=1.1 in 050 Max Reitz
2019-11-07 16:36 ` [PATCH v3 08/22] iotests: Let _make_test_img parse its parameters Max Reitz
2019-11-07 16:36 ` [PATCH v3 09/22] iotests: Add -o and --no-opts to _make_test_img Max Reitz
2019-11-07 16:36 ` [PATCH v3 10/22] iotests: Inject space into -ocompat=0.10 in 051 Max Reitz
2019-11-07 16:36 ` [PATCH v3 11/22] iotests: Replace IMGOPTS= by -o Max Reitz
2019-11-07 16:36 ` [PATCH v3 12/22] iotests: Replace IMGOPTS='' by --no-opts Max Reitz
2019-11-07 16:36 ` [PATCH v3 13/22] iotests: Drop IMGOPTS use in 267 Max Reitz
2019-11-07 16:37 ` [PATCH v3 14/22] iotests: Avoid qemu-img create Max Reitz
2019-11-07 16:37 ` [PATCH v3 15/22] iotests: Use _rm_test_img for deleting test images Max Reitz
2019-11-07 16:37 ` [PATCH v3 16/22] iotests: Avoid cp/mv of " Max Reitz
2019-11-07 16:37 ` [PATCH v3 17/22] iotests: Make 091 work with data_file Max Reitz
2019-11-07 16:37 ` [PATCH v3 18/22] iotests: Make 110 " Max Reitz
2019-11-07 16:37 ` [PATCH v3 19/22] iotests: Make 137 " Max Reitz
2019-11-07 16:37 ` [PATCH v3 20/22] iotests: Make 198 " Max Reitz
2019-11-07 16:37 ` [PATCH v3 21/22] iotests: Disable data_file where it cannot be used Max Reitz
2019-11-07 16:45   ` Max Reitz
2019-11-07 16:37 ` Max Reitz [this message]
2019-11-07 21:10 ` [PATCH v3 00/22] iotests: Allow ./check -o data_file no-reply
2019-11-08  9:57   ` Max Reitz
2019-12-17 14:32 ` Max Reitz

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=20191107163708.833192-23-mreitz@redhat.com \
    --to=mreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mlevitsk@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.