From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>, qemu-block@nongnu.org
Cc: qemu-devel@nongnu.org
Subject: Re: [PATCH 29/29] iotests: Test block-export-* QMP interface
Date: Thu, 10 Sep 2020 18:11:55 +0200 [thread overview]
Message-ID: <a73ae3dc-a2e6-6035-c27e-42045cee77d6@redhat.com> (raw)
In-Reply-To: <20200907182011.521007-30-kwolf@redhat.com>
[-- Attachment #1.1: Type: text/plain, Size: 8555 bytes --]
On 07.09.20 20:20, Kevin Wolf wrote:
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> tests/qemu-iotests/iotests.py | 11 +++-
> tests/qemu-iotests/307 | 117 ++++++++++++++++++++++++++++++++++
> tests/qemu-iotests/307.out | 111 ++++++++++++++++++++++++++++++++
> tests/qemu-iotests/group | 1 +
> 4 files changed, 239 insertions(+), 1 deletion(-)
> create mode 100755 tests/qemu-iotests/307
> create mode 100644 tests/qemu-iotests/307.out
>
> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
> index 6fed77487e..a842a9f92d 100644
> --- a/tests/qemu-iotests/iotests.py
> +++ b/tests/qemu-iotests/iotests.py
> @@ -67,7 +67,8 @@ if os.environ.get('QEMU_IO_OPTIONS_NO_FMT'):
> qemu_io_args_no_fmt += \
> os.environ['QEMU_IO_OPTIONS_NO_FMT'].strip().split(' ')
>
> -qemu_nbd_args = [os.environ.get('QEMU_NBD_PROG', 'qemu-nbd')]
> +qemu_nbd_prog = [os.environ.get('QEMU_NBD_PROG', 'qemu-nbd')]
It seems counterintuitive to me that something called “*_prog” would be
a list.
> +qemu_nbd_args = qemu_nbd_prog
> if os.environ.get('QEMU_NBD_OPTIONS'):
> qemu_nbd_args += os.environ['QEMU_NBD_OPTIONS'].strip().split(' ')
>
> @@ -283,6 +284,14 @@ def qemu_nbd_early_pipe(*args: str) -> Tuple[int, str]:
> *full_args)
> return returncode, output if returncode else ''
>
> +def qemu_nbd_list(*args: str) -> str:
> + '''Run qemu-nbd to list remote exports'''
> + full_args = qemu_nbd_prog + ['-L'] + list(args)
> + output, _ = qemu_tool_pipe_and_status('qemu-nbd', *full_args)
> + log(output, filters=[filter_testfiles])
Not sure whether I like functions “silently” auto-logging the result.
I’d be happier if it were called *_log (i.e. qemu_nbd_list_log) like
most other functions that do.
> + return output
> +
> +
> @contextmanager
> def qemu_nbd_popen(*args):
> '''Context manager running qemu-nbd within the context'''
This would fit nicely into a dedicated patch.
*shrug*
> diff --git a/tests/qemu-iotests/307 b/tests/qemu-iotests/307
> new file mode 100755
> index 0000000000..06b9eeb15f
> --- /dev/null
> +++ b/tests/qemu-iotests/307
> @@ -0,0 +1,117 @@
> +#!/usr/bin/env python3
> +#
> +# Copyright (C) 2020 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: Kevin Wolf <kwolf@redhat.com>
> +#
> +# Test the block export QAPI interfaces
> +
> +import iotests
> +import os
> +
> +# Formats that have a request alignment != 1 result in different output for
> +# qemu-nbd -L ("min block")
So? Why not filter that out?
I wonder anyway why the whole export output is logged. It seems to me
like it would be sufficient to just log the number of exports available
and their names.
(Sure, logging everything gives us the advantage of perhaps finding NBD
bugs with this test even though it isn’t really an NBD test but intended
largely as a test for the new interface. But when I see something like
“opt block” or “max block” in the output, I get a tingling sensation of
this potentially causing problems in the future depending on where this
test is running.)
((Which is funny, because now I notice I didn’t have this fear for “min
block”, but that’s where you actually did find an issue.))
Though all in all I don’t even know why it is that you write data at all
and use images, instead of just backing the export by a null-co node.
(I do admit I’m sending mixed signals here – first I ask for whether we
couldn’t make this test run on more formats, then I propose abandoning
physical images altogether. I’m just emitting the questions that pop
into my head, and my head can be a confusing place from time to time.)
> +iotests.script_initialize(
> + supported_fmts=['raw', 'qcow2', 'vmdk'],
> + supported_platforms=['linux'],
> +)
> +
> +with iotests.FilePath('image') as img, \
> + iotests.FilePath('socket') as socket, \
The second one should use base_dir=iotests.sock_dir.
> + iotests.VM() as vm:
> +
> + iotests.qemu_img('create', '-f', iotests.imgfmt, img, '64M')
> + iotests.qemu_io_log('-f', iotests.imgfmt, '-c', 'write -P 0x11 0 4k', img)
> +
> + iotests.log('=== Launch VM ===')
> +
> + virtio_scsi_device = iotests.get_virtio_scsi_device()
> +
> + vm.add_object('iothread,id=iothread0')
> + vm.add_blockdev('file,filename=%s,node-name=file' % (img))
> + vm.add_blockdev('%s,file=file,node-name=fmt' % (iotests.imgfmt))
> + vm.add_blockdev('raw,file=file,node-name=ro,read-only=on')
> + vm.add_device('id=scsi0,driver=%s,iothread=iothread0' % virtio_scsi_device)
Format strings would look nicer to me. Perhaps not to you, though.
> + vm.launch()
> +
> + vm.qmp_log('nbd-server-start',
> + addr={'type': 'unix', 'data': {'path': socket}},
> + filters=(iotests.filter_qmp_testfiles, ))
> + vm.qmp_log('query-block-exports')
> +
> + iotests.log('\n=== Create a read-only NBD export ===')
> +
> + vm.qmp_log('block-export-add', id='export0', type='nbd', node_name='fmt')
> + vm.qmp_log('query-block-exports')
> +
> + iotests.qemu_nbd_list('-k', socket)
> +
> + iotests.log('\n=== Try a few invalid things ===')
> +
> + vm.qmp_log('block-export-add', id='#invalid_id', type='nbd', node_name='fmt')
> + vm.qmp_log('block-export-add', id='export0', type='nbd', node_name='fmt')
> + vm.qmp_log('block-export-add', id='export1', type='nbd', node_name='ro',
> + writable=True)
> + vm.qmp_log('block-export-del', id='export1')
> + vm.qmp_log('query-block-exports')
> +
> + iotests.log('\n=== Move export to an iothread ===')
> +
> + vm.qmp_log('device_add', id='sda', driver='scsi-hd', drive='fmt')
> + vm.qmp_log('query-block-exports')
> + iotests.qemu_nbd_list('-k', socket)
> +
> + iotests.log('\n=== Add a writable export ===')
> +
> + # This fails because share-rw=off
> + vm.qmp_log('block-export-add', id='export1', type='nbd', node_name='fmt',
> + name='export1', writable=True, writethrough=True,
> + description='This is the writable second export')
> +
> + vm.qmp_log('device_del', id='sda')
> + event = vm.event_wait(name="DEVICE_DELETED",
> + match={'data': {'device': 'sda'}})
> + iotests.log(event, filters=[iotests.filter_qmp_event])
> + vm.qmp_log('device_add', id='sda', driver='scsi-hd', drive='fmt',
> + share_rw=True)
> +
> + # Now it should work
> + vm.qmp_log('block-export-add', id='export1', type='nbd', node_name='fmt',
> + name='export1', writable=True, writethrough=True,
> + description='This is the writable second export')
> +
> + vm.qmp_log('query-block-exports')
> + iotests.qemu_nbd_list('-k', socket)
> +
> + iotests.log('\n=== Connect qemu-io to export1, try removing exports ===')
> +
> + nbd_url = 'nbd+unix:///export1?socket=%s' % socket
> + qemu_io = iotests.QemuIoInteractive('-f', 'raw', nbd_url)
> +
> + iotests.log(qemu_io.cmd('read -P 0x11 0 4k'),
> + filters=[iotests.filter_qemu_io])
> + iotests.log(qemu_io.cmd('write -P 0x22 4k 4k'),
> + filters=[iotests.filter_qemu_io])
> +
> + vm.qmp_log('block-export-del', id='export1')
> + vm.qmp_log('block-export-del', id='export0')
Should we check for the BLOCK_EXPORT_DELETED event?
> + qemu_io.close()
> +
> + vm.qmp_log('query-block-exports')
> + iotests.qemu_nbd_list('-k', socket)
It might be nice to reconnect with qemu-io, and then see whether a hard
del works.
Max
> +
> + iotests.log('\n=== Shut down QEMU ===')
> + vm.shutdown()
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2020-09-10 16:13 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-07 18:19 [PATCH 00/29] block/export: Add infrastructure and QAPI for block exports Kevin Wolf
2020-09-07 18:19 ` [PATCH 01/29] nbd: Remove unused nbd_export_get_blockdev() Kevin Wolf
2020-09-07 18:19 ` [PATCH 02/29] qapi: Create block-export module Kevin Wolf
2020-09-07 18:19 ` [PATCH 03/29] qapi: Rename BlockExport to BlockExportOptions Kevin Wolf
2020-09-07 18:19 ` [PATCH 04/29] block/export: Add BlockExport infrastructure and block-export-add Kevin Wolf
2020-09-10 10:16 ` Max Reitz
2020-09-07 18:19 ` [PATCH 05/29] qemu-storage-daemon: Use qmp_block_export_add() Kevin Wolf
2020-09-07 18:19 ` [PATCH 06/29] qemu-nbd: Use raw block driver for --offset Kevin Wolf
2020-09-07 18:19 ` [PATCH 07/29] block/export: Remove magic from block-export-add Kevin Wolf
2020-09-10 10:53 ` Max Reitz
2020-09-07 18:19 ` [PATCH 08/29] nbd: Add max-connections to nbd-server-start Kevin Wolf
2020-09-07 18:19 ` [PATCH 09/29] nbd: Add writethrough to block-export-add Kevin Wolf
2020-09-10 11:15 ` Max Reitz
2020-09-07 18:19 ` [PATCH 10/29] nbd: Remove NBDExport.close callback Kevin Wolf
2020-09-07 18:19 ` [PATCH 11/29] qemu-nbd: Use blk_exp_add() to create the export Kevin Wolf
2020-09-07 18:19 ` [PATCH 12/29] nbd/server: Simplify export shutdown Kevin Wolf
2020-09-07 18:19 ` [PATCH 13/29] block/export: Move refcount from NBDExport to BlockExport Kevin Wolf
2020-09-07 18:19 ` [PATCH 14/29] block/export: Move AioContext " Kevin Wolf
2020-09-10 11:52 ` Max Reitz
2020-09-07 18:19 ` [PATCH 15/29] block/export: Add node-name to BlockExportOptions Kevin Wolf
2020-09-10 12:35 ` Max Reitz
2020-09-07 18:19 ` [PATCH 16/29] block/export: Allocate BlockExport in blk_exp_add() Kevin Wolf
2020-09-16 10:56 ` Max Reitz
2020-09-07 18:19 ` [PATCH 17/29] block/export: Add blk_exp_close_all(_type) Kevin Wolf
2020-09-10 13:22 ` Max Reitz
2020-09-07 18:20 ` [PATCH 18/29] block/export: Add 'id' option to block-export-add Kevin Wolf
2020-09-10 13:26 ` Max Reitz
2020-09-07 18:20 ` [PATCH 19/29] block/export: Move strong user reference to block_exports Kevin Wolf
2020-09-10 13:33 ` Max Reitz
2020-09-10 13:36 ` Max Reitz
2020-09-07 18:20 ` [PATCH 20/29] block/export: Add block-export-del Kevin Wolf
2020-09-07 18:20 ` [PATCH 21/29] block/export: Add BLOCK_EXPORT_DELETED event Kevin Wolf
2020-09-10 14:04 ` Max Reitz
2020-09-10 15:12 ` Max Reitz
2020-09-16 14:57 ` Max Reitz
2020-09-07 18:20 ` [PATCH 22/29] block/export: Move blk to BlockExport Kevin Wolf
2020-09-07 18:20 ` [PATCH 23/29] block/export: Create BlockBackend in blk_exp_add() Kevin Wolf
2020-09-10 15:09 ` Max Reitz
2020-09-07 18:20 ` [PATCH 24/29] block/export: Add query-block-exports Kevin Wolf
2020-09-10 15:10 ` Max Reitz
2020-09-07 18:20 ` [PATCH 25/29] block/export: Move writable to BlockExportOptions Kevin Wolf
2020-09-10 15:15 ` Max Reitz
2020-09-07 18:20 ` [PATCH 26/29] nbd: Merge nbd_export_new() and nbd_export_create() Kevin Wolf
2020-09-10 15:30 ` Max Reitz
2020-09-07 18:20 ` [PATCH 27/29] nbd: Deprecate nbd-server-add/remove Kevin Wolf
2020-09-10 15:34 ` Max Reitz
2020-09-23 16:19 ` Kevin Wolf
2020-09-07 18:20 ` [PATCH 28/29] iotests: Factor out qemu_tool_pipe_and_status() Kevin Wolf
2020-09-10 15:45 ` Max Reitz
2020-09-07 18:20 ` [PATCH 29/29] iotests: Test block-export-* QMP interface Kevin Wolf
2020-09-10 16:11 ` Max Reitz [this message]
2020-09-08 8:38 ` [PATCH 00/29] block/export: Add infrastructure and QAPI for block exports Markus Armbruster
2020-09-08 12:29 ` Kevin Wolf
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=a73ae3dc-a2e6-6035-c27e-42045cee77d6@redhat.com \
--to=mreitz@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).