diff mbox

qemu-iotests: Make test 192 use QMP; convert it to Python

Message ID 20170904111616.21333-1-kchamart@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Kashyap Chamarthy Sept. 4, 2017, 11:16 a.m. UTC
The test 192 ("Test NBD export with '-incoming' (non-shared
storage migration use case from libvirt")) is currently using HMP.
Replace the HMP usage with QMP, as the upstream preference seems to be:
"Use QMP where possible, unless you're explicitly testing something
related to HMP".

While at it, convert the test from Bash to Python.

Signed-off-by: Kashyap Chamarthy <kchamart@redhat.com>
---
 tests/qemu-iotests/192     | 78 ++++++++++++++++++----------------------------
 tests/qemu-iotests/192.out | 14 ++++-----
 2 files changed, 38 insertions(+), 54 deletions(-)

Comments

Fam Zheng Sept. 4, 2017, 12:55 p.m. UTC | #1
Hi Kashyap,

On Mon, 09/04 13:16, Kashyap Chamarthy wrote:
> The test 192 ("Test NBD export with '-incoming' (non-shared
> storage migration use case from libvirt")) is currently using HMP.
> Replace the HMP usage with QMP, as the upstream preference seems to be:
> "Use QMP where possible, unless you're explicitly testing something
> related to HMP".
> 
> While at it, convert the test from Bash to Python.
> 
> Signed-off-by: Kashyap Chamarthy <kchamart@redhat.com>
> ---
>  tests/qemu-iotests/192     | 78 ++++++++++++++++++----------------------------
>  tests/qemu-iotests/192.out | 14 ++++-----
>  2 files changed, 38 insertions(+), 54 deletions(-)
> 
> diff --git a/tests/qemu-iotests/192 b/tests/qemu-iotests/192
> index b50a2c0c8e2fccdddfae4ac58ca35937c5f784c6..692475f0a8c80c81396587d3289d4b32c0ee0d21 100755
> --- a/tests/qemu-iotests/192
> +++ b/tests/qemu-iotests/192
> @@ -1,7 +1,4 @@
> -#!/bin/bash
> -#
> -# Test NBD export with -incoming (non-shared storage migration use case from
> -# libvirt)
> +#!/usr/bin/env python
>  #
>  # Copyright (C) 2017 Red Hat, Inc.
>  #
> @@ -18,46 +15,33 @@
>  # 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=famz@redhat.com
> -
> -seq=`basename $0`
> -echo "QA output created by $seq"
> -
> -here=`pwd`
> -status=1	# failure is the default!
> -
> -_cleanup()
> -{
> -	_cleanup_test_img
> -}
> -trap "_cleanup; exit \$status" 0 1 2 3 15
> -
> -# get standard environment, filters and checks
> -. ./common.rc
> -. ./common.filter
> -
> -_supported_fmt generic
> -_supported_proto file
> -_supported_os Linux
> -
> -if [ "$QEMU_DEFAULT_MACHINE" != "pc" ]; then
> -    _notrun "Requires a PC machine"
> -fi
> -
> -size=64M
> -_make_test_img $size
> -
> -{
> -echo "nbd_server_start unix:$TEST_DIR/nbd"
> -echo "nbd_server_add -w drive0"
> -echo "q"
> -} | $QEMU -nodefaults -display none -monitor stdio \
> -    -drive format=$IMGFMT,file=$TEST_IMG,if=ide,id=drive0 \
> -    -incoming defer 2>&1 | _filter_testdir | _filter_qemu | _filter_hmp
> -
> -# success, all done
> -echo "*** done"
> -rm -f $seq.full
> -status=0
> +# Author: Kashyap Chamarthy <kchamart@redhat.com>
> +#         [Converted to Python from the original Bash version by Fam
> +#         Zheng (<famz@redhat.com)]
> +#
> +# Purpose: Test NBD export with '-incoming' (non-shared storage
> +# migration use case from libvirt)
> +
> +import os
> +import atexit
> +import iotests
> +
> +iotests.verify_platform(['linux'])
> +
> +img_size = '1G'
> +test_img_path = os.path.join(iotests.test_dir, 'dest.img')
> +iotests.qemu_img_pipe('create', '-f', iotests.imgfmt, test_img_path, img_size)
> +
> +iotests.log('Launching VM...')
> +nbd_sock_path = os.path.join(iotests.test_dir, 'nbd.sock')
> +dest_vm = (iotests.VM('dest').add_drive(test_img_path)
> +                               .add_incoming('defer'))

Superfluous parenthesis?

> +dest_vm.launch()
> +atexit.register(dest_vm.shutdown)

As an improvement maybe you could rebase to Stefan's "iotests: clean up
resources using context managers" series and switch to "with" for the temp file
and VM.

Otherwise looks good to me.

Fam

> +
> +iotests.log('Launching NBD server on destination...')
> +iotests.log(dest_vm.qmp('nbd-server-start', addr={'type': 'unix', 'data': {'path': nbd_sock_path}}))
> +iotests.log('Exporting the block device to NBD server...')
> +iotests.log(dest_vm.qmp('nbd-server-add', device='drive0', writable=True))
> +iotests.log('Stopping the NBD server on destination...')
> +iotests.log(dest_vm.qmp('nbd-server-stop'))
> diff --git a/tests/qemu-iotests/192.out b/tests/qemu-iotests/192.out
> index 1e0be4c4d7a891f81c2536b87c5a29a21d39138c..f62b94c5641f1a1e60f17090aeb20ed0bc037afd 100644
> --- a/tests/qemu-iotests/192.out
> +++ b/tests/qemu-iotests/192.out
> @@ -1,7 +1,7 @@
> -QA output created by 192
> -Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
> -QEMU X.Y.Z monitor - type 'help' for more information
> -(qemu) nbd_server_start unix:TEST_DIR/nbd
> -(qemu) nbd_server_add -w drive0
> -(qemu) q
> -*** done
> +Launching VM...
> +Launching NBD server on destination...
> +{u'return': {}}
> +Exporting the block device to NBD server...
> +{u'return': {}}
> +Stopping the NBD server on destination...
> +{u'return': {}}
> -- 
> 2.9.5
>
Kashyap Chamarthy Sept. 4, 2017, 1:28 p.m. UTC | #2
On Mon, Sep 04, 2017 at 08:55:23PM +0800, Fam Zheng wrote:
> Hi Kashyap,
> 
> On Mon, 09/04 13:16, Kashyap Chamarthy wrote:

[...]

> > +dest_vm = (iotests.VM('dest').add_drive(test_img_path)
> > +                               .add_incoming('defer'))
> 
> Superfluous parenthesis?

Yes, the paranthesis can be removed and turn it into a single line:
    
  dest_vm = iotests.VM('dest').add_drive(test_img_path).add_incoming('defer')

> > +dest_vm.launch()
> > +atexit.register(dest_vm.shutdown)
> 
> As an improvement maybe you could rebase to Stefan's "iotests: clean up
> resources using context managers" series and switch to "with" for the temp file
> and VM.

Good point.  I did notice that thread[*] about resource clean up.  And I
see it's already applied to 'block-next'.  Will rebase and change to the
'with' statement.

[*] https://lists.nongnu.org/archive/html/qemu-devel/2017-08/msg04639.html

> Otherwise looks good to me.

Thanks for the quick review!

[...]
Daniel P. Berrangé Sept. 4, 2017, 2:48 p.m. UTC | #3
On Mon, Sep 04, 2017 at 01:16:16PM +0200, Kashyap Chamarthy wrote:
> The test 192 ("Test NBD export with '-incoming' (non-shared
> storage migration use case from libvirt")) is currently using HMP.
> Replace the HMP usage with QMP, as the upstream preference seems to be:
> "Use QMP where possible, unless you're explicitly testing something
> related to HMP".
> 
> While at it, convert the test from Bash to Python.

FYI This looks like it'll clash with the patch I sent to fix this
test case with LUKS

https://lists.gnu.org/archive/html/qemu-devel/2017-09/msg00041.html


Regards,
Daniel
Kashyap Chamarthy Sept. 4, 2017, 3:05 p.m. UTC | #4
On Mon, Sep 04, 2017 at 03:48:12PM +0100, Daniel P. Berrange wrote:
> On Mon, Sep 04, 2017 at 01:16:16PM +0200, Kashyap Chamarthy wrote:
> > The test 192 ("Test NBD export with '-incoming' (non-shared
> > storage migration use case from libvirt")) is currently using HMP.
> > Replace the HMP usage with QMP, as the upstream preference seems to be:
> > "Use QMP where possible, unless you're explicitly testing something
> > related to HMP".
> > 
> > While at it, convert the test from Bash to Python.
> 
> FYI This looks like it'll clash with the patch I sent to fix this
> test case with LUKS
> 
> https://lists.gnu.org/archive/html/qemu-devel/2017-09/msg00041.html

Oh, thanks for the pointer.  Then, I think I should wait until yours is
merged, and then rework my changes on top of it.
Eric Blake Sept. 5, 2017, 7:37 p.m. UTC | #5
On 09/04/2017 08:28 AM, Kashyap Chamarthy wrote:
> On Mon, Sep 04, 2017 at 08:55:23PM +0800, Fam Zheng wrote:
>> Hi Kashyap,
>>
>> On Mon, 09/04 13:16, Kashyap Chamarthy wrote:

>>> The test 192 ("Test NBD export with '-incoming' (non-shared
>>> storage migration use case from libvirt")) is currently using HMP.
>>> Replace the HMP usage with QMP, as the upstream preference seems to be:
>>> "Use QMP where possible, unless you're explicitly testing something
>>> related to HMP".

Kevin actually argued that keeping some HMP coverage is a GOOD thing:

https://lists.gnu.org/archive/html/qemu-devel/2017-09/msg00798.html

>>
>> As an improvement maybe you could rebase to Stefan's "iotests: clean up
>> resources using context managers" series and switch to "with" for the temp file
>> and VM.
> 
> Good point.  I did notice that thread[*] about resource clean up.  And I
> see it's already applied to 'block-next'.  Will rebase and change to the
> 'with' statement.

I'm not sure if this patch helps us any; I personally find the unit-test
style python iotests harder to debug than the ones that produce
diff-able nnn.out files (debugging an nnn.out file that has only a list
of ..... doesn't make it easy to reproduce).  If the test already runs
well in shell, what does the conversion to Python actually buy us?
Kashyap Chamarthy Sept. 8, 2017, 10:06 a.m. UTC | #6
On Tue, Sep 05, 2017 at 02:37:21PM -0500, Eric Blake wrote:
> On 09/04/2017 08:28 AM, Kashyap Chamarthy wrote:
> > On Mon, Sep 04, 2017 at 08:55:23PM +0800, Fam Zheng wrote:
> >> Hi Kashyap,
> >>
> >> On Mon, 09/04 13:16, Kashyap Chamarthy wrote:
> 
> >>> The test 192 ("Test NBD export with '-incoming' (non-shared
> >>> storage migration use case from libvirt")) is currently using HMP.
> >>> Replace the HMP usage with QMP, as the upstream preference seems to be:
> >>> "Use QMP where possible, unless you're explicitly testing something
> >>> related to HMP".
> 
> Kevin actually argued that keeping some HMP coverage is a GOOD thing:
> 
> https://lists.gnu.org/archive/html/qemu-devel/2017-09/msg00798.html

Yeah, noticed it after I sent my patch.  I agree with Kevin's argument,
so I'll just simply drop my patch.

> >> As an improvement maybe you could rebase to Stefan's "iotests: clean up
> >> resources using context managers" series and switch to "with" for the temp file
> >> and VM.
> > 
> > Good point.  I did notice that thread[*] about resource clean up.  And I
> > see it's already applied to 'block-next'.  Will rebase and change to the
> > 'with' statement.
> 
> I'm not sure if this patch helps us any; I personally find the unit-test
> style python iotests harder to debug than the ones that produce
> diff-able nnn.out files (debugging an nnn.out file that has only a list
> of ..... doesn't make it easy to reproduce).  If the test already runs
> well in shell, what does the conversion to Python actually buy us? 

While turning it to QMP, thought I'd convert it to Python as the test is
_very_ similar to 194 (also in Python).

Given Kevin's argument in the above thread you pointed out, just
disregard my patch.
diff mbox

Patch

diff --git a/tests/qemu-iotests/192 b/tests/qemu-iotests/192
index b50a2c0c8e2fccdddfae4ac58ca35937c5f784c6..692475f0a8c80c81396587d3289d4b32c0ee0d21 100755
--- a/tests/qemu-iotests/192
+++ b/tests/qemu-iotests/192
@@ -1,7 +1,4 @@ 
-#!/bin/bash
-#
-# Test NBD export with -incoming (non-shared storage migration use case from
-# libvirt)
+#!/usr/bin/env python
 #
 # Copyright (C) 2017 Red Hat, Inc.
 #
@@ -18,46 +15,33 @@ 
 # 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=famz@redhat.com
-
-seq=`basename $0`
-echo "QA output created by $seq"
-
-here=`pwd`
-status=1	# failure is the default!
-
-_cleanup()
-{
-	_cleanup_test_img
-}
-trap "_cleanup; exit \$status" 0 1 2 3 15
-
-# get standard environment, filters and checks
-. ./common.rc
-. ./common.filter
-
-_supported_fmt generic
-_supported_proto file
-_supported_os Linux
-
-if [ "$QEMU_DEFAULT_MACHINE" != "pc" ]; then
-    _notrun "Requires a PC machine"
-fi
-
-size=64M
-_make_test_img $size
-
-{
-echo "nbd_server_start unix:$TEST_DIR/nbd"
-echo "nbd_server_add -w drive0"
-echo "q"
-} | $QEMU -nodefaults -display none -monitor stdio \
-    -drive format=$IMGFMT,file=$TEST_IMG,if=ide,id=drive0 \
-    -incoming defer 2>&1 | _filter_testdir | _filter_qemu | _filter_hmp
-
-# success, all done
-echo "*** done"
-rm -f $seq.full
-status=0
+# Author: Kashyap Chamarthy <kchamart@redhat.com>
+#         [Converted to Python from the original Bash version by Fam
+#         Zheng (<famz@redhat.com)]
+#
+# Purpose: Test NBD export with '-incoming' (non-shared storage
+# migration use case from libvirt)
+
+import os
+import atexit
+import iotests
+
+iotests.verify_platform(['linux'])
+
+img_size = '1G'
+test_img_path = os.path.join(iotests.test_dir, 'dest.img')
+iotests.qemu_img_pipe('create', '-f', iotests.imgfmt, test_img_path, img_size)
+
+iotests.log('Launching VM...')
+nbd_sock_path = os.path.join(iotests.test_dir, 'nbd.sock')
+dest_vm = (iotests.VM('dest').add_drive(test_img_path)
+                               .add_incoming('defer'))
+dest_vm.launch()
+atexit.register(dest_vm.shutdown)
+
+iotests.log('Launching NBD server on destination...')
+iotests.log(dest_vm.qmp('nbd-server-start', addr={'type': 'unix', 'data': {'path': nbd_sock_path}}))
+iotests.log('Exporting the block device to NBD server...')
+iotests.log(dest_vm.qmp('nbd-server-add', device='drive0', writable=True))
+iotests.log('Stopping the NBD server on destination...')
+iotests.log(dest_vm.qmp('nbd-server-stop'))
diff --git a/tests/qemu-iotests/192.out b/tests/qemu-iotests/192.out
index 1e0be4c4d7a891f81c2536b87c5a29a21d39138c..f62b94c5641f1a1e60f17090aeb20ed0bc037afd 100644
--- a/tests/qemu-iotests/192.out
+++ b/tests/qemu-iotests/192.out
@@ -1,7 +1,7 @@ 
-QA output created by 192
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) nbd_server_start unix:TEST_DIR/nbd
-(qemu) nbd_server_add -w drive0
-(qemu) q
-*** done
+Launching VM...
+Launching NBD server on destination...
+{u'return': {}}
+Exporting the block device to NBD server...
+{u'return': {}}
+Stopping the NBD server on destination...
+{u'return': {}}