#!/bin/bash
#
# Test aligned and misaligned write zeroes operations.
#
# Copyright (C) 2012 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=pbonzini@redhat.com

seq=`basename $0`
echo "QA output created by $seq"

here=`pwd`
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

_supported_fmt generic
_supported_proto generic
_supported_os Linux


size=128M
_make_test_img $size

do_test()
{
	local align=$1
	local iocmd=$2
	local img=$3
	{
		echo "open -o driver=$IMGFMT,file.align=$align blkdebug::$img"
		echo $iocmd
	} | $QEMU_IO
}

for write_zero_cmd in "write -z" "aio_write -z"; do
for align in 512 4k; do
	echo
	echo "== preparing image =="
	do_test $align "write -P 0xa 0x200 0x400" "$TEST_IMG" | _filter_qemu_io
	do_test $align "write -P 0xa 0x20000 0x600" "$TEST_IMG" | _filter_qemu_io
	do_test $align "$write_zero_cmd 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io

	echo
	echo "== verifying patterns (1) =="
	do_test $align "read -P 0xa 0x200 0x200" "$TEST_IMG" | _filter_qemu_io
	do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io
	do_test $align "read -P 0xa 0x20400 0x200" "$TEST_IMG" | _filter_qemu_io

	echo
	echo "== rewriting zeroes =="
	do_test $align "write -P 0xb 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io
	do_test $align "$write_zero_cmd 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io

	echo
	echo "== verifying patterns (2) =="
	do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io

	echo
	echo "== rewriting unaligned zeroes =="
	do_test $align "write -P 0xb 0x0 0x1000" "$TEST_IMG" | _filter_qemu_io
	do_test $align "$write_zero_cmd 0x200 0x200" "$TEST_IMG" | _filter_qemu_io

	echo
	echo "== verifying patterns (3) =="
	do_test $align "read -P 0xb 0x0 0x200" "$TEST_IMG" | _filter_qemu_io
	do_test $align "read -P 0x0 0x200 0x200" "$TEST_IMG" | _filter_qemu_io
	do_test $align "read -P 0xb 0x400 0xc00" "$TEST_IMG" | _filter_qemu_io

	echo
done
done

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