#!/usr/bin/env bash
#
# Test commit block job where top has two parents
#
# 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=kwolf@redhat.com

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

status=1 # failure is the default!

_cleanup()
{
    _rm_test_img "${TEST_IMG}.mid"
    _rm_test_img "${TEST_IMG}.ovl2"
    _rm_test_img "${TEST_IMG}.ovl3"
    _cleanup_test_img
    _cleanup_qemu
}
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 file
# An external data file would change the query-named-block-nodes output
_unsupported_imgopts data_file

size=64M

echo
echo === Preparing and starting VM ===
echo

TEST_IMG="${TEST_IMG}.base" _make_test_img $size
TEST_IMG="${TEST_IMG}.mid" _make_test_img -o "backing_fmt=$IMGFMT" -b "${TEST_IMG}.base"
_make_test_img -b "${TEST_IMG}.mid" -F $IMGFMT
TEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid" -F $IMGFMT

$QEMU_IO -c 'write -P 0x55 1M 64k' "${TEST_IMG}.mid" | _filter_qemu_io

qemu_comm_method="qmp"
qmp_pretty="y"

_launch_qemu \
    -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.base,node-name=base" \
    -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.mid,node-name=mid,backing=base" \
    -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG},node-name=top,backing=mid" \
    -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.ovl2,node-name=top2,backing=mid"
h=$QEMU_HANDLE
_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" '^}'

echo
echo === Perform commit job ===
echo

_send_qemu_cmd $h \
    "{ 'execute': 'block-commit',
       'arguments': { 'job-id': 'commit0',
                      'device': 'top',
                      'base':'$TEST_IMG.base',
                      'top': '$TEST_IMG.mid' } }" \
    '"status": "null"'
_send_qemu_cmd $h "" "^}"

echo
echo === Check that both top and top2 point to base now ===
echo

_send_qemu_cmd $h "{ 'execute': 'query-named-block-nodes' }" "^}" |
    _filter_generated_node_ids | _filter_actual_image_size | _filter_img_info

_send_qemu_cmd $h "{ 'execute': 'quit' }" "^}"
wait=1 _cleanup_qemu

_img_info
TEST_IMG="$TEST_IMG.ovl2" _img_info


echo
echo === Preparing and starting VM with -drive ===
echo

TEST_IMG="${TEST_IMG}.base" _make_test_img $size
TEST_IMG="${TEST_IMG}.mid" _make_test_img -b "${TEST_IMG}.base" -F $IMGFMT
_make_test_img -b "${TEST_IMG}.mid" -F $IMGFMT
TEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid" -F $IMGFMT
TEST_IMG="${TEST_IMG}.ovl3" _make_test_img -b "${TEST_IMG}.ovl2" -F $IMGFMT

$QEMU_IO -c 'write -P 0x55 1M 64k' "${TEST_IMG}.mid" | _filter_qemu_io

qemu_comm_method="qmp"
qmp_pretty="y"

_launch_qemu \
    -drive "driver=${IMGFMT},file=${TEST_IMG},node-name=top,backing.node-name=mid" \
    -drive "driver=${IMGFMT},file=${TEST_IMG}.ovl3,node-name=top2,backing.backing=mid"
h=$QEMU_HANDLE
_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" '^}'

echo
echo === Perform commit job ===
echo

_send_qemu_cmd $h \
    "{ 'execute': 'block-commit',
       'arguments': { 'job-id': 'commit0',
                      'device': 'top',
                      'base':'$TEST_IMG.base',
                      'top': '$TEST_IMG.mid' } }" \
    '"status": "null"'
_send_qemu_cmd $h "" "^}"

echo
echo === Check that both top and top2 point to base now ===
echo

_send_qemu_cmd $h "{ 'execute': 'query-named-block-nodes' }" "^}" |
    _filter_generated_node_ids | _filter_actual_image_size | _filter_img_info

_send_qemu_cmd $h "{ 'execute': 'quit' }" "^}"
wait=1 _cleanup_qemu

_img_info
TEST_IMG="$TEST_IMG.ovl2" _img_info

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