#! /bin/bash
# FS QA Test No. 012
#
# holes
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2001 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
#
#-----------------------------------------------------------------------
#
# creator
owner=dxm@sgi.com

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

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

_cleanup()
{
    cd /
    rm -f $tmp.*
    rm -rf $testdir/holes.$$.*
    _cleanup_testdir
}

_filesize()
{
    ls -l $1 | $AWK_PROG '{print "    filesize = " $5}'
}

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

_do_test()
{
    _n="$1"
    _param="$2"
    _count="$3"
    
    failed=0
    
    out=$testdir/holes.$$.$_n
    echo ""
    echo "holes.$_n : $_param"
    echo "-----------------------------------------------"
    if  ! $here/src/holes $_param $out >$tmp.out
    then
        echo "    holes returned $? - see $seq.out.full"
        failed=1
        status=1
    fi
        

    if [ $failed -eq 0 ]
    then        
        # quick check - how many holes did we get?
        count=`xfs_bmap $out | egrep -c ': hole'`
        echo "    $count hole(s) detected"
        # and how big was the file?
        _filesize $out
        
        if [ $count -ne $_count ]
        then
            echo "    unexpected number of holes - see $seq.out.full"
            status=1
            failed=1
        fi
    fi
        
    if [ $failed -eq 1 ]
    then
        echo "--------------------------------------"       >>$here/$seq.out.full
        echo "$_n - output from holes:"                     >>$here/$seq.out.full
        echo "--------------------------------------"       >>$here/$seq.out.full
        cat $tmp.out                                        >>$here/$seq.out.full
        echo "--------------------------------------"       >>$here/$seq.out.full
        echo "$_n - output from bmap:"                      >>$here/$seq.out.full
        echo "--------------------------------------"       >>$here/$seq.out.full
        xfs_bmap -vvv $out                                  >>$here/$seq.out.full
        echo "--------------------------------------"       >>$here/$seq.out.full
        echo "$_n - output from ls -li:"                    >>$here/$seq.out.full
        echo "--------------------------------------"       >>$here/$seq.out.full
        ls -li $out                                         >>$here/$seq.out.full
        status=1
    fi
}

# real QA test starts here
_supported_fs xfs
_supported_os IRIX Linux

_setup_testdir

rm -f $here/$seq.out.full

# small & fairly dense
_do_test 1 "-l 40960000 -b 40960 -i 10 -c 1" 100

# big & sparse
_do_test 2 "-l 409600000 -b 40960 -i 1000 -c 1" 10

# no holes, but a very nasty way to write a file (lots of extents)
_do_test 3 "-l 40960000 -b 40960 -i 10 -c 10" 0

exit
