#!/usr/bin/env bash
#
# Test QAPI commands looking up protocol based images with relative
# filename backing strings
#
# Copyright (C) 2017 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=jcody@redhat.com

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

status=1    # failure is the default!

_cleanup()
{
    _cleanup_qemu
    rm  -f "${QEMU_TEST_DIR}/image.base" "${QEMU_TEST_DIR}/image.snp1"
    _cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt qcow2
_supported_proto nfs

size=100M

BASE_IMG="${TEST_DIR}/image.base"
TOP_IMG="${TEST_DIR}/image.snp1"

TEST_IMG_FILE="${BASE_IMG}" _make_test_img $size

TEST_IMG_FILE="${TOP_IMG}" _make_test_img $size

echo
echo === Running QEMU, using block-stream to find backing image ===
echo

qemu_comm_method="qmp"
_launch_qemu -drive file="${BASE_IMG}",if=virtio,id=disk2
h=$QEMU_HANDLE

_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" "return"

_send_qemu_cmd $h "{ 'arguments': {
                        'device': 'disk2',
                        'format': '${IMGFMT}',
                        'mode': 'existing',
                        'snapshot-file': '${TOP_IMG}',
                        'snapshot-node-name': 'snp1'
                     },
                     'execute': 'blockdev-snapshot-sync'
                   }" "return"


_send_qemu_cmd $h "{ 'arguments': {
                        'backing-file': 'image.base',
                        'device': 'disk2',
                        'image-node-name': 'snp1'
                     },
                     'execute': 'change-backing-file'
                   }" "return"

_send_qemu_cmd $h "{ 'arguments': {
                        'base': '${BASE_IMG}',
                        'device': 'disk2'
                      },
                      'execute': 'block-stream'
                   }" "BLOCK_JOB_COMPLETED"

_cleanup_qemu

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