#!/usr/bin/env bash
#
# Test case for mirroring with dataplane
#
# 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=mreitz@redhat.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.overlay0"
    _rm_test_img "$TEST_IMG.overlay1"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt qcow2
_supported_proto file

_require_devices virtio-scsi scsi-hd

IMG_SIZE=64K

_make_test_img $IMG_SIZE
TEST_IMG="$TEST_IMG.overlay0" _make_test_img -b "$TEST_IMG" $IMG_SIZE
TEST_IMG="$TEST_IMG.overlay1" _make_test_img -b "$TEST_IMG" $IMG_SIZE

# So that we actually have something to mirror and the job does not return
# immediately (which may be bad because then we cannot know whether the
# 'return' or the 'BLOCK_JOB_READY' comes first).
$QEMU_IO -c 'write 0 42' "$TEST_IMG.overlay0" | _filter_qemu_io

# We cannot use virtio-blk here because that does not actually set the attached
# BB's AioContext in qtest mode
_launch_qemu \
    -object iothread,id=iothr \
    -blockdev node-name=source,driver=$IMGFMT,file.driver=file,file.filename="$TEST_IMG.overlay0" \
    -device virtio-scsi,id=scsi-bus,iothread=iothr \
    -device scsi-hd,bus=scsi-bus.0,drive=source

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

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'drive-mirror',
       'arguments': {
           'job-id': 'mirror',
           'device': 'source',
           'target': '$TEST_IMG.overlay1',
           'mode':   'existing',
           'sync':   'top'
       } }" \
    'BLOCK_JOB_READY'

# The backing BDS should be assigned the overlay's AioContext
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'block-job-complete',
       'arguments': { 'device': 'mirror' } }" \
    'BLOCK_JOB_COMPLETED'

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

wait=yes _cleanup_qemu

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