#!/usr/bin/env bash
# group: rw auto quick
#
# Test case for preallocated zero clusters in qcow2
#
# Copyright (C) 2013 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=hreitz@redhat.com

seq="$(basename $0)"
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
	_cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# This tests qcow2-specific low-level functionality
_supported_fmt qcow2
_supported_proto generic
# We need zero clusters and snapshots
# (TODO: Consider splitting the snapshot part into a separate test
#        file, so this one runs with refcount_bits=1 and data_file)
_unsupported_imgopts 'compat=0.10' 'refcount_bits=1[^0-9]' data_file

# Intentionally create an unaligned image
IMG_SIZE=$((64 * 1024 * 1024 + 512))

echo
echo "=== Testing cluster discards ==="
echo
_make_test_img $IMG_SIZE
# Write some normal clusters, zero some of them (creating preallocated
# zero clusters) and discard everything. Everything should now read as 0.
$QEMU_IO -c "write 0 256k" -c "write -z 0 256k" -c "write 64M 512" \
	 -c "discard 0 $IMG_SIZE" -c "read -P 0 0 $IMG_SIZE" "$TEST_IMG" \
         | _filter_qemu_io

# Check the image (there shouldn't be any leaks)
_check_test_img
# Map the image (we want all clusters to be gone)
$QEMU_IMG map "$TEST_IMG"

_cleanup_test_img


echo
echo '=== Writing to preallocated zero clusters ==='
echo

_make_test_img $IMG_SIZE

# Create data clusters (not aligned to an L2 table)
$QEMU_IO -c 'write -P 42 1M 256k' "$TEST_IMG" | _filter_qemu_io
orig_map=$($QEMU_IMG map --output=json "$TEST_IMG")

# Convert the data clusters to preallocated zero clusters
$QEMU_IO -c 'write -z 1M 256k' "$TEST_IMG" | _filter_qemu_io

# Now write to them (with a COW needed for the head and tail)
$QEMU_IO -c "write -P 23 $(((1024 + 32) * 1024)) 192k" "$TEST_IMG" \
    | _filter_qemu_io

# Check metadata correctness
_check_test_img

# Check data correctness
$QEMU_IO -c "read -P  0 $(( 1024             * 1024)) 32k" \
         -c "read -P 23 $(((1024 + 32)       * 1024)) 192k" \
         -c "read -P  0 $(((1024 + 32 + 192) * 1024)) 32k" \
         "$TEST_IMG" \
         | _filter_qemu_io

# Check that we have actually reused the original area
new_map=$($QEMU_IMG map --output=json "$TEST_IMG")
if [ "$new_map" = "$orig_map" ]; then
    echo 'Successfully reused original clusters.'
else
    echo 'Failed to reuse original clusters.'
    echo 'Original map:'
    echo "$orig_map"
    echo 'New map:'
    echo "$new_map"
fi

_cleanup_test_img


echo
echo '=== Writing to a snapshotted preallocated zero cluster ==='
echo

_make_test_img 64k

# Create a preallocated zero cluster
$QEMU_IO -c 'write -P 42 0 64k' -c 'write -z 0 64k' "$TEST_IMG" \
    | _filter_qemu_io

# Snapshot it
$QEMU_IMG snapshot -c foo "$TEST_IMG"

# Write to the cluster
$QEMU_IO -c 'write -P 23 0 64k' "$TEST_IMG" | _filter_qemu_io

# Check metadata correctness
_check_test_img

# Check data correctness
$QEMU_IO -c 'read -P 23 0 64k' "$TEST_IMG" | _filter_qemu_io
$QEMU_IMG snapshot -a foo "$TEST_IMG"
$QEMU_IO -c 'read -P 0 0 64k' "$TEST_IMG" | _filter_qemu_io

_cleanup_test_img


echo
echo '=== Consecutive write to a preallocated zero cluster ==='
echo

_make_test_img 192k

# Create three normal clusters
$QEMU_IO -c 'write -P 42 0 192k' "$TEST_IMG" | _filter_qemu_io
orig_map=$($QEMU_IMG map --output=json "$TEST_IMG")

# Make the middle cluster a preallocated zero cluster
$QEMU_IO -c 'write -z 64k 64k' "$TEST_IMG" | _filter_qemu_io

# Try to overwrite everything: This should reuse the whole range. To test that
# this only issues a single continuous write request, use blkdebug.
$QEMU_IO -c 'write -P 42 0 192k' \
    "json:{
        'driver': '$IMGFMT',
        'file': {
            'driver': 'blkdebug',
            'image.filename': '$TEST_IMG',
            'set-state': [{
                'event': 'write_aio',
                'new_state': 2
            }],
            'inject-error': [{
                'event': 'write_aio',
                'state': 2
            }]
        }
    }" \
    | _filter_qemu_io

# Check metadata correctness
_check_test_img

# Check that we have actually reused the original area
new_map=$($QEMU_IMG map --output=json "$TEST_IMG")
if [ "$new_map" = "$orig_map" ]; then
    echo 'Successfully reused original clusters.'
else
    echo 'Failed to reuse original clusters.'
    echo 'Original map:'
    echo "$orig_map"
    echo 'New map:'
    echo "$new_map"
fi

_cleanup_test_img


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