diff mbox

[3/3] qemu-iotests: Test new qemu-nbd --nolist option

Message ID 20180413192605.2145-4-nirsof@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Nir Soffer April 13, 2018, 7:26 p.m. UTC
Add new test module for tesing the --nolist option.

Signed-off-by: Nir Soffer <nirsof@gmail.com>
---
 tests/qemu-iotests/214     | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/214.out |  2 ++
 tests/qemu-iotests/group   |  1 +
 3 files changed, 49 insertions(+)
 create mode 100755 tests/qemu-iotests/214
 create mode 100644 tests/qemu-iotests/214.out

Comments

Eric Blake April 17, 2018, 7:56 p.m. UTC | #1
On 04/13/2018 02:26 PM, Nir Soffer wrote:
> Add new test module for tesing the --nolist option.
> 
> Signed-off-by: Nir Soffer <nirsof@gmail.com>
> ---

> +iotests.log('Check that listing exports is allowed by default')
> +disk, nbd_sock = iotests.file_path('disk1', 'nbd-sock1')
> +iotests.qemu_img_create('-f', iotests.imgfmt, disk, '1m')
> +iotests.qemu_nbd('-k', nbd_sock, '-f', iotests.imgfmt, '-x', 'export', disk)
> +out = iotests.run('nbd-client', '-l', '--unix', nbd_sock)

Should we really be relying on the third-party nbd-client to be
installed?  Would it not be better to teach our own NBD client to learn
how to do interesting things over NBD?  Your use case of listing the
output of NBD_OPT_LIST is one, but another that readily comes to mind is
listing the possibilities of NBD_OPT_LIST_META_CONTEXT that just went
into 2.12.  Maybe making 'qemu-img info' give more details when
connecting to an NBD server, compared to what is normally needed just
for connecting to an export on that server?

