#!/usr/bin/env bash
# group: rw quick
#
# Test case for loading a saved VM state from a qcow2 image
#
# Copyright (C) 2013 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=hreitz@redhat.com

seq="$(basename $0)"
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
	_cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# This tests qcow2-specific low-level functionality
_supported_fmt qcow2
_supported_proto generic
# Internal snapshots are (currently) impossible with refcount_bits=1,
# and generally impossible with external data files
_unsupported_imgopts 'compat=0.10' 'refcount_bits=1[^0-9]' data_file

IMG_SIZE=128K

case "$QEMU_DEFAULT_MACHINE" in
  s390-ccw-virtio)
      platform_parm="-no-shutdown"
      ;;
  *)
      platform_parm=""
      ;;
esac

_qemu()
{
    $QEMU $platform_parm -nographic -monitor stdio -serial none \
          -drive if=none,id=drive0,file="$TEST_IMG",format="$IMGFMT" \
          -device virtio-scsi,id=hba0 \
          -device scsi-hd,drive=drive0 \
          "$@" |\
    _filter_qemu | _filter_hmp
}

for extra_args in \
    "" \
    "-object iothread,id=iothread0 -set device.hba0.iothread=iothread0"; do
    echo
    echo "=== Saving and reloading a VM state to/from a qcow2 image ($extra_args) ==="
    echo

    _make_test_img $IMG_SIZE

    # Give qemu some time to boot before saving the VM state
    { sleep 1; printf "savevm 0\nquit\n"; } | _qemu $extra_args
    # Now try to continue from that VM state (this should just work)
    { sleep 1; printf "loadvm 0\nloadvm 0\nquit\n"; } | _qemu $extra_args -S
done

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