#!/bin/bash
# FS QA Test No. 120
#
# Test noatime mount option.
#
#-----------------------------------------------------------------------
# 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=allanr@sgi.com

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

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

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

# real QA test starts here
_supported_fs generic
_supported_os Linux IRIX

_require_scratch
_scratch_mkfs >/dev/null 2>&1 || _fail "mkfs failed"

_compare_access_times()
{
	original_access_time="`cat $tmp.out | sed -n '5p'|awk '{ print substr($0,0,32)}'`"
	accessed_time="`src/lstat64 $1 | sed -n '5p'| awk '{ print substr($0,0,32)}'`"
	echo "*** compare access times ***"
	if [ "$original_access_time" != "$accessed_time" ]
		then
		echo "*** file access time updated on $2 (unexpected) ***"
		cat $tmp.out
		echo "---------------------------------------------------"
		src/lstat64 $1
		mount | grep $SCRATCH_MNT
	fi

}

if ! _scratch_mount "-o noatime" >$tmp.out 2>&1
then
    cat $tmp.out
    echo "!!! mount failed"
    exit
fi

#executable file
echo "*** copying file ***"
cp src/lstat64 $SCRATCH_MNT
src/lstat64 $SCRATCH_MNT/lstat64 >$tmp.out
sleep 5
echo "*** executing file ***"
$SCRATCH_MNT/lstat64 $SCRATCH_MNT/lstat64 >/dev/null
_compare_access_times $SCRATCH_MNT/lstat64 "executing file"

#reading file
echo "*** creating file ***"
touch $SCRATCH_MNT/testfile
src/lstat64 $SCRATCH_MNT/testfile >$tmp.out
sleep 5
echo "*** reading file ***"
cat $SCRATCH_MNT/testfile >/dev/null
_compare_access_times $SCRATCH_MNT/testfile "reading file"

#writing file
echo "*** creating file ***"
touch $SCRATCH_MNT/testfile2
src/lstat64 $SCRATCH_MNT/testfile2 >$tmp.out
sleep 5
echo "*** writing to file ***"
echo "asdf" >> $SCRATCH_MNT/testfile2
_compare_access_times $SCRATCH_MNT/testfile2 "writing file"


umount $SCRATCH_MNT

# success, all done
status=0
exit
