#!/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_test_img "$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.
# (Filter out the json:{} filename so this test works with external data files)
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' \
    | _filter_json_filename

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' \
    | _filter_json_filename


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