#!/usr/bin/env bash
# group: rw
#
# qcow2 pattern test with various cluster sizes
#
# 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"

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 compression.
_supported_fmt qcow qcow2
_supported_proto file
_supported_os Linux

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

# Can't use 512 byte clusters, the tests use cluster halves
CLUSTER_SIZES="1024 4096 16384 65536"

for CLUSTER_SIZE in $CLUSTER_SIZES; do

    echo "Creating new image; cluster size: $CLUSTER_SIZE"
    echo

    _make_test_img 8G

    echo "Testing empty image"
    echo

    for offset in $TEST_OFFSETS; do
        echo "At offset $offset:"
        for op in $TEST_OPS; do
            io_test $op $offset $CLUSTER_SIZE 3
        done
        _check_test_img
    done

    echo "Compressing image"
    echo

    mv "$TEST_IMG" "$TEST_IMG.orig"
    $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -c "$TEST_IMG.orig" "$TEST_IMG"

    echo "Testing compressed image"
    echo

    for offset in $TEST_OFFSETS; do
        echo "With offset $offset:"
        for op in read readv; do
            io_test $op $offset $CLUSTER_SIZE 3
        done
        _check_test_img
    done

    echo "Testing compressed image with odd offsets"
    echo
    for offset in $TEST_OFFSETS; do
        # Some odd offset (1 sector), so tests will write to areas occupied partly
        # by old (compressed) data and empty clusters
        offset=$((offset + 512))
        echo "With offset $offset:"
        for op in $TEST_OPS; do
            io_test $op $offset $CLUSTER_SIZE 3
        done
        _check_test_img
    done

    echo "Creating another new image"
    echo

    _make_test_img 8G

    echo "More complex patterns"
    echo

    for offset in $TEST_OFFSETS; do
        echo test2: With offset $offset
        io_test2 $offset $CLUSTER_SIZE 4
        _check_test_img
    done

done

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