#!/bin/bash
#
# test of qemu-img convert -n - convert without creation
#
# Copyright (C) 2009 Red Hat, Inc.
# Copyright (C) 2013 Alex Bligh (alex@alex.org.uk)
#
# 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=alex@alex.org.uk

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

here=`pwd`
tmp=/tmp/$$
status=1	# failure is the default!

_cleanup()
{
	_cleanup_test_img
	rm -f $TEST_IMG.orig $TEST_IMG.raw $TEST_IMG.raw2
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt qcow qcow2 vmdk qed raw
_supported_proto generic
_supported_os Linux

_make_test_img 4M

echo "== Testing conversion with -n fails with no target file =="
# check .orig file does not exist
rm -f $TEST_IMG.orig
if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG $TEST_IMG.orig >/dev/null 2>&1; then
    exit 1
fi

echo "== Testing conversion with -n succeeds with a target file =="
rm -f $TEST_IMG.orig
cp $TEST_IMG $TEST_IMG.orig
if ! $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG $TEST_IMG.orig ; then
    exit 1
fi

echo "== Testing conversion to raw is the same after conversion with -n =="
# compare the raw files
if ! $QEMU_IMG convert -f $IMGFMT -O raw $TEST_IMG $TEST_IMG.raw1 ; then
    exit 1
fi

if ! $QEMU_IMG convert -f $IMGFMT -O raw $TEST_IMG.orig $TEST_IMG.raw2 ; then
    exit 1
fi

if ! cmp $TEST_IMG.raw1 $TEST_IMG.raw2 ; then
    exit 1
fi

echo "== Testing conversion back to original format =="
if ! $QEMU_IMG convert -f raw -O $IMGFMT -n $TEST_IMG.raw2 $TEST_IMG ; then
    exit 1
fi
_check_test_img

echo "== Testing conversion to a smaller file fails =="
rm -f $TEST_IMG.orig
mv $TEST_IMG $TEST_IMG.orig
_make_test_img 2M
if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG.orig $TEST_IMG >/dev/null 2>&1; then
    exit 1
fi

rm -f $TEST_IMG.orig $TEST_IMG.raw $TEST_IMG.raw2

echo "*** done"
rm -f $seq.full
status=0
exit 0
