diff options
author | Max Reitz <mreitz@redhat.com> | 2014-07-18 20:25:01 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2014-08-20 14:33:42 +0200 |
commit | 911864c6e5f58a86ac987aa4d2e5743851374c05 (patch) | |
tree | c35c1dc6ca737bb7e8cd9359637b42aef8cd6a46 | |
parent | fafcfe228df4353d35ae523e9b78158fb764e79a (diff) |
iotests: Add test for image filename construction
Testing a real in-use protocol such as NBD is hard; testing blkdebug and
blkverify in its stead is easier and tests basically the same
functionality.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rwxr-xr-x | tests/qemu-iotests/099 | 116 | ||||
-rw-r--r-- | tests/qemu-iotests/099.out | 20 | ||||
-rw-r--r-- | tests/qemu-iotests/group | 1 |
3 files changed, 137 insertions, 0 deletions
diff --git a/tests/qemu-iotests/099 b/tests/qemu-iotests/099 new file mode 100755 index 0000000000..a26d3d243e --- /dev/null +++ b/tests/qemu-iotests/099 @@ -0,0 +1,116 @@ +#!/bin/bash +# +# Test valid filenames for blkdebug and blkverify representatively for +# other protocols (such as NBD) when queried +# +# 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=mreitz@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 + +# Basically all formats, but "raw" has issues with _filter_imgfmt regarding the +# raw comparison image for blkverify; also, all images have to support creation +_supported_fmt cow qcow qcow2 qed vdi vhdx vmdk vpc +_supported_proto file +_supported_os Linux + + +function do_run_qemu() +{ + $QEMU -nographic -qmp stdio -serial none "$@" +} + +function run_qemu() +{ + # Get the "file": "foo" entry ($foo may only contain escaped double quotes, + # which is how we can extract it) + do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_imgfmt | _filter_qmp \ + | grep "drv0" \ + | sed -e 's/^.*"file": "\(\(\\"\|[^"]\)*\)".*$/\1/' -e 's/\\"/"/g' +} + +function test_qemu() +{ + run_qemu -drive "if=none,id=drv0,$1" <<EOF + { 'execute': 'qmp_capabilities' } + { 'execute': 'query-block' } + { 'execute': 'quit' } +EOF +} + + + +IMG_SIZE=128K + +_make_test_img $IMG_SIZE +$QEMU_IMG create -f raw "$TEST_IMG.compare" $IMG_SIZE \ + | _filter_testdir | _filter_imgfmt + +echo +echo '=== Testing simple filename for blkverify ===' +echo + +# This should return simply the filename itself +test_qemu "file=blkverify:$TEST_IMG.compare:$TEST_IMG" + +echo +echo '=== Testing filename reconstruction for blkverify ===' +echo + +# This should return the same filename as above +test_qemu "file.driver=blkverify,file.raw.filename=$TEST_IMG.compare,file.test.file.filename=$TEST_IMG" + +echo +echo '=== Testing JSON filename for blkdebug ===' +echo + +# blkdebug cannot create a configuration file, therefore it is unable to +# generate a plain filename here; thus this should return a JSON filename +test_qemu "file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=l1_update" + +echo +echo '=== Testing indirectly enforced JSON filename ===' +echo + +# Because blkdebug cannot return a plain filename, blkverify is forced to +# generate a JSON object here as well +test_qemu "file.driver=blkverify,file.raw.filename=$TEST_IMG.compare,file.test.file.driver=blkdebug,file.test.file.image.filename=$TEST_IMG,file.test.file.inject-error.0.event=l1_update" + + +rm -f "$TEST_IMG.compare" + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 diff --git a/tests/qemu-iotests/099.out b/tests/qemu-iotests/099.out new file mode 100644 index 0000000000..55be4d4c56 --- /dev/null +++ b/tests/qemu-iotests/099.out @@ -0,0 +1,20 @@ +QA output created by 099 +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=131072 +Formatting 'TEST_DIR/t.IMGFMT.compare', fmt=raw size=131072 + +=== Testing simple filename for blkverify === + +blkverify:TEST_DIR/t.IMGFMT.compare:TEST_DIR/t.IMGFMT + +=== Testing filename reconstruction for blkverify === + +blkverify:TEST_DIR/t.IMGFMT.compare:TEST_DIR/t.IMGFMT + +=== Testing JSON filename for blkdebug === + +json:{"driver": "IMGFMT", "file": {"inject-error": [{"immediately": false, "once": false, "state": 0, "sector": -1, "event": "l1_update", "errno": 5}], "image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug"}} + +=== Testing indirectly enforced JSON filename === + +json:{"driver": "raw", "file": {"test": {"driver": "IMGFMT", "file": {"inject-error": [{"immediately": false, "once": false, "state": 0, "sector": -1, "event": "l1_update", "errno": 5}], "image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug"}}, "driver": "blkverify", "raw": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT.compare"}}} +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 1c8d453f4e..f157864c66 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -100,4 +100,5 @@ 091 rw auto quick 092 rw auto quick 095 rw auto quick +099 rw auto quick 103 rw auto quick |