[BACK]Return to check CVS log [TXT][DIR] Up to [Development] / xfs-cmds / xfstests

File: [Development] / xfs-cmds / xfstests / check (download)

Revision 1.18, Fri Apr 23 04:08:39 2004 UTC (13 years, 6 months ago) by fsgqa
Branch: MAIN
Changes since 1.17: +2 -1 lines

cleanup some qa stuff
Invoke qa test directly instead of feeding it to sh.
This one is for nathans to help with ps in kdb when trying to
work out what qa test was running.

#!/bin/sh
#
# Control script for QA
#
# 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 version 2 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.
# 
# Further, this software is distributed without any warranty that it is
# free of the rightful claim of any third person regarding infringement
# or the like.  Any license provided herein, whether implied or
# otherwise, applies only to this software file.  Patent licenses, if
# any, provided herein do not apply to combinations of this program with
# other software, or any other product whatsoever.
# 
# You should have received a copy of the GNU General Public License along
# with this program; if not, write the Free Software Foundation, Inc., 59
# Temple Place - Suite 330, Boston MA 02111-1307, USA.
# 
# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
# Mountain View, CA  94043, or:
# 
# http://www.sgi.com 
# 
# For further information regarding this notice, see: 
# 
# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
#

export MKFS_OPTIONS=${MKFS_OPTIONS:=-bsize=4096}
export MOUNT_OPTIONS=${MOUNT_OPTIONS:=-ologbufs=2}

tmp=/tmp/$$
status=0
needwrap=true
try=0
n_bad=0
bad=""
notrun=""
interrupt=true

# generic initialization
iam=check
if ! . ./common.rc
then
    echo "check: failed to source common.rc"
    exit 1
fi

if [ $UID -ne 0 ]
then
    echo "check: QA must be run as root"
    exit 1
fi

_wallclock()
{
    date "+%H %M %S" | $AWK_PROG '{ print $1*3600 + $2*60 + $3 }'
}

