#!/usr/bin/env bash
#
# Test case for drive-mirror to NBD
#
# Copyright (C) 2015 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 -f "$TEST_DIR/source.$IMGFMT"
}

trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt generic
_supported_proto nbd
_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat"

_make_test_img 64M
$QEMU_IMG create -f $IMGFMT "$TEST_DIR/source.$IMGFMT" 64M | _filter_img_create

_launch_qemu -drive if=none,id=src,file="$TEST_DIR/source.$IMGFMT",format=raw \
             -nodefaults

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

# 'format': 'nbd' is not actually "correct", but this was the only way to
# test the bug fixed in commit f53a829.  Though the bug's related code
# bdrv_swap() was replaced later, let's make sure we don't fall in the same
# pit again.
_send_qemu_cmd $QEMU_HANDLE  \
    "{'execute': 'drive-mirror',
      'arguments': {'device': 'src',
                    'target': '$TEST_IMG',
                    'format': 'nbd',
                    'sync':'full',
                    'mode':'existing'}}" \
    'BLOCK_JOB_READY'

_send_qemu_cmd $QEMU_HANDLE  \
    "{'execute': 'block-job-complete',
      'arguments': {'device': 'src'}}" \
    'BLOCK_JOB_COMPLETE'

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

wait=1 _cleanup_qemu


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