#!/usr/bin/env bash
# group: rw auto
#
# 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 fuse
# 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