Additionally, once we merge in Vladimir's work to expose persistent
dirty bitmaps via NBD_OPT_SET_META_CONTEXT/NBD_CMD_BLOCK_STATUS, it
would be nice to have an in-tree tool for reading out the context
information of an NBD export, perhaps extending what 'qemu-img map' can
already do (Vladimir already mentioned that he only implemented the
server side, and left the client side for an out-of-tree solution [1],
although I'm wondering if that is still the wisest course of action).

[1] https://lists.gnu.org/archive/html/qemu-devel/2018-03/msg05701.html

> +
> +assert 'export' in out.splitlines(), 'Export not in %r' % out
> +
> +iotests.log('Check that listing exports is forbidden with --nolist')
> +disk, nbd_sock = iotests.file_path('disk2', 'nbd-sock2')
> +iotests.qemu_img_create('-f', iotests.imgfmt, disk, '1m')
> +iotests.qemu_nbd('-k', nbd_sock, '-f', iotests.imgfmt, '-x', 'secret',
> +                 '--nolist', disk)
> +
> +# nbd-client fails when listing is not allowed, but lets not depend on 3rd

s/lets/let's/
Vladimir Sementsov-Ogievskiy April 18, 2018, 9:43 a.m. UTC | #2
17.04.2018 22:56, Eric Blake wrote:
> On 04/13/2018 02:26 PM, Nir Soffer wrote:
>> Add new test module for tesing the --nolist option.
>>
>> Signed-off-by: Nir Soffer <nirsof@gmail.com>
>> ---
>> +iotests.log('Check that listing exports is allowed by default')
>> +disk, nbd_sock = iotests.file_path('disk1', 'nbd-sock1')
>> +iotests.qemu_img_create('-f', iotests.imgfmt, disk, '1m')
>> +iotests.qemu_nbd('-k', nbd_sock, '-f', iotests.imgfmt, '-x', 'export', disk)
>> +out = iotests.run('nbd-client', '-l', '--unix', nbd_sock)
> Should we really be relying on the third-party nbd-client to be
> installed?  Would it not be better to teach our own NBD client to learn
> how to do interesting things over NBD?  Your use case of listing the
> output of NBD_OPT_LIST is one, but another that readily comes to mind is
> listing the possibilities of NBD_OPT_LIST_META_CONTEXT that just went
> into 2.12.  Maybe making 'qemu-img info' give more details when
> connecting to an NBD server, compared to what is normally needed just
> for connecting to an export on that server?
>
> Additionally, once we merge in Vladimir's work to expose persistent
> dirty bitmaps via NBD_OPT_SET_META_CONTEXT/NBD_CMD_BLOCK_STATUS, it
> would be nice to have an in-tree tool for reading out the context
> information of an NBD export, perhaps extending what 'qemu-img map' can
> already do (Vladimir already mentioned that he only implemented the
> server side, and left the client side for an out-of-tree solution [1],
> although I'm wondering if that is still the wisest course of action).
>
> [1]

Client part for base:allocation is done, and qemu-img map shows it, 
client part for dirty bitmaps export - isn't.


>
>> +
>> +assert 'export' in out.splitlines(), 'Export not in %r' % out
>> +
>> +iotests.log('Check that listing exports is forbidden with --nolist')
>> +disk, nbd_sock = iotests.file_path('disk2', 'nbd-sock2')
>> +iotests.qemu_img_create('-f', iotests.imgfmt, disk, '1m')
>> +iotests.qemu_nbd('-k', nbd_sock, '-f', iotests.imgfmt, '-x', 'secret',
>> +                 '--nolist', disk)
>> +
>> +# nbd-client fails when listing is not allowed, but lets not depend on 3rd
> s/lets/let's/
>
diff mbox

Patch

diff --git a/tests/qemu-iotests/214 b/tests/qemu-iotests/214
new file mode 100755
index 0000000000..779e382070
--- /dev/null
+++ b/tests/qemu-iotests/214
@@ -0,0 +1,46 @@ 
+#!/usr/bin/env python
+#
+# Test qemu-nbd compatibility with other tools.
+#
+# Copyright (C) 2018 Nir Soffer <nirsof@gmail.com>
+#
+# 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/>.
+#
+
+import iotests
+
+iotests.verify_image_format(supported_fmts=['raw'])
+
+iotests.log('Check that listing exports is allowed by default')
+disk, nbd_sock = iotests.file_path('disk1', 'nbd-sock1')
+iotests.qemu_img_create('-f', iotests.imgfmt, disk, '1m')
+iotests.qemu_nbd('-k', nbd_sock, '-f', iotests.imgfmt, '-x', 'export', disk)
+out = iotests.run('nbd-client', '-l', '--unix', nbd_sock)
+
+assert 'export' in out.splitlines(), 'Export not in %r' % out
+
+iotests.log('Check that listing exports is forbidden with --nolist')
+disk, nbd_sock = iotests.file_path('disk2', 'nbd-sock2')
+iotests.qemu_img_create('-f', iotests.imgfmt, disk, '1m')
+iotests.qemu_nbd('-k', nbd_sock, '-f', iotests.imgfmt, '-x', 'secret',
+                 '--nolist', disk)
+
+# nbd-client fails when listing is not allowed, but lets not depend on 3rd
+# party tool behavior here.
+try:
+    out = iotests.run('nbd-client', '-l', '--unix', nbd_sock)
+    assert 'secret' not in out, 'Export in %r' % out
+except iotests.CommandFailed as e:
+    # This text comes from qemu-nbd.
+    assert 'Listing exports is forbidden' in e.err, 'Unexpected error: %s' % e
diff --git a/tests/qemu-iotests/214.out b/tests/qemu-iotests/214.out
new file mode 100644
index 0000000000..dae61b5a57
--- /dev/null
+++ b/tests/qemu-iotests/214.out
@@ -0,0 +1,2 @@ 
+Check that listing exports is allowed by default
+Check that listing exports is forbidden with --nolist
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 52a80f3f9e..a820dcb91f 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -212,3 +212,4 @@ 
 211 rw auto quick
 212 rw auto quick
 213 rw auto quick
+214 rw auto quick