block: qemu-iotests for vhdx, read sample dynamic image

This adds the VHDX format to the qemu-iotests format, and adds
a read test.  The test reads from an existing sample image, that
was created with Hyper-V under Windwos Server 2012.

The image file is a 1GB dynamic image, with 32MB blocks.

The pattern 0xa5 exists from 0MB-33MB (past a block size boundary)

The pattern 0x96 exists from 33MB-66MB (past another block boundary,
and leaving a partial blank block)

From 66MB-1024MB, all reads should return 0.

Although 1GB dynamic image with 66MB of data, the bzip2'ed image
file size is only 874 bytes.

This also adds in the IMGFMT_GENERIC flag, so r/o images can be
tested (e.g. ./check -vhdx) without failing tests that assume
r/w support.

Signed-off-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Jeff Cody 2013-09-27 08:48:15 -04:00 committed by Kevin Wolf
parent 13164591f3
commit 89e911816a
6 changed files with 86 additions and 1 deletions

62
tests/qemu-iotests/064 Executable file
View File

@ -0,0 +1,62 @@
#!/bin/bash
#
# Test VHDX read/write from a sample image created with Hyper-V
#
# 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=jcody@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 vhdx
_supported_proto generic
_supported_os Linux
_use_sample_img iotest-dynamic-1G.vhdx.bz2
echo
echo "=== Verify pattern 0xa5, 0 - 33MB ==="
$QEMU_IO -r -c "read -pP 0xa5 0 33M" "$TEST_IMG" | _filter_qemu_io
echo
echo "=== Verify pattern 0x96, 33M - 66M ==="
$QEMU_IO -r -c "read -pP 0x96 33M 33M" "$TEST_IMG" | _filter_qemu_io
echo
echo "=== Verify pattern 0x00, 66M - 1024M ==="
$QEMU_IO -r -c "read -pP 0x00 66M 958M" "$TEST_IMG" | _filter_qemu_io
# success, all done
echo "*** done"
rm -f $seq.full
status=0

View File

@ -0,0 +1,14 @@
QA output created by 064
=== Verify pattern 0xa5, 0 - 33MB ===
read 34603008/34603008 bytes at offset 0
33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
=== Verify pattern 0x96, 33M - 66M ===
read 34603008/34603008 bytes at offset 34603008
33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
=== Verify pattern 0x00, 66M - 1024M ===
read 1004535808/1004535808 bytes at offset 69206016
958 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
*** done

View File

@ -45,6 +45,7 @@ valgrind=false
rm -f $tmp.list $tmp.tmp $tmp.sed rm -f $tmp.list $tmp.tmp $tmp.sed
export IMGFMT=raw export IMGFMT=raw
export IMGFMT_GENERIC=true
export IMGPROTO=file export IMGPROTO=file
export IMGOPTS="" export IMGOPTS=""
export QEMU_IO_OPTIONS="" export QEMU_IO_OPTIONS=""
@ -133,6 +134,7 @@ check options
-qed test qed -qed test qed
-vdi test vdi -vdi test vdi
-vpc test vpc -vpc test vpc
-vhdx test vhdx
-vmdk test vmdk -vmdk test vmdk
-rbd test rbd -rbd test rbd
-sheepdog test sheepdog -sheepdog test sheepdog
@ -195,6 +197,12 @@ testlist options
xpand=false xpand=false
;; ;;
-vhdx)
IMGFMT=vhdx
xpand=false
IMGFMT_GENERIC=false
;;
-rbd) -rbd)
IMGPROTO=rbd IMGPROTO=rbd
xpand=false xpand=false

View File

@ -339,7 +339,7 @@ _fail()
_supported_fmt() _supported_fmt()
{ {
for f; do for f; do
if [ "$f" = "$IMGFMT" -o "$f" = "generic" ]; then if [ "$f" = "$IMGFMT" -o "$f" = "generic" -a "$IMGFMT_GENERIC" = "true" ]; then
return return
fi fi
done done

View File

@ -69,5 +69,6 @@
061 rw auto 061 rw auto
062 rw auto 062 rw auto
063 rw auto 063 rw auto
064 rw auto
065 rw auto 065 rw auto
066 rw auto 066 rw auto