diff mbox

[2/2] block: qemu-iotests for vhdx, read sample dynamic image

Message ID e0b61d0dd2f4b5bddf10b8589cb60346d9ba4f94.1379648036.git.jcody@redhat.com
State New
Headers show

Commit Message

Jeff Cody Sept. 20, 2013, 3:48 a.m. UTC
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.

Signed-off-by: Jeff Cody <jcody@redhat.com>
---
 tests/qemu-iotests/064                             |  62 +++++++++++++++++++++
 tests/qemu-iotests/064.out                         |  14 +++++
 tests/qemu-iotests/common                          |   6 ++
 tests/qemu-iotests/group                           |   1 +
 tests/qemu-iotests/sample_images/MANIFEST          |   5 ++
 .../sample_images/iotest-dynamic-1G.vhdx.bz2       | Bin 0 -> 874 bytes
 6 files changed, 88 insertions(+)
 create mode 100755 tests/qemu-iotests/064
 create mode 100644 tests/qemu-iotests/064.out
 create mode 100644 tests/qemu-iotests/sample_images/iotest-dynamic-1G.vhdx.bz2

diff --git a/tests/qemu-iotests/sample_images/iotest-dynamic-1G.vhdx.bz2 b/tests/qemu-iotests/sample_images/iotest-dynamic-1G.vhdx.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..77d97a0bae2e45b84ad489a77788084cc09331e0
GIT binary patch
literal 874
zcmV-w1C{(jT4*^jL0KkKS)@Vdf&hZIfB*mY_ijz2|NMXYGlTE%z2+coecwBIyV?7?
zRYF<0^&db2mkJrM&`P9@s2TtO0000000001paz-%27#ae0017K&}e8HN-(1kVrigg
z13&{nXwU!#fB~QY0000000001pg_pcpwKcJX_G+7gwSGQGHB2;7>oqbhyZB84Gbd_
zCQULjF*ML*U`z^<ku<01QIpj3N(ZFK)6~-=)Mx+=JwOB0G|{FZpglkU8fXAC(dh%q
zHq|us0A%$&Lxl0c7NkVLFGMRq07UW*2)3emj1{>kK$s^jUBKR?z~CteOe$Qc!=`MK
zpppgLEo&~>A_R+6h=@Ddl1ZgN7+7*hWL09_s<d&+mMmjjw<LrCx2PjFk~{@nV^|kz
z6;cuaQLw8m>{bL}swE6xrU?On8VxK`u45pSB}p6^9?4@FBo_q60jNQ8)7nwfo~p{X
z21&Hu-QCr>IEs=a0NK%&p{HE(oeD(TehV85d6fuURBs<`t5K&|m^Maoo0fjdi=f}{
z>E$yWvA4r~wZiNcLm<7lTF>T|a9Q1JFM7G$o)?hwxePeOZq}`A`za=Z)W^WEd#*Qp
z#kZ!X0!i<$>Ta+f8L@u+=r$sPWWhg>cfbk7O*y(bhdvqNE8G<%ccZNIDKSnW9b)lr
z?+BB(@#_SGMX@o$bqc@{OqyW;7?h|wi9+N-4D|@7-dVn6g4ihCM|pt2A}N5VGk<5?
z{FoRKTsV)8P`B0_=}2A^fU(eP{;OfF)7siztdO#@z6*HnA0O+ly16Hl#BjL02H~Lm
zU#o1s*F84YWNZGN7x>n4q>?0voA1&{kdPzmvi42q4UHtuzRJ>PzbPk0x?j$@OjIC3
z291dl2@(l)mGJeNMy5-7djC|iYdFpGgRa2BeV-I!Lj_~=H)^bLy>S7`E*Kbz7L6m%
z!pI?M^X|&xFCh=b`Ky@r+f7T@9xGSDdF)KJ&1d`VHFb7cxH1v|W<-)Ch@CnRAp<+?
z+_Yc$iVDdxn#!(cW8fGi)&T|p2nYZGK>!1RnrIY~H<Tz)=_E*(j#5Pu)m2EUIYNaE
zB#I@zVuG?vrm|0*DoOy!8h{0W000C45I_K7m<m%&lp-yPP>8%;$rRy2Ky^V+T-`Z@
A&j0`b

literal 0
HcmV?d00001

Comments

Alex Bennée Sept. 20, 2013, 9:10 a.m. UTC | #1
jcody@redhat.com writes:

> 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.

I take it there is additional meta-data in there generated by Windows
Server itself? Otherwise I would be tempted to write a tool to generate
the image on demand so it could be used to trigger other edge cases when
found.

Having said that 874 bytes certainly isn't to heavy a burden for the
repository ;-)

I'm currently pondering what the best way of supporting system images
(i.e. kernel+rootfs) would be to make system regression testing easier.
Unfortunately those images would be far too large to carry in the repo
although there may be some sub-module annex type thing I could try.
Kevin Wolf Sept. 20, 2013, 9:18 a.m. UTC | #2
Am 20.09.2013 um 11:10 hat Alex Bennée geschrieben:
> 
> jcody@redhat.com writes:
> 
> > 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.
> 
> I take it there is additional meta-data in there generated by Windows
> Server itself? Otherwise I would be tempted to write a tool to generate
> the image on demand so it could be used to trigger other edge cases when
> found.
> 
> Having said that 874 bytes certainly isn't to heavy a burden for the
> repository ;-)

Eventually, qemu-img will be able to create VHDX images, but I think the
point is that we compare against real Hyper-V VHDX images to ensure that
we're really reading the spec the same way as they do.

> I'm currently pondering what the best way of supporting system images
> (i.e. kernel+rootfs) would be to make system regression testing easier.
> Unfortunately those images would be far too large to carry in the repo
> although there may be some sub-module annex type thing I could try.

Sounds like you're looking for qemu-tests?

    http://git.qemu.org/?p=qemu-test.git;a=summary

Kevin
Alex Bennée Sept. 20, 2013, 10:54 a.m. UTC | #3
kwolf@redhat.com writes:

> Am 20.09.2013 um 11:10 hat Alex Bennée geschrieben:
>> 
>> jcody@redhat.com writes:
>> 
<<snip>> 
>> I'm currently pondering what the best way of supporting system images
>> (i.e. kernel+rootfs) would be to make system regression testing easier.
>> Unfortunately those images would be far too large to carry in the repo
>> although there may be some sub-module annex type thing I could try.
>
> Sounds like you're looking for qemu-tests?
>
>     http://git.qemu.org/?p=qemu-test.git;a=summary

Thanks, Stefan H had already pointed me at that. I'm currently thinking
of painless ways to integrate those sort of tests in the main tree to
further the regression testing stuff I'm looking at.

Anyway I have already diverted enough of topic so I'll save that
discussion for another thread ;-)
Jeff Cody Sept. 20, 2013, 11:24 a.m. UTC | #4
On Fri, Sep 20, 2013 at 11:18:14AM +0200, Kevin Wolf wrote:
> Am 20.09.2013 um 11:10 hat Alex Bennée geschrieben:
> > 
> > jcody@redhat.com writes:
> > 
> > > 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.
> > 
> > I take it there is additional meta-data in there generated by Windows
> > Server itself? Otherwise I would be tempted to write a tool to generate
> > the image on demand so it could be used to trigger other edge cases when
> > found.
> > 
> > Having said that 874 bytes certainly isn't to heavy a burden for the
> > repository ;-)
> 
> Eventually, qemu-img will be able to create VHDX images, but I think the
> point is that we compare against real Hyper-V VHDX images to ensure that
> we're really reading the spec the same way as they do.
> 

Exactly.  If we use qemu-img to generate test images, we aren't really
testing QEMU's compatibility with non-native formats.

Also, it may be useful to occasionally put native images (qcow2, qed)
in the sample_images directory for some major release, so that we can
run some image format regression tests on image format code changes.


> > I'm currently pondering what the best way of supporting system images
> > (i.e. kernel+rootfs) would be to make system regression testing easier.
> > Unfortunately those images would be far too large to carry in the repo
> > although there may be some sub-module annex type thing I could try.
> 
> Sounds like you're looking for qemu-tests?
> 
>     http://git.qemu.org/?p=qemu-test.git;a=summary
>

There is also autotest:
https://github.com/autotest/virt-test/wiki
diff mbox

Patch

diff --git a/tests/qemu-iotests/064 b/tests/qemu-iotests/064
new file mode 100755
index 0000000..6a17bdb
--- /dev/null
+++ b/tests/qemu-iotests/064
@@ -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 -c "read -pP 0xa5 0 33M" $TEST_IMG | _filter_qemu_io
+
+echo
+echo "=== Verify pattern 0x96, 33M - 66M ==="
+$QEMU_IO -c "read -pP 0x96 33M 33M" $TEST_IMG | _filter_qemu_io
+
+echo
+echo "=== Verify pattern 0x00, 66M - 1024M ==="
+$QEMU_IO -c "read -pP 0x00 66M 958M" $TEST_IMG | _filter_qemu_io
+
+# success, all done
+echo "*** done"
+rm -f $seq.full
+status=0
diff --git a/tests/qemu-iotests/064.out b/tests/qemu-iotests/064.out
new file mode 100644
index 0000000..b9e8e4a
--- /dev/null
+++ b/tests/qemu-iotests/064.out
@@ -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
diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
index fecaf85..311c9e4 100644
--- a/tests/qemu-iotests/common
+++ b/tests/qemu-iotests/common
@@ -133,6 +133,7 @@  check options
     -qed                test qed
     -vdi                test vdi
     -vpc                test vpc
+    -vhdx               test vhdx
     -vmdk               test vmdk
     -rbd                test rbd
     -sheepdog           test sheepdog
@@ -195,6 +196,11 @@  testlist options
             xpand=false
             ;;
 
+        -vhdx)
+            IMGFMT=vhdx
+            xpand=false
+            ;;
+
         -rbd)
             IMGPROTO=rbd
             xpand=false
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 1ad02e5..9e950fd 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -69,3 +69,4 @@ 
 061 rw auto
 062 rw auto
 063 rw auto
+064 rw auto
diff --git a/tests/qemu-iotests/sample_images/MANIFEST b/tests/qemu-iotests/sample_images/MANIFEST
index 7abf287..6e4a7ef 100644
--- a/tests/qemu-iotests/sample_images/MANIFEST
+++ b/tests/qemu-iotests/sample_images/MANIFEST
@@ -1,2 +1,7 @@ 
    Image Filename           |                  Description
 ------------------------------------------------------------------------------
+iotest-dynamic-1G.vhdx.bz2  |  1GB dynamic VHDX image with block size of 32 MB.
+                            |  This image file has a pattern of 33MB of 0xa5,
+                            |  followed by 33MB of 0x96, followed by zeroes.
+                            |  Created with Hyper-V on Windows Server 2012.
+                            |