#!/bin/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"

here=`pwd`
status=1 # failure is the default!

_cleanup()
{
    rm -f "${TEST_IMG}.mid"
    rm -f "${TEST_IMG}.ovl2"
    rm -f "${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
_supported_os Linux

size=64M

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

TEST_IMG="${TEST_IMG}.base" _make_test_img $size
IMGOPTS=$(_optstr_add "$IMGOPTS" "backing_fmt=$IMGFMT") \
    TEST_IMG="${TEST_IMG}.mid" _make_test_img -b "${TEST_IMG}.base"
_make_test_img -b "${TEST_IMG}.mid"
TEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid"

$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"
_make_test_img -b "${TEST_IMG}.mid"
TEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid"
TEST_IMG="${TEST_IMG}.ovl3" _make_test_img -b "${TEST_IMG}.ovl2"

$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
