#!/usr/bin/env bash
#
# Test case for relative backing file names in complex BDS trees
#
# Copyright (C) 2014 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=mreitz@redhat.com

seq="$(basename $0)"
echo "QA output created by $seq"

status=1	# failure is the default!

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

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

# Any format supporting backing files
_supported_fmt qed qcow qcow2 vmdk
_supported_proto file
_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
                     "subformat=twoGbMaxExtentSparse"

TEST_IMG_REL=$(basename "$TEST_IMG")

echo
echo '=== Reconstructable filename ==='
echo

TEST_IMG="$TEST_IMG.base" _make_test_img 64M
_make_test_img -b "$TEST_IMG_REL.base" 64M
# qemu should be able to reconstruct the filename, so relative backing names
# should work
# (We have to filter the backing file format because vmdk always
# reports it (as vmdk), whereas other image formats would do so only
# with the backing_fmt creation option, which neither vmdk nor qcow
# support)
TEST_IMG="json:{'driver':'$IMGFMT','file':{'driver':'file','filename':'$TEST_IMG'}}" \
    _img_info | _filter_img_info | grep -v 'backing file format'

echo
echo '=== Non-reconstructable filename ==='
echo

# Across blkdebug without a config file, you cannot reconstruct filenames, so
# qemu is incapable of knowing the directory of the top image from the filename
# alone. However, using bdrv_dirname(), it should still work.
TEST_IMG="json:{
    'driver': '$IMGFMT',
    'file': {
        'driver': 'blkdebug',
        'image': {
            'driver': 'file',
            'filename': '$TEST_IMG'
        },
        'set-state': [
            {
                'event': 'read_aio',
                'new_state': 42
            }
        ]
    }
}" _img_info | _filter_img_info | grep -v 'backing file format'

echo
echo '=== Backing name is always relative to the backed image ==='
echo

# omit the image size; it should work anyway
_make_test_img -b "$TEST_IMG_REL.base"

echo
echo '=== Nodes without a common directory ==='
echo

cp "$TEST_IMG" "$TEST_IMG.copy"

# Should inform us that the actual path of the backing file cannot be determined
TEST_IMG="json:{
    'driver': '$IMGFMT',
    'file': {
        'driver': 'quorum',
        'vote-threshold': 1,
        'children': [
            {
                'driver': 'file',
                'filename': '$TEST_IMG'
            },
            {
                'driver': 'file',
                'filename': '$TEST_IMG.copy'
            }
        ]
    }
}" _img_info | _filter_img_info | grep -v 'backing file format'


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