#!/bin/bash
##
## qemu-img compare test
##
##
## 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=mrezanin@redhat.com

seq=`basename $0`
echo "QA output created by $seq"

status=1        # failure is the default!

_cleanup()
{
    echo "Cleanup"
    _cleanup_test_img
    rm ${TEST_IMG2}
}
trap "_cleanup; exit \$status" 0 1 2 3 15

_compare()
{
    $QEMU_IMG compare "$@" $TEST_IMG ${TEST_IMG2}
    echo $?
}

# get standard environment, filters and checks
. ./common.rc
. ./common.filter
. ./common.pattern

_supported_fmt raw qcow qcow2 qed
_supported_proto file
_supported_os Linux

# Setup test basic parameters
TEST_IMG2=$TEST_IMG.2
CLUSTER_SIZE=4096
size=1024M

_make_test_img $size
io_pattern write 524288 $CLUSTER_SIZE $CLUSTER_SIZE 4 45

# Compare identical images
cp $TEST_IMG ${TEST_IMG2}
_compare
_compare -q

# Compare images with different size
$QEMU_IMG resize $TEST_IMG +512M
_compare
_compare -s

# Compare images with different content
io_pattern write 1228800 $CLUSTER_SIZE 0 1 67
_compare
io_pattern write 0 $CLUSTER_SIZE 0 1 123
_compare

# Cleanup
status=0
