diff mbox

[4/4] qemu-iotests: add 053 unaligned compressed image size test

Message ID 1366039054-32536-5-git-send-email-stefanha@redhat.com
State New
Headers show

Commit Message

Stefan Hajnoczi April 15, 2013, 3:17 p.m. UTC
Test that qemu-img convert -c works when input image length is not a
multiple of the cluster size.

Previously an error message would be produced:

  qemu-img: error while compressing sector 0: Input/output error

Now that qcow2 and qcow handle this case the test passes successfully.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 tests/qemu-iotests/053     | 63 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/053.out | 10 ++++++++
 tests/qemu-iotests/group   |  1 +
 3 files changed, 74 insertions(+)
 create mode 100755 tests/qemu-iotests/053
 create mode 100644 tests/qemu-iotests/053.out

Comments

Eric Blake April 15, 2013, 3:38 p.m. UTC | #1
On 04/15/2013 09:17 AM, Stefan Hajnoczi wrote:
> Test that qemu-img convert -c works when input image length is not a
> multiple of the cluster size.
> 
> Previously an error message would be produced:
> 
>   qemu-img: error while compressing sector 0: Input/output error
> 
> Now that qcow2 and qcow handle this case the test passes successfully.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---

> +echo
> +echo "== Creating single sector image =="
> +
> +_make_test_img 512
> +$QEMU_IO -c "write -P0xa 0 512" $TEST_IMG | _filter_qemu_io
> +mv $TEST_IMG $TEST_IMG.orig
> +
> +echo
> +echo "== Converting the image, compressed =="
> +
> +$QEMU_IMG convert -c -O $IMGFMT $TEST_IMG.orig $TEST_IMG
> +_check_test_img
> +
> +# success, all done

Is it worth also testing that qemu-img info on the converted image still
reports that the guest sees a size of 512, to prove that the virtual
size was not expanded as a result of compression tail padding?

With that question answered, you have:
Series: Reviewed-by: Eric Blake <eblake@redhat.com>
Stefan Hajnoczi April 16, 2013, 8:36 a.m. UTC | #2
On Mon, Apr 15, 2013 at 09:38:28AM -0600, Eric Blake wrote:
> On 04/15/2013 09:17 AM, Stefan Hajnoczi wrote:
> > Test that qemu-img convert -c works when input image length is not a
> > multiple of the cluster size.
> > 
> > Previously an error message would be produced:
> > 
> >   qemu-img: error while compressing sector 0: Input/output error
> > 
> > Now that qcow2 and qcow handle this case the test passes successfully.
> > 
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > ---
> 
> > +echo
> > +echo "== Creating single sector image =="
> > +
> > +_make_test_img 512
> > +$QEMU_IO -c "write -P0xa 0 512" $TEST_IMG | _filter_qemu_io
> > +mv $TEST_IMG $TEST_IMG.orig
> > +
> > +echo
> > +echo "== Converting the image, compressed =="
> > +
> > +$QEMU_IMG convert -c -O $IMGFMT $TEST_IMG.orig $TEST_IMG
> > +_check_test_img
> > +
> > +# success, all done
> 
> Is it worth also testing that qemu-img info on the converted image still
> reports that the guest sees a size of 512, to prove that the virtual
> size was not expanded as a result of compression tail padding?

Good point.  Let's beef up the test case.  We can also read the first
sector to verify to still contains 0xa bytes.

Stefan
Kevin Wolf April 16, 2013, 8:53 a.m. UTC | #3
Am 16.04.2013 um 10:36 hat Stefan Hajnoczi geschrieben:
> On Mon, Apr 15, 2013 at 09:38:28AM -0600, Eric Blake wrote:
> > On 04/15/2013 09:17 AM, Stefan Hajnoczi wrote:
> > > Test that qemu-img convert -c works when input image length is not a
> > > multiple of the cluster size.
> > > 
> > > Previously an error message would be produced:
> > > 
> > >   qemu-img: error while compressing sector 0: Input/output error
> > > 
> > > Now that qcow2 and qcow handle this case the test passes successfully.
> > > 
> > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > > ---
> > 
> > > +echo
> > > +echo "== Creating single sector image =="
> > > +
> > > +_make_test_img 512
> > > +$QEMU_IO -c "write -P0xa 0 512" $TEST_IMG | _filter_qemu_io
> > > +mv $TEST_IMG $TEST_IMG.orig
> > > +
> > > +echo
> > > +echo "== Converting the image, compressed =="
> > > +
> > > +$QEMU_IMG convert -c -O $IMGFMT $TEST_IMG.orig $TEST_IMG
> > > +_check_test_img
> > > +
> > > +# success, all done
> > 
> > Is it worth also testing that qemu-img info on the converted image still
> > reports that the guest sees a size of 512, to prove that the virtual
> > size was not expanded as a result of compression tail padding?
> 
> Good point.  Let's beef up the test case.  We can also read the first
> sector to verify to still contains 0xa bytes.

Maybe just qemu-img compare -s both images? And you can add the info as
well just in case that compare is broken...

Kevin
diff mbox

Patch

diff --git a/tests/qemu-iotests/053 b/tests/qemu-iotests/053
new file mode 100755
index 0000000..45d846c
--- /dev/null
+++ b/tests/qemu-iotests/053
@@ -0,0 +1,63 @@ 
+#!/bin/bash
+#
+# Test qemu-img convert when image length is not a multiple of cluster size
+#
+# 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=stefanha@redhat.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1	# failure is the default!
+
+_cleanup()
+{
+	rm -f $TEST_IMG.orig
+	_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 qcow
+_supported_proto file
+_supported_os Linux
+
+echo
+echo "== Creating single sector image =="
+
+_make_test_img 512
+$QEMU_IO -c "write -P0xa 0 512" $TEST_IMG | _filter_qemu_io
+mv $TEST_IMG $TEST_IMG.orig
+
+echo
+echo "== Converting the image, compressed =="
+
+$QEMU_IMG convert -c -O $IMGFMT $TEST_IMG.orig $TEST_IMG
+_check_test_img
+
+# success, all done
+echo "*** done"
+rm -f $seq.full
+status=0
+
diff --git a/tests/qemu-iotests/053.out b/tests/qemu-iotests/053.out
new file mode 100644
index 0000000..1c96b6b
--- /dev/null
+++ b/tests/qemu-iotests/053.out
@@ -0,0 +1,10 @@ 
+QA output created by 053
+
+== Creating single sector image ==
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=512 
+wrote 512/512 bytes at offset 0
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+== Converting the image, compressed ==
+No errors were found on the image.
+*** done
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 73c5966..2fba9a4 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -58,3 +58,4 @@ 
 049 rw auto
 050 rw auto backing quick
 052 rw auto backing
+053 rw auto