#!/usr/bin/env bash
# group: auto quick
#
# 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=codyprime@gmail.com

seq="$(basename $0)"
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
    _cleanup_qemu
    _cleanup_test_img
    _rm_test_img "$TEST_IMG"
    _rm_test_img "$DEST_IMG"
    rm -f "$TEST_DIR/blkdebug.conf"
}
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 fuse
_supported_os Linux
# blkdebug can only inject errors on bs->file, so external data files
# do not work with this test
_unsupported_imgopts data_file


DEST_IMG="$TEST_IMG.dest"
BLKDEBUG_CONF="$TEST_DIR/blkdebug.conf"

_make_test_img 2M
TEST_IMG=$DEST_IMG _make_test_img 2M

$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

cat > "$BLKDEBUG_CONF" <<EOF
[inject-error]
event = "write_aio"
errno = "5"
once = "on"
EOF

_send_qemu_cmd $QEMU_HANDLE \
    "{'execute': 'drive-mirror',
                 'arguments': {'device': 'testdisk',
                               'format': '$IMGFMT',
                               'target': 'blkdebug:$BLKDEBUG_CONF:$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

# Filter out BLOCK_JOB_ERROR events because they may or may not occur.
# Cancelling the job means resuming it for a bit before it is actually
# aborted, and in that time it may or may not re-encounter the error.
success_or_failure="y" _send_qemu_cmd $QEMU_HANDLE \
    "{'execute': 'block-job-cancel',
                 'arguments': { 'device': 'testdisk',
                                'force': true}}" \
     "BLOCK_JOB_CANCELLED" "Assertion" \
    | grep -v '"BLOCK_JOB_ERROR"' \
    | _filter_block_job_offset

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