#! /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
#
#-----------------------------------------------------------------------
#

seqfull=$0
seq=`basename $0`
seqres=$RESULT_DIR/$seq
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.*
    _scratch_unmount 2>/dev/null
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

echo "*** init FS"
_scratch_unmount >/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

start_blk=2

# 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 $seqfull.op $filtered

    _print_transaction_inode $start_blk
    _cmp_output $seqfull.trans_inode $filtered

    _print_transaction_buf $start_blk
    _cmp_output $seqfull.trans_buf $filtered
done

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

exit
