#!/bin/bash # # Combined test to grow the refcount table and test snapshots. # # Copyright (C) 2009 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 . # # creator owner=kwolf@redhat.com seq=`basename $0` echo "QA output created by $seq" status=1 # failure is the default! _cleanup() { _cleanup_test_img true } trap "_cleanup; exit \$status" 0 1 2 3 15 # get standard environment, filters and checks . ./common.rc . ./common.filter # actually any format that supports snapshots _supported_fmt qcow2 _supported_proto generic _supported_os Linux # Internal snapshots are (currently) impossible with refcount_bits=1 _unsupported_imgopts 'refcount_bits=1[^0-9]' echo echo "creating image" # With 1k clusters a refcount block contains 512 clusters # This makes 512k of the image file covered by a refcount block # A refcount table that spans one clusters has 128 refcount # tables which makes up 64M in the image file. # # We use a 36M image, so initially we can be sure that only one cluster is used # for the refcount table. On the other hand this is big enough to cause a # refcount table growth when rewriting the image after creating one snapshot. size=36M CLUSTER_SIZE=1k _make_test_img $size # Create two snapshots which fill the image with two different patterns echo "creating first snapshot" $QEMU_IO -c "aio_write -P 123 0 $size" "$TEST_IMG" | _filter_qemu_io $QEMU_IMG snapshot -c snap1 "$TEST_IMG" echo "creating second snapshot" $QEMU_IO -c "aio_write -P 165 0 $size" "$TEST_IMG" | _filter_qemu_io $QEMU_IMG snapshot -c snap2 "$TEST_IMG" # Now check the pattern echo "checking first snapshot" $QEMU_IMG snapshot -a snap1 "$TEST_IMG" $QEMU_IO -c "aio_read -P 123 0 $size" "$TEST_IMG" | _filter_qemu_io echo "checking second snapshot" $QEMU_IMG snapshot -a snap2 "$TEST_IMG" $QEMU_IO -c "aio_read -P 165 0 $size" "$TEST_IMG" | _filter_qemu_io echo echo "checking image for errors" _check_test_img # success, all done echo "*** done" rm -f $seq.full status=0