#!/bin/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"

here=`pwd`
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

_make_test_img $size_smaller
mv "${TEST_IMG}" "${TEST_IMG}.base"

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

_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

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"' } }" "BLOCK_JOB_COMPLETED"

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

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