#! /bin/bash
# FS QA Test No. 018
#
# xfs_logprint test - test v2 logs of different LR sizes
#
#-----------------------------------------------------------------------
# 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!

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

_cleanup()
{
    cd /
    _cleanup_logfiles
    rm -f $tmp.*
    umount $SCRATCH_MNT 2>/dev/null
}
trap "_cleanup; exit \$status" 0 1 2 3 15

# real QA test starts here
_supported_fs xfs
_supported_os IRIX Linux
# prelim
rm -f $seq.full $tmp.*
_require_scratch
_require_v2log

# link correct .out file
_link_out_file $seq.op


echo "*** init FS"
umount $SCRATCH_DEV >/dev/null 2>&1

cat >$tmp.seq.params <<EOF
# mkfs-opt        mount-opt
  version=1     logbsize=32k
  version=2     logbsize=32k
  version=2     logbsize=64k
  version=2     logbsize=128k
  version=2     logbsize=256k
EOF

if [ "$HOSTOS" = "IRIX" ]; then
    start_blk=0
else
    start_blk=2
fi

# do the work for various log params which
# should not effect the data content of the log
cat $tmp.seq.params \
| while read mkfs mnt
do
    if [ "$mkfs" = "#" ]; then
	continue
    fi
    export MOUNT_OPTIONS="-o noalign,$mnt"
    _mkfs_log "-l $mkfs"
    _create_log
    _check_log

    _print_operation
    _cmp_op_output $seq.op $filtered

    _print_transaction_inode $start_blk
    _cmp_output $seq.trans_inode $filtered

    _print_transaction_buf $start_blk
    _cmp_output $seq.trans_buf $filtered
done

# got thru it all so we may have success
status=0

exit