_wrapup()
{
    # for hangcheck ...
    # remove files that were used by hangcheck
    #
    [ -f /tmp/check.pid ] && rm -rf /tmp/check.pid
    [ -f /tmp/check.sts ] && rm -rf /tmp/check.sts

    if $showme
    then
	:
    elif $needwrap
    then
	if [ -f check.time -a -f $tmp.time ]
	then
	    cat check.time $tmp.time \
	    | $AWK_PROG '
	{ t[$1] = $2 }
END	{ if (NR > 0) {
	    for (i in t) print i " " t[i]
	  }
	}' \
	    | sort -n >$tmp.out
	    mv $tmp.out check.time
	fi

	if [ -f $tmp.expunged ]
	then
	    notrun=`wc -l <$tmp.expunged | sed -e 's/  *//g'`
	    try=`expr $try - $notrun`
	    list=`echo "$list" | sed -f $tmp.expunged`
	fi

	echo "" >>check.log
	date >>check.log
	echo $list | fmt | sed -e 's/^/    /' >>check.log
	$interrupt && echo "Interrupted!" >>check.log
        
	if [ ! -z "$notrun" ]
	then
	    echo "Not run:$notrun"
	    echo "Not run:$notrun" >>check.log
	fi
        if [ ! -z "$n_bad" -a $n_bad != 0 ]
	then
	    echo "Failures:$bad"
	    echo "Failed $n_bad of $try tests"
	    echo "Failures:$bad" | fmt >>check.log
	    echo "Failed $n_bad of $try tests" >>check.log
	else
	    echo "Passed all $try tests"
	    echo "Passed all $try tests" >>check.log
	fi
	needwrap=false
    fi

    rm -f /tmp/*.rawout /tmp/*.out /tmp/*.err /tmp/*.time
    rm -f /tmp/check.pid /tmp/check.sts
    rm -f $tmp.*
}

trap "_wrapup; exit \$status" 0 1 2 3 15

# for hangcheck ...
# Save pid of check in a well known place, so that hangcheck can be sure it
# has the right pid (getting the pid from ps output is not reliable enough).
#
rm -rf /tmp/check.pid
echo $$ >/tmp/check.pid

# for hangcheck ...
# Save the status of check in a well known place, so that hangcheck can be
# sure to know where check is up to (getting test number from ps output is
# not reliable enough since the trace stuff has been introduced).
#
rm -rf /tmp/check.sts
echo "preamble" >/tmp/check.sts

# don't leave old full output behind on a clean run
rm -f check.full

# by default don't output timestamps
timestamp=${TIMESTAMP:=false}

. ./common

[ -f check.time ] || touch check.time

FULL_FSTYP_DETAILS=`_full_fstyp_details`
FULL_HOST_DETAILS=`_full_platform_details`
FULL_MKFS_OPTIONS=`_scratch_mkfs_options`
FULL_MOUNT_OPTIONS=`_scratch_mount_options`

cat <<EOF
FSTYP         -- $FULL_FSTYP_DETAILS
PLATFORM      -- $FULL_HOST_DETAILS
MKFS_OPTIONS  -- $FULL_MKFS_OPTIONS
MOUNT_OPTIONS -- $FULL_MOUNT_OPTIONS

EOF

umount $SCRATCH_DEV 2>/dev/null
# call the overridden mkfs.xfs - make sure the FS is built
# the same as we'll create it later.
if ! _scratch_mkfs_xfs -f >$tmp.err 2>&1
then
    echo "our local _scratch_mkfs_xfs routine ..."
    cat $tmp.err
    echo "check: failed to mkfs.xfs \$SCRATCH_DEV using specified options"
    exit 1
fi

# call the overridden mount - make sure the FS mounts with
# the same options that we'll mount with later.
if ! _scratch_mount >$tmp.err 2>&1
then
    echo "our local mount routine ..."
    cat $tmp.err
    echo "check: failed to mount \$SCRATCH_DEV using specified options"
    exit 1
fi

seq="check"
_check_test_fs

for seq in $list
do
    err=false
    echo -n "$seq"
    if $showme
    then
	echo
	continue
    elif [ -f expunged ] && $expunge && egrep "^$seq([ 	]|\$)" expunged >/dev/null
    then
	echo " - expunged"
	rm -f $seq.out.bad
	echo "/^$seq\$/d" >>$tmp.expunged
    elif [ ! -f $seq ]
    then
	echo " - no such test?"
	echo "/^$seq\$/d" >>$tmp.expunged
    else
	# really going to try and run this one
	#
	rm -f $seq.out.bad
	lasttime=`sed -n -e "/^$seq /s/.* //p" <check.time`
	if [ "X$lasttime" != X ]; then
		echo -n " ${lasttime}s ..."
	else
		echo -n "	"	# prettier output with timestamps.
	fi
	rm -f core $seq.notrun

	# for hangcheck ...
	echo "$seq" >/tmp/check.sts

	start=`_wallclock`
	$timestamp && echo -n "	["`date "+%T"`"]"
	[ ! -x $seq ] && chmod u+x $seq # ensure we can run it
	./$seq >$tmp.rawout 2>&1
	sts=$?
	$timestamp && echo -n " ["`date "+%T"`"]"
	stop=`_wallclock`

	_fix_malloc <$tmp.rawout >$tmp.out
	rm -f $tmp.rawout

	if [ -f core ]
	then
	    echo -n " [dumped core]"
	    mv core $seq.core
	    err=true
	fi

	if [ -f $seq.notrun ]
	then
	    $timestamp || echo -n " [not run] "
	    $timestamp && echo " [not run]" && echo -n "	$seq -- "
	    cat $seq.notrun
	    notrun="$notrun $seq"
	else
	    if [ $sts -ne 0 ]
	    then
		echo -n " [failed, exit status $sts]"
		err=true
	    fi
	    if [ ! -f $seq.out ]
	    then
		echo " - no qualified output"
		err=true
	    else
		if diff $seq.out $tmp.out >/dev/null 2>&1
		then
		    echo ""
		    if $err
		    then
			:
		    else
			echo "$seq `expr $stop - $start`" >>$tmp.time
		    fi
		else
		    echo " - output mismatch (see $seq.out.bad)"
		    mv $tmp.out $seq.out.bad
		    $diff $seq.out $seq.out.bad
		    err=true
		fi
	    fi
	fi

    fi

    # come here for each test, except when $showme is true
    #
    if $err
    then
	bad="$bad $seq"
	n_bad=`expr $n_bad + 1`
	quick=false
    fi
    [ -f $seq.notrun ] || try=`expr $try + 1`
    
    seq="after_$seq"
    _check_test_fs
    
done

interrupt=false
status=`expr $n_bad`
exit