#!/usr/bin/env 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_test_img "$TEST_IMG.base"
    _rm_test_img "$TEST_IMG.orig"

    _rm_test_img "$TEST_DIR/subdir/t.$IMGFMT.base"
    _rm_test_img "$TEST_DIR/subdir/t.$IMGFMT.mid"
    _rm_test_img "$TEST_DIR/subdir/t.$IMGFMT"
    rmdir "$TEST_DIR/subdir" &> /dev/null
}
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
_unsupported_imgopts "subformat=monolithicFlat" \
                     "subformat=twoGbMaxExtentFlat" \
                     "subformat=twoGbMaxExtentSparse" \
                     "subformat=streamOptimized"

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" -F $IMGFMT 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)
backing="json:{'driver': '$IMGFMT',
               'file': {
                   'driver': 'blkdebug',
                   'inject-error': [{
                       'event': 'write_aio',
                       'errno': 28,
                       'once': true
                   }],
                   'image': {
                       'driver': 'file',
                       'filename': '$TEST_IMG.base'
                   }}}"

# Filter out newlines and collapse spaces
backing=$(echo "$backing" | tr -d '\n' | tr -s ' ')

_make_test_img -b "$backing" -F $IMGFMT

# 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


echo
echo 'Testing commit in sub-directory with relative filenames'
echo

pushd "$TEST_DIR" > /dev/null

mkdir subdir

TEST_IMG="subdir/t.$IMGFMT.base" _make_test_img 1M
TEST_IMG="subdir/t.$IMGFMT.mid" _make_test_img -b "t.$IMGFMT.base" -F $IMGFMT
TEST_IMG="subdir/t.$IMGFMT" _make_test_img -b "t.$IMGFMT.mid" -F $IMGFMT

# Should work
$QEMU_IMG commit -b "t.$IMGFMT.mid" "subdir/t.$IMGFMT"

# Might theoretically work, but does not in practice (we have to
# decide between this and the above; and since we always represent
# backing file names as relative to the overlay, we go for the above)
$QEMU_IMG commit -b "subdir/t.$IMGFMT.mid" "subdir/t.$IMGFMT" 2>&1 | \
    _filter_imgfmt

# This should work as well
$QEMU_IMG commit -b "$TEST_DIR/subdir/t.$IMGFMT.mid" "subdir/t.$IMGFMT"

popd > /dev/null

# Now let's try with just absolute filenames
# (This will not work with external data files, though, because when
# using relative paths for those, qemu will always resolve them
# relative to its CWD.  Therefore, it cannot find those data files now
# that we left $TEST_DIR.)
if _get_data_file '' > /dev/null; then
    echo 'Image committed.' # Skip test
else
    $QEMU_IMG commit -b "$TEST_DIR/subdir/t.$IMGFMT.mid" \
        "$TEST_DIR/subdir/t.$IMGFMT"
fi

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