From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59433) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vdlzi-0004yR-H7 for qemu-devel@nongnu.org; Tue, 05 Nov 2013 14:08:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vdlzd-0008P5-8i for qemu-devel@nongnu.org; Tue, 05 Nov 2013 14:08:54 -0500 Received: from mx1.redhat.com ([209.132.183.28]:29401) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vdlzc-0008Oq-W8 for qemu-devel@nongnu.org; Tue, 05 Nov 2013 14:08:49 -0500 Message-ID: <5279423A.3050507@redhat.com> Date: Tue, 05 Nov 2013 20:08:42 +0100 From: Max Reitz MIME-Version: 1.0 References: <1383611706-22107-1-git-send-email-mreitz@redhat.com> <1383611706-22107-3-git-send-email-mreitz@redhat.com> <5278B3A9.1040201@linux.vnet.ibm.com> In-Reply-To: <5278B3A9.1040201@linux.vnet.ibm.com> Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 2/2] qemu-iotests: Add test for unbacked mirroring List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wenchao Xia , qemu-devel@nongnu.org Cc: Kevin Wolf , Stefan Hajnoczi On 05.11.2013 10:00, Wenchao Xia wrote: > =D3=DA 2013/11/5 8:35, Max Reitz =D0=B4=B5=C0: >> Add a new test for mirroring unbacked images in "absolute-paths" mode. >> This should work, if possible, but most importantly, qemu should never >> crash. >> >> Signed-off-by: Max Reitz >> --- >> tests/qemu-iotests/070 | 91 ++++++++++++++++++++++++++++++++++++= ++++++++++ >> tests/qemu-iotests/070.out | 33 +++++++++++++++++ >> tests/qemu-iotests/group | 1 + >> 3 files changed, 125 insertions(+) >> create mode 100755 tests/qemu-iotests/070 >> create mode 100644 tests/qemu-iotests/070.out >> >> diff --git a/tests/qemu-iotests/070 b/tests/qemu-iotests/070 >> new file mode 100755 >> index 0000000..25ecf99 >> --- /dev/null >> +++ b/tests/qemu-iotests/070 >> @@ -0,0 +1,91 @@ >> +#!/bin/bash >> +# >> +# Test mirroring block device without backing file in absolute-paths = mode >> +# >> +# Copyright (C) 2013 Red Hat, Inc. >> +# >> +# This program is free software; you can redistribute it and/or modif= y >> +# it under the terms of the GNU General Public License as published b= y >> +# 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 . >> +# >> + >> +# creator >> +owner=3Dmreitz@redhat.com >> + >> +seq=3D"$(basename $0)" >> +echo "QA output created by $seq" >> + >> +here=3D"$PWD" >> +tmp=3D/tmp/$$ >> +status=3D1 # 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 qed qcow2 qcow2 vmdk >> +_supported_proto file >> +_supported_os Linux >> + >> +function do_run_qemu() >> +{ >> + echo Testing: "$@" | _filter_imgfmt >> + $QEMU -nographic -qmp stdio -serial none "$@" >> + echo >> +} >> + >> +function run_qemu() >> +{ >> + # Filter out empty returns and the SHUTDOWN event, because these = may occur >> + # interleaved with the block job events (in a non-deterministic m= anner). >> + # Also, filter out the "Formatting" message which is emitted when= the target >> + # image is created - it contains format-specific information. >> + do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp |\ >> + grep -v '{"return": {}}' | grep -v '"event": "SHUTDOWN"' |\ >> + grep -v '^Formatting' >> +} >> + >> +size=3D128K >> + >> +_make_test_img $size >> + >> +for sync in full top none >> +do >> + >> +echo >> +echo "=3D=3D=3D Mirroring non-backed image in absolute-paths mode wit= h sync=3D$sync =3D=3D=3D" >> +echo >> + >> +run_qemu -drive file=3D"$TEST_IMG",format=3D"$IMGFMT",if=3Dnone,id=3D= disk \ >> + -device virtio-blk-pci,drive=3Ddisk,id=3Dvirtio0 <> +{ "execute": "qmp_capabilities" } >> +{ "execute": "drive-mirror", >> + "arguments": { "device": "disk", "target": "$TEST_IMG.target", >> + "format": "$IMGFMT", "mode": "absolute-paths", >> + "sync": "$sync" } } >> +{ "execute": "quit" } >> +EOF >> + >> +rm -f $TEST_IMG.target >> + >> +done >> + >> +# success, all done >> +echo "*** done" >> +rm -f $seq.full >> +status=3D0 >> diff --git a/tests/qemu-iotests/070.out b/tests/qemu-iotests/070.out >> new file mode 100644 >> index 0000000..246b0f1 >> --- /dev/null >> +++ b/tests/qemu-iotests/070.out >> @@ -0,0 +1,33 @@ >> +QA output created by 070 >> +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D131072 >> + >> +=3D=3D=3D Mirroring non-backed image in absolute-paths mode with sync= =3Dfull =3D=3D=3D >> + >> +Testing: -drive file=3DTEST_DIR/t.IMGFMT,format=3DIMGFMT,if=3Dnone,id= =3Ddisk -device virtio-blk-pci,drive=3Ddisk,id=3Dvirtio0 >> +QMP_VERSION >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "BLOCK_JOB_READY", "data": {"device": "disk", "len": 131072, "offs= et": 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "BLOCK_JOB_COMPLETED", "data": {"device": "disk", "len": 131072, "= offset": 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": t= rue}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": tr= ue}} >> + >> + >> +=3D=3D=3D Mirroring non-backed image in absolute-paths mode with sync= =3Dtop =3D=3D=3D >> + >> +Testing: -drive file=3DTEST_DIR/t.IMGFMT,format=3DIMGFMT,if=3Dnone,id= =3Ddisk -device virtio-blk-pci,drive=3Ddisk,id=3Dvirtio0 >> +QMP_VERSION >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "BLOCK_JOB_READY", "data": {"device": "disk", "len": 131072, "offs= et": 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "BLOCK_JOB_COMPLETED", "data": {"device": "disk", "len": 131072, "= offset": 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": t= rue}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": tr= ue}} >> + >> + >> +=3D=3D=3D Mirroring non-backed image in absolute-paths mode with sync= =3Dnone =3D=3D=3D >> + >> +Testing: -drive file=3DTEST_DIR/t.IMGFMT,format=3DIMGFMT,if=3Dnone,id= =3Ddisk -device virtio-blk-pci,drive=3Ddisk,id=3Dvirtio0 >> +QMP_VERSION >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "BLOCK_JOB_READY", "data": {"device": "disk", "len": 131072, "offs= et": 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "BLOCK_JOB_COMPLETED", "data": {"device": "disk", "len": 131072, "= offset": 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": t= rue}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "e= vent": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": tr= ue}} >> + >> +*** done >> diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group >> index c57ff35..b18b241 100644 >> --- a/tests/qemu-iotests/group >> +++ b/tests/qemu-iotests/group >> @@ -75,3 +75,4 @@ >> 067 rw auto >> 068 rw auto >> 069 rw auto >> +070 rw auto >> > The code seems fine, but why not use python code as 056? I think for > cases that need start qemu, python is better since the infras is ready > and easier to talk with qmp protocol. Creating a bash script is so much easier. ;-) But, yes, you're right, a python script is probably the better way to go. I'll also take a look whether I can extend a current test case instead (as Paolo suggested). Max