#!/usr/bin/env bash
# group: rw backing auto quick
#
# 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
