#!/bin/bash
#
# qcow2 pattern test, complex patterns including compression and snapshots
# Using patterns for 4k cluster size.
#
#
# 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 <http://www.gnu.org/licenses/>.
#

# creator
owner=kwolf@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
. ./common.pattern

# much of this could be generic for any format supporting snapshots
_supported_fmt qcow2
_supported_proto file
_supported_os Linux

TEST_OFFSETS="0 4294967296"
TEST_OPS="writev read write readv"
CLUSTER_SIZE=4096

_make_test_img 6G

echo "Testing empty image:"
for offset in $TEST_OFFSETS; do
    echo test2: With offset $offset
    io_test2 $offset $CLUSTER_SIZE 256
    _check_test_img
done

# With snapshots
for i in `seq 1 3`; do
    $QEMU_IMG snapshot -c test$i "$TEST_IMG"
    for offset in $TEST_OFFSETS; do
        echo With snapshot test$i, offset $offset
        for op in $TEST_OPS; do
            io_test $op $offset $CLUSTER_SIZE 8
        done
        _check_test_img
    done
done

# success, all done
echo "*** done"
rm -f $seq.full
status=0
