#! /bin/bash
# FS QA Test No. 066
#
# Test dumping of large files
#
#-----------------------------------------------------------------------
# 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
#
#-----------------------------------------------------------------------
#
# creator
owner=tes@sgi.com

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

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

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

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

# real QA test starts here
_supported_fs xfs
_supported_os IRIX Linux

_setup_testdir

_my_stat_filter()
{
    grep "[sS]ize" | sed "s/.*[sS]ize[: ]*\([[:digit:]]*\).*/\1 largefile/g"
}

rm -f $testdir/testfile
if src/feature -t $testdir/testfile; then
	:
else
	_notrun "Installed libc doesn't correctly handle setrlimit/ftruncate64"
fi

_create_dumpdir_largefile
echo "ls dumpdir/largefile"
stat $dump_dir | _my_stat_filter
_do_dump_file
_do_restore_file
echo "ls restoredir/largefile"
stat $restore_dir/$dump_sdir | _my_stat_filter

# success, all done
status=0
exit
