On 05.11.2013 10:00, Wenchao Xia wrote: > δΊ 2013/11/5 8:35, Max Reitz ει: >> 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 <[email protected]> >> --- >> 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 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 >> [email protected] >> + >> +seq="$(basename $0)" >> +echo "QA output created by $seq" >> + >> +here="$PWD" >> +tmp=/tmp/$$ >> +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 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 manner). >> + # 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=128K >> + >> +_make_test_img $size >> + >> +for sync in full top none >> +do >> + >> +echo >> +echo "=== Mirroring non-backed image in absolute-paths mode with sync=$sync >> ===" >> +echo >> + >> +run_qemu -drive file="$TEST_IMG",format="$IMGFMT",if=none,id=disk \ >> + -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF >> +{ "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=0 >> 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=IMGFMT size=131072 >> + >> +=== Mirroring non-backed image in absolute-paths mode with sync=full === >> + >> +Testing: -drive file=TEST_DIR/t.IMGFMT,format=IMGFMT,if=none,id=disk >> -device virtio-blk-pci,drive=disk,id=virtio0 >> +QMP_VERSION >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "BLOCK_JOB_READY", "data": {"device": "disk", "len": 131072, "offset": >> 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "BLOCK_JOB_COMPLETED", "data": {"device": "disk", "len": 131072, "offset": >> 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}} >> + >> + >> +=== Mirroring non-backed image in absolute-paths mode with sync=top === >> + >> +Testing: -drive file=TEST_DIR/t.IMGFMT,format=IMGFMT,if=none,id=disk >> -device virtio-blk-pci,drive=disk,id=virtio0 >> +QMP_VERSION >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "BLOCK_JOB_READY", "data": {"device": "disk", "len": 131072, "offset": >> 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "BLOCK_JOB_COMPLETED", "data": {"device": "disk", "len": 131072, "offset": >> 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}} >> + >> + >> +=== Mirroring non-backed image in absolute-paths mode with sync=none === >> + >> +Testing: -drive file=TEST_DIR/t.IMGFMT,format=IMGFMT,if=none,id=disk >> -device virtio-blk-pci,drive=disk,id=virtio0 >> +QMP_VERSION >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "BLOCK_JOB_READY", "data": {"device": "disk", "len": 131072, "offset": >> 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "BLOCK_JOB_COMPLETED", "data": {"device": "disk", "len": 131072, "offset": >> 131072, "speed": 0, "type": "mirror"}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} >> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": >> "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}} >> + >> +*** 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
