#!/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`
tmp=/tmp/$$
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 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 -z 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 -z 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 -z 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

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