The Friday 07 Mar 2014 à 23:55:56 (+0100), Max Reitz wrote : > Add a test for the JSON protocol driver. > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > tests/qemu-iotests/084 | 123 > +++++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/084.out | 39 ++++++++++++++ > tests/qemu-iotests/group | 1 + > 3 files changed, 163 insertions(+) > create mode 100755 tests/qemu-iotests/084 > create mode 100644 tests/qemu-iotests/084.out > > diff --git a/tests/qemu-iotests/084 b/tests/qemu-iotests/084 > new file mode 100755 > index 0000000..75cb0c2 > --- /dev/null > +++ b/tests/qemu-iotests/084 > @@ -0,0 +1,123 @@ > +#!/bin/bash > +# > +# Test case for the JSON block protocol > +# > +# Copyright (C) 2014 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 qcow2 > +_supported_proto file > +_supported_os Linux > + > +# Using an image filename containing quotation marks will render the JSON > data > +# below invalid. In that case, we have little choice but simply not to run > this > +# test. > +case $TEST_IMG in > + *'"'*) > + _notrun "image filename may not contain quotation marks" > + ;; > +esac > + > +IMG_SIZE=64M > + > +# Taken from test 072 > +echo > +echo "=== Testing nested image formats ===" > +echo > + > +TEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE > + > +$QEMU_IO -c 'write -P 42 0 512' -c 'write -P 23 512 512' \ > + -c 'write -P 66 1024 512' "$TEST_IMG.base" | _filter_qemu_io > + > +$QEMU_IMG convert -f raw -O $IMGFMT "$TEST_IMG.base" "$TEST_IMG" > + > +$QEMU_IO -c 'read -P 42 0 512' -c 'read -P 23 512 512' \ > + -c 'read -P 66 1024 512' "json:{ > + \"driver\": \"$IMGFMT\", > + \"file\": { > + \"driver\": \"$IMGFMT\", > + \"file\": { > + \"filename\": \"$TEST_IMG\" > + } > + } > +}" | _filter_qemu_io > + > +# This should fail (see test 072) > +$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io > + > + > +# Taken from test 071 > +echo > +echo "=== Testing blkdebug ===" > +echo > + > +_make_test_img $IMG_SIZE > + > +$QEMU_IO -c 'write -P 42 0x38000 512' "$TEST_IMG" | _filter_qemu_io > + > +# The "image.filename" part tests whether "a": { "b": "c" } and "a.b": "c" do > +# the same (which they should). > +# This has to use -g to force qemu-io to use BDRV_O_PROTOCOL, since it will > try > +# to determine the format of the file otherwise; due to the complexity of the > +# filename, only raw (or json itself) will work and this will then result in > an > +# error because of the blkdebug part. Thus, use -g. > +$QEMU_IO -c 'read -P 42 0x38000 512' -g "json:{ > + \"driver\": \"$IMGFMT\", > + \"file\": { > + \"driver\": \"blkdebug\", > + \"inject-error\": [{ > + \"event\": \"l2_load\" > + }], > + \"image.filename\": \"$TEST_IMG\" > + } > +}" | _filter_qemu_io > + > + > +echo > +echo "=== Testing qemu-img info output ===" > +echo > + > +# This should output information about the image itself, not about the JSON > +# block device. > +$QEMU_IMG info "json:{\"driver\":\"qcow2\",\"file.filename\":\"$TEST_IMG\"}" > \ > + | _filter_testdir | _filter_imgfmt > + > + > +# success, all done > +echo "*** done" > +rm -f $seq.full > +status=0 > diff --git a/tests/qemu-iotests/084.out b/tests/qemu-iotests/084.out > new file mode 100644 > index 0000000..375dd4a > --- /dev/null > +++ b/tests/qemu-iotests/084.out > @@ -0,0 +1,39 @@ > +QA output created by 084 > + > +=== Testing nested image formats === > + > +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 > +wrote 512/512 bytes at offset 0 > +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +wrote 512/512 bytes at offset 512 > +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +wrote 512/512 bytes at offset 1024 > +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +read 512/512 bytes at offset 0 > +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +read 512/512 bytes at offset 512 > +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +read 512/512 bytes at offset 1024 > +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +Pattern verification failed at offset 0, 512 bytes > +read 512/512 bytes at offset 0 > +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > + > +=== Testing blkdebug === > + > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > +wrote 512/512 bytes at offset 229376 > +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +read failed: Input/output error > + > +=== Testing qemu-img info output === > + > +image: TEST_DIR/t.IMGFMT > +file format: IMGFMT > +virtual size: 64M (67108864 bytes) > +disk size: 324K > +cluster_size: 65536 > +Format specific information: > + compat: 1.1 > + lazy refcounts: false > +*** done > diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group > index 9ec62d2..8f6e835 100644 > --- a/tests/qemu-iotests/group > +++ b/tests/qemu-iotests/group > @@ -85,5 +85,6 @@ > 079 rw auto > 081 rw auto > 082 rw auto quick > +084 rw auto quick > 086 rw auto quick > 087 rw auto quick > -- > 1.9.0 >
Reviewed-by: Benoit Canet <ben...@irqsave.net> >