#! /bin/bash
# FS QA Test No. 008
#
# randholes test
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
#
# 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.
#
# This program is distributed in the hope that it would 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, write the Free Software Foundation,
# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
#-----------------------------------------------------------------------
#

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

here=`pwd`
tmp=/tmp/$$
status=0	# success is the default!
pgsize=`$here/src/feature -s`
trap "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
    rm -f $tmp.*
    rm -rf $TEST_DIR/randholes.$$.*
}

_filter()
{
    sed -e "s/-b $pgsize/-b PGSIZE/g" \
	-e "s/-l .* -c/-l FSIZE -c/g"
}

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

_do_test()
{
    _n="$1"
    _holes="$2"
    _param="$3"

    out=$TEST_DIR/randholes.$$.$_n
    echo ""
    echo "randholes.$_n : $_param" | _filter
    echo "------------------------------------------"
    if $here/src/randholes $_param $out >$tmp.out
    then
	# only check if we're not allocating in huge chunks (extsz flag)
	if _test_inode_flag extsize $out || _test_inode_flag realtime $out
	then
		echo "holes is in range"
	else
		# quick check - how many holes did we get?
	        count=`xfs_bmap $out | egrep -c ': hole'`
		# blocks can end up adjacent, therefore number of holes varies
		_within_tolerance "holes" $count $_holes 10% -v
	fi
    else
        echo "    randholes returned $? - see $seq.out.full"
        echo "--------------------------------------"       >>$seqres.full
        echo "$_n - output from randholes:"                 >>$seqres.full
        echo "--------------------------------------"       >>$seqres.full
        cat $tmp.out                                        >>$seqres.full
        echo "--------------------------------------"       >>$seqres.full
        echo "$_n - output from bmap:"                      >>$seqres.full
        echo "--------------------------------------"       >>$seqres.full
        xfs_bmap -vvv $out                                  >>$seqres.full
        status=1
    fi
}

# real QA test starts here
_supported_fs xfs
_supported_os Linux
_require_test

rm -f $seqres.full

# Note on special numbers here.
#
# We are trying to create roughly 50 or 100 holes in a file
# using random writes. Assuming a good distribution of 50 writes
# in a file, the file only needs to be 3-4x the size of the write
# size muliplied by the number of writes. Hence we use 200 * pgsize
# for files we want 50 holes in and 400 * pgsize for files we want
# 100 holes in. This keeps the runtime down as low as possible.
#
_do_test 1 50 "-l `expr 200 \* $pgsize` -c 50 -b $pgsize"
_do_test 2 100 "-l `expr 400 \* $pgsize` -c 100 -b $pgsize"
_do_test 3 100 "-l `expr 400 \* $pgsize` -c 100 -b 512"   # test partial pages

# rinse, lather, repeat for direct IO
_do_test 4 50 "-d -l `expr 200 \* $pgsize` -c 50 -b $pgsize"
_do_test 5 100 "-d -l `expr 400 \* $pgsize` -c 100 -b $pgsize"
# note: direct IO requires page aligned IO

# todo: realtime.

# success, all done
exit
