All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>,
	Kevin Wolf <kwolf@redhat.com>, Alberto Garcia <berto@igalia.com>,
	Eric Blake <eblake@redhat.com>
Subject: [Qemu-devel] [PATCH v12 31/31] iotests: Test json:{} filenames of internal BDSs
Date: Mon, 17 Dec 2018 23:43:48 +0100	[thread overview]
Message-ID: <20181217224348.14922-32-mreitz@redhat.com> (raw)
In-Reply-To: <20181217224348.14922-1-mreitz@redhat.com>

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
---
 tests/qemu-iotests/224     | 139 +++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/224.out |  18 +++++
 tests/qemu-iotests/group   |   1 +
 3 files changed, 158 insertions(+)
 create mode 100755 tests/qemu-iotests/224
 create mode 100644 tests/qemu-iotests/224.out

diff --git a/tests/qemu-iotests/224 b/tests/qemu-iotests/224
new file mode 100755
index 0000000000..ef652ad488
--- /dev/null
+++ b/tests/qemu-iotests/224
@@ -0,0 +1,139 @@
+#!/usr/bin/env python
+#
+# Test json:{} filenames with qemu-internal BDSs
+# (the one of commit, to be precise)
+#
+# Copyright (C) 2018 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Creator/Owner: Max Reitz <mreitz@redhat.com>
+
+import iotests
+from iotests import log, qemu_img, qemu_io_silent, filter_testfiles, \
+                    filter_imgfmt
+import json
+
+# Need backing file support (for arbitrary backing formats)
+iotests.verify_image_format(supported_fmts=['qcow2', 'qcow', 'qed'])
+iotests.verify_platform(['linux'])
+
+
+# There are two variations of this test:
+# (1) We do not set filter_node_name.  In that case, the commit_top
+#     driver should not appear anywhere.
+# (2) We do set filter_node_name.  In that case, it should appear.
+#
+# This for loop executes both.
+for filter_node_name in False, True:
+    log('')
+    log('--- filter_node_name: %s ---' % filter_node_name)
+    log('')
+
+    with iotests.FilePath('base.img') as base_img_path, \
+         iotests.FilePath('mid.img') as mid_img_path, \
+         iotests.FilePath('top.img') as top_img_path, \
+         iotests.VM() as vm:
+
+        assert qemu_img('create', '-f', iotests.imgfmt,
+                        base_img_path, '64M') == 0
+        assert qemu_img('create', '-f', iotests.imgfmt, '-b', base_img_path,
+                        mid_img_path) == 0
+        assert qemu_img('create', '-f', iotests.imgfmt, '-b', mid_img_path,
+                        top_img_path) == 0
+
+        # Something to commit
+        assert qemu_io_silent(mid_img_path, '-c', 'write -P 1 0 1M') == 0
+
+        vm.launch()
+
+        # Change the bottom-most image's backing file (to null-co://)
+        # to enforce json:{} filenames
+        vm.qmp_log('blockdev-add',
+                    node_name='top',
+                    driver=iotests.imgfmt,
+                    file={
+                        'driver': 'file',
+                        'filename': top_img_path
+                    },
+                    backing={
+                        'node-name': 'mid',
+                        'driver': iotests.imgfmt,
+                        'file': {
+                            'driver': 'file',
+                            'filename': mid_img_path
+                        },
+                        'backing': {
+                            'node-name': 'base',
+                            'driver': iotests.imgfmt,
+                            'file': {
+                                'driver': 'file',
+                                'filename': base_img_path
+                            },
+                            'backing': {
+                                'driver': 'null-co'
+                            }
+                        }
+                    },
+                    filters=[filter_testfiles, filter_imgfmt])
+
+        # As long as block-commit does not accept node names, we have to
+        # get our mid/base filenames here
+        mid_name = vm.node_info('mid')['image']['filename']
+        base_name = vm.node_info('base')['image']['filename']
+
+        assert mid_name[:5] == 'json:'
+        assert base_name[:5] == 'json:'
+
+        # Start the block job
+        if filter_node_name:
+            vm.qmp_log('block-commit',
+                        job_id='commit',
+                        device='top',
+                        filter_node_name='filter_node',
+                        top=mid_name,
+                        base=base_name,
+                        speed=1,
+                        filters=[filter_testfiles, filter_imgfmt])
+        else:
+            vm.qmp_log('block-commit',
+                        job_id='commit',
+                        device='top',
+                        top=mid_name,
+                        base=base_name,
+                        speed=1,
+                        filters=[filter_testfiles, filter_imgfmt])
+
+        vm.qmp_log('job-pause', id='commit')
+
+        # Get and parse top's json:{} filename
+        top_name = vm.node_info('top')['image']['filename']
+
+        vm.shutdown()
+
+        assert top_name[:5] == 'json:'
+        top_options = json.loads(top_name[5:])
+
+        if filter_node_name:
+            # This should be present and set
+            assert top_options['backing']['driver'] == 'commit_top'
+            # And the mid image is commit_top's backing image
+            mid_options = top_options['backing']['backing']
+        else:
+            # The mid image should appear as the immediate backing BDS
+            # of top
+            mid_options = top_options['backing']
+
+        assert mid_options['driver'] == iotests.imgfmt
+        assert mid_options['file']['filename'] == mid_img_path
diff --git a/tests/qemu-iotests/224.out b/tests/qemu-iotests/224.out
new file mode 100644
index 0000000000..2eb34438cf
--- /dev/null
+++ b/tests/qemu-iotests/224.out
@@ -0,0 +1,18 @@
+
+--- filter_node_name: False ---
+
+{"execute": "blockdev-add", "arguments": {"backing": {"backing": {"backing": {"driver": "null-co"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-base.img"}, "node-name": "base"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-mid.img"}, "node-name": "mid"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node_name": "top"}}
+{"return": {}}
+{"execute": "block-commit", "arguments": {"base": "json:{\"backing\": {\"driver\": \"null-co\"}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-base.img\"}}", "device": "top", "job_id": "commit", "speed": 1, "top": "json:{\"backing\": {\"backing\": {\"driver\": \"null-co\"}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-base.img\"}}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-mid.img\"}}"}}
+{"return": {}}
+{"execute": "job-pause", "arguments": {"id": "commit"}}
+{"return": {}}
+
+--- filter_node_name: True ---
+
+{"execute": "blockdev-add", "arguments": {"backing": {"backing": {"backing": {"driver": "null-co"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-base.img"}, "node-name": "base"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-mid.img"}, "node-name": "mid"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node_name": "top"}}
+{"return": {}}
+{"execute": "block-commit", "arguments": {"base": "json:{\"backing\": {\"driver\": \"null-co\"}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-base.img\"}}", "device": "top", "filter_node_name": "filter_node", "job_id": "commit", "speed": 1, "top": "json:{\"backing\": {\"backing\": {\"driver\": \"null-co\"}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-base.img\"}}, \"driver\": \"IMGFMT\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/PID-mid.img\"}}"}}
+{"return": {}}
+{"execute": "job-pause", "arguments": {"id": "commit"}}
+{"return": {}}
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 98a895e7e8..2f70e0f8cb 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -224,6 +224,7 @@
 221 rw auto quick
 222 rw auto quick
 223 rw auto quick
+224 rw auto quick
 225 rw auto quick
 226 auto quick
 227 auto quick
-- 
2.19.2

  parent reply	other threads:[~2018-12-17 22:45 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-17 22:43 [Qemu-devel] [PATCH v12 00/31] block: Fix some filename generation issues Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 01/31] block: Use bdrv_refresh_filename() to pull Max Reitz
2018-12-22 15:10   ` Alberto Garcia
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 02/31] block: Use children list in bdrv_refresh_filename Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 03/31] block: Skip implicit nodes for filename info Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 04/31] block: Add BDS.auto_backing_file Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 05/31] block: Respect backing bs in bdrv_refresh_filename Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 06/31] iotests.py: Add filter_imgfmt() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 07/31] iotests.py: Add node_info() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 08/31] iotests: Add test for backing file overrides Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 09/31] block: Make path_combine() return the path Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 10/31] block: bdrv_get_full_backing_filename_from_...'s ret. val Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 11/31] block: bdrv_get_full_backing_filename's " Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 12/31] block: Add bdrv_make_absolute_filename() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 13/31] block: Fix bdrv_find_backing_image() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 14/31] block: Add bdrv_dirname() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 15/31] blkverify: Make bdrv_dirname() return NULL Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 16/31] quorum: " Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 17/31] block/nbd: " Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 18/31] block/nfs: Implement bdrv_dirname() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 19/31] block: Use bdrv_dirname() for relative filenames Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 20/31] iotests: Add quorum case to test 110 Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 21/31] block: Add strong_runtime_opts to BlockDriver Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 22/31] block: Add BlockDriver.bdrv_gather_child_options Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 23/31] block: Generically refresh runtime options Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 24/31] block: Purify .bdrv_refresh_filename() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 25/31] block: Do not copy exact_filename from format file Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 26/31] block/nvme: Fix bdrv_refresh_filename() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 27/31] block/curl: Harmonize option defaults Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 28/31] block/curl: Implement bdrv_refresh_filename() Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 29/31] block/null: Generate filename even with latency-ns Max Reitz
2018-12-17 22:43 ` [Qemu-devel] [PATCH v12 30/31] block: BDS options may lack the "driver" option Max Reitz
2018-12-17 22:43 ` Max Reitz [this message]
2019-01-29 20:51 ` [Qemu-devel] [Qemu-block] [PATCH v12 00/31] block: Fix some filename generation issues John Snow
2019-01-30 13:00   ` 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=20181217224348.14922-32-mreitz@redhat.com \
    --to=mreitz@redhat.com \
    --cc=berto@igalia.com \
    --cc=eblake@redhat.com \
    --cc=kwolf@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.