Am 22.06.2012 17:08, schrieb Stefan Hajnoczi: > This tests establishes the basic post-conditions of the qcow2 lazy > refcounts features: > > 1. If the image was closed normally, it is marked clean. > > 2. If an allocating write was performed and the image was not close > normally, then it is marked dirty. > > a. Written data can be read back successfully. > b. The image file can be repaired and will be marked clean again. > > Signed-off-by: Stefan Hajnoczi <stefa...@linux.vnet.ibm.com> > --- > tests/qemu-iotests/039 | 99 > ++++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/039.out | 34 +++++++++++++++ > tests/qemu-iotests/group | 1 + > 3 files changed, 134 insertions(+) > create mode 100755 tests/qemu-iotests/039 > create mode 100644 tests/qemu-iotests/039.out > > diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039 > new file mode 100755 > index 0000000..f4f9347 > --- /dev/null > +++ b/tests/qemu-iotests/039 > @@ -0,0 +1,99 @@ > +#!/bin/bash > +# > +# Test qcow2 lazy refcounts > +# > +# Copyright (C) 2012 Red Hat, Inc. > +# Copyright IBM, Corp. 2010 > +# > +# Based on test 038. > +# > +# 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=stefa...@linux.vnet.ibm.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 generic > +_supported_os Linux > + > +size=128M > + > +echo > +echo "== Checking that image is clean on shutdown ==" > + > +IMGOPTS="compat=1.1,lazy_refcounts=on" > +_make_test_img $size > + > +$QEMU_IO -c "write -P 0x5a 0 512" $TEST_IMG | _filter_qemu_io > + > +# The dirty bit must not be set > +./qcow2.py $TEST_IMG dump-header | grep incompatible_features > +_check_test_img > + > +echo > +echo "== Creating a dirty image file ==" > + > +IMGOPTS="compat=1.1,lazy_refcounts=on" > +_make_test_img $size > + > +old_ulimit=$(ulimit -c) > +ulimit -c 0 # do not produce a core dump on abort(3) > +$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" $TEST_IMG | _filter_qemu_io > +ulimit -c "$old_ulimit" > + > +# The dirty bit must be set > +./qcow2.py $TEST_IMG dump-header | grep incompatible_features > +_check_test_img > + > +echo > +echo "== Read-only access must still work ==" > + > +$QEMU_IO -r -c "read -P 0x5a 0 512" $TEST_IMG | _filter_qemu_io
I would add a check here that the dirty bit is still set. Maybe also add a test that the dirty flag is never set with lazy_refcounts=off. Kevin