#!/usr/bin/env bash
# group: rw auto quick
#
# Test corner cases with unusual block geometries
#
# Copyright (C) 2016-2018 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=eblake@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 test is runnable under compat=0.10; see test 204 for additional
# tests specific to compat=1.1.

_supported_fmt qcow2
_supported_proto file fuse

CLUSTER_SIZE=1M
size=128M
options=driver=blkdebug,image.driver=qcow2

echo
echo "== setting up files =="

TEST_IMG="$TEST_IMG.base" _make_test_img $size
$QEMU_IO -c "write -P 11 0 $size" "$TEST_IMG.base" | _filter_qemu_io
_make_test_img -b "$TEST_IMG.base" -F $IMGFMT
$QEMU_IO -c "write -P 22 0 $size" "$TEST_IMG" | _filter_qemu_io

# Limited to 64k max-transfer
echo
echo "== constrained alignment and max-transfer =="
limits=align=4k,max-transfer=64k
$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
         -c "write -P 33 1000 128k" -c "read -P 33 1000 128k" | _filter_qemu_io

echo
echo "== write zero with constrained max-transfer =="
limits=align=512,max-transfer=64k,opt-write-zero=$CLUSTER_SIZE
$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
         -c "write -z 8003584 2093056" | _filter_qemu_io

# non-power-of-2 write-zero/discard alignments
echo
echo "== non-power-of-2 write zeroes limits =="

limits=align=512,opt-write-zero=15M,max-write-zero=15M,opt-discard=15M,max-discard=15M
$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
         -c "write -z 32M 32M" | _filter_qemu_io

echo
echo "== non-power-of-2 discard limits =="

limits=align=512,opt-write-zero=15M,max-write-zero=15M,opt-discard=15M,max-discard=15M
$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
         -c "discard 80000001 30M" | _filter_qemu_io

echo
echo "== verify image content =="

verify_io()
{
    if ($QEMU_IMG info -f "$IMGFMT" "$TEST_IMG" |
	    grep "compat: 0.10" > /dev/null); then
        # In v2 images clusters are not discarded when there is a backing file
        # so the previous value is read
        discarded=22
    else
        # Discarded clusters are zeroed for v3 or later
        discarded=0
    fi

    echo read -P 22 0 1000
    echo read -P 33 1000 128k
    echo read -P 22 132072 7871512
    echo read -P 0 8003584 2093056
    echo read -P 22 10096640 23457792
    echo read -P 0 32M 32M
    echo read -P 22 64M 13M
    echo read -P $discarded 77M 29M
    echo read -P 22 106M 22M
}

verify_io | $QEMU_IO -r "$TEST_IMG" | _filter_qemu_io

_check_test_img

# success, all done
echo "*** done"
status=0
