#!/usr/bin/env bash
# group: rw quick
#
# Test vmdk backing file correlation
#
# Copyright (C) 2018 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.not_base"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# This tests vmdk-specific low-level functionality
_supported_fmt vmdk
_supported_proto file
_supported_os Linux
_unsupported_imgopts "subformat=monolithicFlat" \
                     "subformat=twoGbMaxExtentFlat" \
                     "subformat=twoGbMaxExtentSparse"

TEST_IMG="$TEST_IMG.base" _make_test_img 1M
TEST_IMG="$TEST_IMG.not_base" _make_test_img 1M
_make_test_img -b "$TEST_IMG.base" -F $IMGFMT

make_opts()
{
    node_name=$1
    filename=$2
    backing=$3

    if [ -z "$backing" ]; then
        backing="null"
    else
        backing="'$backing'"
    fi

    echo "{ 'node-name': '$node_name',
            'driver': 'vmdk',
            'file': {
                'driver': 'file',
                'filename': '$filename'
            },
            'backing': $backing }"
}

overlay_opts=$(make_opts overlay "$TEST_IMG" backing)
base_opts=$(make_opts backing "$TEST_IMG.base")
not_base_opts=$(make_opts backing "$TEST_IMG.not_base")

not_vmdk_opts="{ 'node-name': 'backing', 'driver': 'null-co' }"

echo
echo '=== Testing fitting VMDK backing image ==='
echo

qemu_comm_method=monitor \
    _launch_qemu -blockdev "$base_opts" -blockdev "$overlay_opts"

# Should not return an error
_send_qemu_cmd $QEMU_HANDLE 'qemu-io overlay "read 0 512"' 'ops'

_cleanup_qemu


echo
echo '=== Testing unrelated VMDK backing image ==='
echo

qemu_comm_method=monitor \
    _launch_qemu -blockdev "$not_base_opts" -blockdev "$overlay_opts"

# Should fail (gracefully)
_send_qemu_cmd $QEMU_HANDLE 'qemu-io overlay "read 0 512"' 'failed'

_cleanup_qemu


echo
echo '=== Testing non-VMDK backing image ==='
echo

# FIXME: This is the reason why we have to use two -blockdev
# invocations.  You can only fully override the backing file options
# if you either specify a node reference (as done here) or the new
# options contain file.filename (which in this case they do not).
# In other cases, file.filename will be set to whatever the image
# header of the overlay contains (which we do not want).  I consider
# this a FIXME because with -blockdev, you cannot specify "partial"
# options, so setting file.filename but leaving the rest as specified
# by the user does not make sense.
qemu_comm_method=monitor \
    _launch_qemu -blockdev "$not_vmdk_opts" -blockdev "$overlay_opts"

# Should fail (gracefully)
_send_qemu_cmd $QEMU_HANDLE 'qemu-io overlay "read 0 512"' 'failed'

_cleanup_qemu


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