#!/usr/bin/env bash
# group: rw auto quick
#
# Test that all qcow2 header extensions survive a header rewrite
#
# Copyright (C) 2011 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

# This tests qcow2-specific low-level functionality
_supported_fmt qcow2
_supported_proto file fuse
# We want to test compat=0.10, which does not support external data
# files or refcount widths other than 16 or compression type
_unsupported_imgopts data_file compression_type \
    'refcount_bits=\([^1]\|.\([^6]\|$\)\)'

CLUSTER_SIZE=65536

# qcow2.py output depends on the exact options used, so override the command
# line here as an exception
for compat in "compat=0.10" "compat=1.1"; do

    echo
    echo ===== Testing with -o $compat =====
    echo
    echo === Create image with unknown header extension ===
    echo
    _make_test_img -o $compat 64M
    $PYTHON qcow2.py "$TEST_IMG" add-header-ext 0x12345678 "This is a test header extension"
    _qcow2_dump_header
    _check_test_img

    echo
    echo === Rewrite header with no backing file ===
    echo
    $QEMU_IMG rebase -u -b "" "$TEST_IMG"
    _qcow2_dump_header
    _check_test_img

    echo
    echo === Add a backing file and format ===
    echo
    $QEMU_IMG rebase -u -b "/some/backing/file/path" -F host_device "$TEST_IMG"
    _qcow2_dump_header
done

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