#!/usr/bin/env bash
#
# Test that a backing image is put back in read-only mode after
# block-commit (both when it fails and when it succeeds).
#
# Copyright (C) 2019 Igalia, S.L.
#
# 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=berto@igalia.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.base"
    _rm_test_img "$TEST_IMG.int"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# Any format implementing BlockDriver.bdrv_change_backing_file
_supported_fmt qcow2 qed
_supported_proto file
_supported_os Linux

IMG_SIZE=1M

# Create the images: base <- int <- active
TEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE | _filter_imgfmt
TEST_IMG="$TEST_IMG.int" _make_test_img -b "$TEST_IMG.base" | _filter_imgfmt
_make_test_img -b "$TEST_IMG.int" | _filter_imgfmt

# Launch QEMU with these two drives:
# none0: base (read-only)
# none1: base <- int <- active
_launch_qemu -drive if=none,file="${TEST_IMG}.base",node-name=base,read-only=on \
             -drive if=none,file="${TEST_IMG}",backing.node-name=int,backing.backing=base

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'qmp_capabilities' }" \
    'return'

echo
echo '=== Send a write command to a drive opened in read-only mode (1)'
echo
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}" \
    'return'

echo
echo '=== Run block-commit on base using an invalid filter node name'
echo
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'block-commit',
       'arguments': {'job-id': 'job0', 'device': 'none1', 'top-node': 'int',
                     'filter-node-name': '1234'}}" \
    'error'

echo
echo '=== Send a write command to a drive opened in read-only mode (2)'
echo
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}" \
    'return'

echo
echo '=== Run block-commit on base using the default filter node name'
echo
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'block-commit',
       'arguments': {'job-id': 'job0', 'device': 'none1', 'top-node': 'int'}}" \
    'return'

# Wait for block-commit to finish
_send_qemu_cmd $QEMU_HANDLE '' \
    '"status": "null"'

echo
echo '=== Send a write command to a drive opened in read-only mode (3)'
echo
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}" \
    'return'

_cleanup_qemu

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