#!/bin/bash
#
# Test for force canceling a running blockjob that is paused in
# an error state.
#
# Copyright (C) 2018 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
    _cleanup_test_img
    rm -f "$TEST_IMG" "$DEST_IMG"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# Needs backing file and backing format support
_supported_fmt qcow2 qed
_supported_proto file
_supported_os Linux


DEST_IMG="$TEST_DIR/d.$IMGFMT"
TEST_IMG="$TEST_DIR/b.$IMGFMT"

_make_test_img 2M

# destination for mirror will be too small, causing error
TEST_IMG=$DEST_IMG _make_test_img 1M

$QEMU_IO -c 'write 0 2M' "$TEST_IMG" | _filter_qemu_io

_launch_qemu -drive id=testdisk,file="$TEST_IMG",format="$IMGFMT"

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

echo
echo '=== Starting drive-mirror, causing error & stop  ==='
echo

_send_qemu_cmd $QEMU_HANDLE \
    "{'execute': 'drive-mirror',
                 'arguments': {'device': 'testdisk',
                               'format': '$IMGFMT',
                               'target': '$DEST_IMG',
                               'sync':   'full',
                               'mode':   'existing',
                               'on-source-error': 'stop',
                               'on-target-error': 'stop' }}"    \
     "JOB_STATUS_CHANGE.*pause"

echo
echo '=== Force cancel job paused in error state  ==='
echo

success_or_failure="y" _send_qemu_cmd $QEMU_HANDLE \
    "{'execute': 'block-job-cancel',
                 'arguments': { 'device': 'testdisk',
                                'force': true}}" \
     "BLOCK_JOB_CANCELLED" "Assertion"

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