#!/bin/bash
#
# Commit changes to backing file
#
# Copyright (C) 2009 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"

status=1	# failure is the default!

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

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

# Any format supporting backing files
_supported_fmt qcow qcow2 vmdk qed
_supported_proto file
_supported_os Linux
_unsupported_imgopts "subformat=monolithicFlat" \
                     "subformat=twoGbMaxExtentFlat" \
                     "subformat=twoGbMaxExtentSparse"

TEST_OFFSETS="0 4294967296"

TEST_IMG_SAVE="$TEST_IMG"
TEST_IMG="$TEST_IMG.base"

_make_test_img 6G

echo "Filling base image"
echo

for offset in $TEST_OFFSETS; do
    # Some clusters with alternating backing file/image file reads
    io writev $(( offset )) 512 1024 64

    # Complete backing clusters
    io writev $(( offset  + 64 * 1024))  65536 65536 1
done
_check_test_img

echo "Creating test image with backing file"
echo

TEST_IMG="$TEST_IMG_SAVE"
_make_test_img -b "$TEST_IMG.base" 6G

echo "Filling test image"
echo

for offset in $TEST_OFFSETS; do
    # Some clusters with alternating backing file/image file reads
    io writev $(( offset + 512 )) 512 1024 64

    # Complete test image clusters
    io writev $(( offset + 64 * 1024 + 65536))  65536 65536 1
done
_check_test_img

$QEMU_IMG commit "$TEST_IMG"
TEST_IMG="$TEST_IMG.base"

echo "Reading from the backing file"
echo

for offset in $TEST_OFFSETS; do
    # Some clusters with alternating backing file/image file reads
    io readv $(( offset )) 512 1024 64
    io readv $(( offset + 512 )) 512 1024 64

    # Complete test image clusters
    io readv $(( offset  + 64 * 1024))  65536 65536 1
    io readv $(( offset + 64 * 1024 + 65536))  65536 65536 1

    # Empty sectors
    io_zero readv $(( offset + 64 * 1024 + 65536 * 4 )) 65536 65536 1
done
_check_test_img
_cleanup
TEST_IMG=$TEST_IMG_SAVE

echo
echo 'Testing failing commit'
echo

TEST_IMG="$TEST_IMG.base" _make_test_img 1M

# Create an image with a null backing file to which committing will fail (with
# ENOSPC so we can distinguish the result from some generic EIO which may be
# generated anywhere in the block layer)
_make_test_img -b "json:{'driver': '$IMGFMT',
                         'file': {
                             'driver': 'blkdebug',
                             'inject-error': [{
                                 'event': 'write_aio',
                                 'errno': 28,
                                 'once': true
                             }],
                             'image': {
                                 'driver': 'file',
                                 'filename': '$TEST_IMG.base'
                             }}}"

# Just write anything so committing will not be a no-op
$QEMU_IO -c 'writev 0 64k' "$TEST_IMG" | _filter_qemu_io

$QEMU_IMG commit "$TEST_IMG"
_cleanup

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