Am 13.12.2013 um 18:10 hat Max Reitz geschrieben: > Add a test for the new blkdebug/blkverify interface. > > This test is not written in Python, although it uses QMP. This is > because it invokes the qemu-io HMP command, which outputs errors to > stderr instead of returning them through QMP. Filtering and testing that > output is easier in a shell script than with the Python infrastructure. > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > tests/qemu-iotests/071 | 201 > +++++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/071.out | 73 ++++++++++++++++ > tests/qemu-iotests/group | 1 + > 3 files changed, 275 insertions(+) > create mode 100755 tests/qemu-iotests/071 > create mode 100644 tests/qemu-iotests/071.out > > diff --git a/tests/qemu-iotests/071 b/tests/qemu-iotests/071 > new file mode 100755 > index 0000000..4be525e > --- /dev/null > +++ b/tests/qemu-iotests/071 > @@ -0,0 +1,201 @@ > +#!/bin/bash > +# > +# Test case for the QMP blkdebug and blkverify interfaces > +# > +# 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 > +owner=mre...@redhat.com > + > +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 generic > +_supported_proto generic > +_supported_os Linux > + > +function do_run_qemu() > +{ > + echo Testing: "$@" | _filter_imgfmt > + $QEMU -nographic -qmp stdio -serial none "$@" > + echo > +} > + > +function run_qemu() > +{ > + do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp | _filter_qemu_io > +} > + > +IMG_SIZE=128K
Quite small. :-) > +echo > +echo "=== Testing blkverify through filename ===" > +echo > + > +TEST_IMG="$TEST_IMG.base" IMGOPTS="" IMGFMT="raw" _make_test_img $IMG_SIZE |\ > + _filter_imgfmt > +_make_test_img $IMG_SIZE > +$QEMU_IO -c "open -o file.driver=blkverify,file.raw.filename=$TEST_IMG.base > $TEST_IMG" \ > + -c 'read 0 512' -c 'write -P 42 0x38000 512' -c 'read -P 42 0x38000 > 512' | _filter_qemu_io How about doing a successful write/read pair as well? > +echo > +echo "=== Testing blkverify on existing block device ===" > +echo > + > +run_qemu -drive "file=$TEST_IMG,format=$IMGFMT,if=none,id=drive0" <<EOF > +{ "execute": "qmp_capabilities" } > +{ "execute": "blockdev-add", > + "arguments": { > + "options": { > + "driver": "blkverify", > + "id": "drive0-verify", > + "test": "drive0", > + "raw": { > + "driver": "raw", > + "file": { > + "driver": "file", > + "filename": "$TEST_IMG.base" > + } > + } > + } > + } > +} The other way round would be worth an additional test (i.e. using an existing block device for the raw reference). Anyway, this is just suggestions for improvement, so: Reviewed-by: Kevin Wolf <kw...@redhat.com>