#!/bin/bash
#
# Test savevm and loadvm after live migration with postcopy flag
#
# Copyright (C) 2017, IBM Corporation.
#
# This file is derived from tests/qemu-iotests/181 by Kevin Wolf
#
# 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/>.

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

status=1	# failure is the default!

MIG_SOCKET="${TEST_DIR}/migrate"

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

_cleanup()
{
    rm -f "${MIG_SOCKET}"
    _cleanup_test_img
    _cleanup_qemu
}
trap "_cleanup; exit \$status" 0 1 2 3 15

_supported_fmt qcow2
_supported_proto generic
_supported_os Linux

# Internal snapshots are (currently) impossible with refcount_bits=1
# This was taken from test 080
_unsupported_imgopts 'refcount_bits=1[^0-9]'

size=64M
_make_test_img $size

echo
echo === Starting VMs ===
echo

qemu_comm_method="monitor"

if [ "$IMGOPTSSYNTAX" = "true" ]; then
    _launch_qemu \
        -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk
else
    _launch_qemu \
        -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk
fi
src=$QEMU_HANDLE

if [ "$IMGOPTSSYNTAX" = "true" ]; then
    _launch_qemu \
        -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk \
        -incoming "unix:${MIG_SOCKET}"
else
    _launch_qemu \
        -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk \
        -incoming "unix:${MIG_SOCKET}"
fi
dest=$QEMU_HANDLE

echo
echo === Set \'migrate_set_capability postcopy-ram on\' and migrate ===
echo

silent=yes
_send_qemu_cmd $dest 'migrate_set_capability postcopy-ram on' "(qemu)"
_send_qemu_cmd $src 'migrate_set_capability postcopy-ram on' "(qemu)"
_send_qemu_cmd $src "migrate -d unix:${MIG_SOCKET}" "(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 === Check if migration was successful ===
echo

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

echo
echo === On destination, execute savevm and loadvm ===
echo

silent=
_send_qemu_cmd $dest 'savevm state1' "(qemu)"
_send_qemu_cmd $dest 'loadvm state1' "(qemu)"

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"
status=0
