#!/usr/bin/env bash
# group: backing quick
#
# Test qcow backing file warnings
#
# Copyright (C) 2020-2021 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/>.
#

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

status=1 # failure is the default!

_cleanup()
{
    _cleanup_test_img
    _rm_test_img "$TEST_IMG.qcow2"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt qcow
_supported_proto file
_supported_os Linux

size=32M

echo
echo "== qcow backed by qcow =="

TEST_IMG="$TEST_IMG.base" _make_test_img $size
_make_test_img -b "$TEST_IMG.base" $size
_make_test_img -b "$TEST_IMG.base" -F $IMGFMT $size
_img_info

echo
echo "== mismatched command line detection =="

_make_test_img -b "$TEST_IMG.base" -F vmdk
_make_test_img -b "$TEST_IMG.base" -F vmdk $size
echo
# Use of -u bypasses the backing format sanity check
_make_test_img -u -b "$TEST_IMG.base" -F vmdk
_make_test_img -u -b "$TEST_IMG.base" -F vmdk $size
echo
# But the format must still be recognized
_make_test_img -b "$TEST_IMG.base" -F garbage $size
_make_test_img -u -b "$TEST_IMG.base" -F garbage $size
_img_info

echo
echo "== qcow backed by raw =="

rm "$TEST_IMG.base"
truncate --size=$size "$TEST_IMG.base"
_make_test_img -b "$TEST_IMG.base" $size
_make_test_img -b "$TEST_IMG.base" -F raw $size
_img_info

echo
echo "== commit cannot change type of raw backing file =="
TEST_IMG="$TEST_IMG.qcow2" IMGFMT=qcow2 _make_test_img $size
truncate --size=$size "$TEST_IMG.qcow2"
$QEMU_IMG convert -n -f raw -O $IMGFMT "$TEST_IMG.qcow2" "$TEST_IMG"
$QEMU_IMG commit -f $IMGFMT "$TEST_IMG" && echo "unexpected success"
TEST_IMG="$TEST_IMG.base" _img_info

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