#!/bin/bash
#
# Test postcopy live migration with shared storage
#
# 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=kwolf@redhat.com

seq=`basename $0`
echo "QA output created by $seq"

here=`pwd`
status=1	# failure is the default!

MIG_SOCKET="${TEST_DIR}/migrate"

_cleanup()
{
    rm -f "${MIG_SOCKET}"
	_cleanup_test_img
    _cleanup_qemu
}
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 generic
_supported_os Linux

size=64M
_make_test_img $size

echo
echo === Starting VMs ===
echo

qemu_comm_method="monitor"

_launch_qemu \
    -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk
src=$QEMU_HANDLE

_launch_qemu \
    -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk \
    -incoming "unix:${MIG_SOCKET}"
dest=$QEMU_HANDLE

echo
echo === Write something on the source ===
echo

silent=
_send_qemu_cmd $src 'qemu-io disk "write -P 0x55 0 64k"' "(qemu)"
_send_qemu_cmd $src "" "ops/sec"
_send_qemu_cmd $src 'qemu-io disk "read -P 0x55 0 64k"' "(qemu)"
_send_qemu_cmd $src "" "ops/sec"

echo
echo === Do postcopy migration to destination ===
echo

# Slow down migration so much that it definitely won't finish before we can
# switch to postcopy
silent=yes
_send_qemu_cmd $src 'migrate_set_speed 4k' "(qemu)"
_send_qemu_cmd $src 'migrate_set_capability postcopy-ram on' "(qemu)"
_send_qemu_cmd $src "migrate -d unix:${MIG_SOCKET}" "(qemu)"
_send_qemu_cmd $src 'migrate_start_postcopy' "(qemu)"

QEMU_COMM_TIMEOUT=1 qemu_cmd_repeat=10 silent=yes \
    _send_qemu_cmd $src "info migrate" "completed\|failed"
silent=yes _send_qemu_cmd $src "" "(qemu)"

echo
echo === Do some I/O on the destination ===
echo

# It is important that we use the BlockBackend of the guest device here instead
# of the node name, which would create a new BlockBackend and not test whether
# the guest has the necessary permissions to access the image now
silent=
_send_qemu_cmd $dest 'qemu-io disk "read -P 0x55 0 64k"' "(qemu)"
_send_qemu_cmd $dest "" "ops/sec"
_send_qemu_cmd $dest 'qemu-io disk "write -P 0x66 1M 64k"' "(qemu)"
_send_qemu_cmd $dest "" "ops/sec"

echo
echo === Shut down and check image ===
echo

_send_qemu_cmd $src 'quit' ""
_send_qemu_cmd $dest 'quit' ""
wait=1 _cleanup_qemu

_check_test_img

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