#!/usr/bin/env bash
#
# Test for commit of larger active layer
#
# This tests live snapshots of images on a running QEMU instance, using
# QMP commands.  Both single disk snapshots, and transactional group
# snapshots are performed.
#
# Copyright (C) 2014 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=jcody@redhat.com

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

status=1	# failure is the default!

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

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

_supported_fmt qcow2
_supported_proto file
_supported_os Linux

size_smaller=5M
size_larger=100M

TEST_IMG="$TEST_IMG.base" _make_test_img $size_smaller

TEST_IMG="$TEST_IMG.snp1" _make_test_img -b "$TEST_IMG.base" $size_larger

_make_test_img -b "${TEST_IMG}.snp1" $size_larger

echo
echo "=== Base image info before commit and resize ==="
TEST_IMG="${TEST_IMG}.base" _img_info | _filter_img_info

echo
echo === Running QEMU Live Commit Test ===
echo

qemu_comm_method="qmp"
_launch_qemu -drive file="${TEST_IMG}",if=virtio,id=test
h=$QEMU_HANDLE

_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" "return"

_send_qemu_cmd $h "{ 'execute': 'block-commit',
                                 'arguments': { 'device': 'test',
                                 'top': '"${TEST_IMG}.snp1"' } }" '"status": "null"'

_cleanup_qemu

echo
echo "=== Base image info after commit and resize ==="
TEST_IMG="${TEST_IMG}.base" _img_info | _filter_img_info

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