#!/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_test_img "$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
TEST_IMG_FILE="$TEST_DIR/source.$IMGFMT" IMGPROTO=file _make_test_img 64M

_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
