mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
42e886a101
Fix up producing the results files.
534 lines
12 KiB
Bash
Executable File
534 lines
12 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# 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/
|
|
#
|
|
|
|
# automatic qa system. 31/08/00 dxm@sgi.com
|
|
|
|
# configuration (you could tune this)
|
|
|
|
_log()
|
|
{
|
|
echo "$*" >&2
|
|
echo "$*" >> $LOG
|
|
sync
|
|
}
|
|
|
|
_fail()
|
|
{
|
|
if [ "$started" = "1" ]
|
|
then
|
|
echo "auto-qa stopped" | wall
|
|
started=0
|
|
fi
|
|
|
|
_log "$*"
|
|
|
|
# send special email if a cron'd qa run fails
|
|
case $state
|
|
in
|
|
cron*)
|
|
mail -s "XFS QA status report" $EMAIL \
|
|
< $LOG 2>&1
|
|
;;
|
|
esac
|
|
|
|
status=1
|
|
exit 1
|
|
}
|
|
|
|
_get_kernel_version()
|
|
{
|
|
[ -x "$WORKAREA" ] \
|
|
|| _fail "can't access workarea $WORKAREA"
|
|
[ -r "$WORKAREA/linux/Makefile" ] \
|
|
|| _fail "can't read makefile $WORKAREA/linux/Makefile"
|
|
|
|
eval `awk '
|
|
BEGIN { FS = "[ \t=]+" }
|
|
/^VERSION =/ { a=$2 }
|
|
/^PATCHLEVEL =/ { b=$2 }
|
|
/^SUBLEVEL =/ { c=$2 }
|
|
/^EXTRAVERSION =/ { d=$2 }
|
|
END {
|
|
print "VERSION=" a "." b "." c d " ; SVERSION=" a "." b "." c
|
|
}
|
|
' < $WORKAREA/linux/Makefile`
|
|
}
|
|
|
|
# this should be constant
|
|
|
|
ROOT="$HOME/qa"
|
|
HOST=`hostname -s`
|
|
if [ ! -z "$CVSROOT" ]; then
|
|
WORKAREA="$ROOT/linux-2.4-xfs"
|
|
else
|
|
[ -z "$WORKAREA" ] && WORKAREA="$ROOT/linux-xfs"
|
|
fi
|
|
export WORKAREA
|
|
|
|
|
|
export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin/ptools:/usr/local/bin"
|
|
STATE=$ROOT/qa.state
|
|
QADIR="$WORKAREA/cmd/xfstests"
|
|
SUDO="su -c"
|
|
CONFIG="$ROOT/$HOST.config"
|
|
COMMON_CONFIG="$WORKAREA/cmd/xfstests/common.config"
|
|
SH="/bin/sh"
|
|
LOG="$ROOT/qa.log"
|
|
|
|
# do some cleanup on exit
|
|
|
|
_cleanup()
|
|
{
|
|
umount $SCRATCH_DEV &> /dev/null
|
|
umount $TEST_DEV &> /dev/null
|
|
if [ "$started" = 1 ]
|
|
then
|
|
echo "auto-qa stopped" | wall
|
|
started=0
|
|
fi
|
|
}
|
|
status=1
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
# clean exit
|
|
|
|
_success()
|
|
{
|
|
status=0
|
|
exit 0
|
|
}
|
|
|
|
_get_state()
|
|
{
|
|
state=`cat $STATE`
|
|
}
|
|
|
|
_set_state()
|
|
{
|
|
echo $1 > $STATE
|
|
_get_state
|
|
}
|
|
|
|
_change_state()
|
|
{
|
|
new=$1
|
|
|
|
case $state
|
|
in
|
|
*-*)
|
|
case $new
|
|
in
|
|
*-*)
|
|
_set_state $new
|
|
;;
|
|
*)
|
|
_set_state `echo $state | sed "s/-.*$/-$new/"`
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
_set_state $new
|
|
;;
|
|
esac
|
|
}
|
|
|
|
_sudo()
|
|
{
|
|
$ROOT/su -c "$*" < /dev/null ;# HACK - we need a hacked su at the mo
|
|
}
|
|
|
|
_restart()
|
|
{
|
|
exec $ROOT/su -c "(shutdown -r now \"auto-qa rebooting\" )&" < /dev/null
|
|
}
|
|
|
|
_update_autoqa_file()
|
|
{
|
|
SELF="$ROOT/auto-qa"
|
|
SELF_UPDATE="cmd/xfstests/tools/auto-qa"
|
|
if [ -z "$CVSROOT" ]; then
|
|
cmd="p_tupdate $SELF_UPDATE"
|
|
else
|
|
cmd="cvs -z3 update $SELF_UPDATE"
|
|
fi
|
|
exec $SH -c "cd $WORKAREA ; $cmd; chmod +x $SELF_UPDATE ; exec $SELF"
|
|
}
|
|
|
|
_update_workarea()
|
|
{
|
|
if [ -z "$CVSROOT" ]; then
|
|
_log " *** p_tupdate"
|
|
cd $WORKAREA
|
|
p_tupdate 2>&1 \
|
|
|| _fail " !!! p_tupdate failed"
|
|
|
|
_log " *** p_check/p_purge"
|
|
cd $WORKAREA
|
|
p_check -s | p_purge -yiu 2>&1 \
|
|
|| _fail " !!! p_check/p_purge failed"
|
|
|
|
_log " *** non-trunk files"
|
|
cd $WORKAREA
|
|
p_list -c 2>&1 \
|
|
|| _fail " !!! p_list failed"
|
|
else
|
|
_log " *** cvs update"
|
|
cd $WORKAREA
|
|
cvs -z3 update -d
|
|
fi
|
|
}
|
|
|
|
|
|
_log "*** linux-xfs QA (`date`)"
|
|
|
|
_get_state
|
|
|
|
# check preconditions for starting state
|
|
case $1
|
|
in
|
|
cron-init)
|
|
case $state
|
|
in
|
|
*done)
|
|
;;
|
|
*)
|
|
_fail " !!! cron-init while not in \"*done\" state"
|
|
;;
|
|
esac
|
|
;;
|
|
cron-restarted)
|
|
# we don't auto restart after reboot, but cron the restart
|
|
# to happen a bit later - it's much easier and safer that way
|
|
if [ "$state" != "cron-restarted" ]
|
|
then
|
|
_fail " !!! cron-restarted while not in \"cron-restarted\" state"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if [ "$1" != "" ]
|
|
then
|
|
_set_state $1
|
|
fi
|
|
|
|
[ "$UID" -eq 0 ] && _fail " !!! QA most be run as a normal user"
|
|
[ -d "$ROOT" ] || _fail " !!! QA root \"$ROOT\" not found"
|
|
[ -d "$WORKAREA" ] || _fail " !!! QA workarea \"$WORKAREA\" not found"
|
|
[ -r "$CONFIG" ] || _fail " !!! Can't read config file $CONFIG"
|
|
. "$COMMON_CONFIG" || _fail " !!! Couldn't source $COMMON_CONFIG"
|
|
|
|
_get_kernel_version
|
|
IMAGE="$BOOT/vmlinuz$EXTRA"
|
|
SYSTEMMAP="$BOOT/System.map-$VERSION$EXTRA"
|
|
MODULES="/lib/modules/$SVERSION"
|
|
|
|
cd $ROOT
|
|
|
|
started=1
|
|
echo "auto-qa started" | wall
|
|
|
|
while true
|
|
do
|
|
_get_state
|
|
|
|
_log " *** state $state start (`date`)"
|
|
_log " (user=$USER, host=$HOST)"
|
|
new_state=""
|
|
|
|
case $state
|
|
in
|
|
*init)
|
|
echo "" > $ROOT/qa.log
|
|
echo "" > $ROOT/qa.full
|
|
_log "******************************************************"
|
|
_log "QA init $VERSION (`date`)"
|
|
_log "******************************************************"
|
|
_log "--- kernel ($IMAGE)"
|
|
_log "--- modules ($MODULES)"
|
|
|
|
_change_state "inited"
|
|
_update_autoqa_file
|
|
;;
|
|
|
|
*inited)
|
|
_log " *** QA initialized"
|
|
new_state="update"
|
|
;;
|
|
|
|
*update)
|
|
_update_workarea
|
|
new_state="clean"
|
|
;;
|
|
|
|
*clean)
|
|
# we need to configure or else we might fail to clean
|
|
for pkg in attr acl xfsprogs dmapi xfsdump xfstests
|
|
do
|
|
cd $WORKAREA/cmd/$pkg
|
|
_log " *** clean $pkg tools"
|
|
make realclean 2>&1 \
|
|
|| _fail " !!! clean $pkg failed"
|
|
done
|
|
|
|
_log " *** clean linux"
|
|
cd $WORKAREA/linux
|
|
make mrproper 2>&1 \
|
|
|| _fail " !!! clean linux failed"
|
|
|
|
_log " *** install configuration file"
|
|
cp -f $CONFIG $WORKAREA/linux/.config 2>&1 \
|
|
|| _fail " !!! failed to install config"
|
|
|
|
_log " *** remove version file"
|
|
rm -f include/linux/version.h 2>&1 \
|
|
|| _fail " !!! failed to clean version"
|
|
|
|
new_state="reconfig"
|
|
;;
|
|
|
|
*reconfig)
|
|
|
|
_log " *** reconfig kernel"
|
|
|
|
_change_state "clean" ; # we better start from scratch if this fails
|
|
|
|
cd $WORKAREA/linux
|
|
# we want to use default options for any new config options.
|
|
echo -e "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" | \
|
|
make EXTRAVERSION=$EXTRA oldconfig 2>&1 \
|
|
|| _fail " !!! reconfig oldconfig failed"
|
|
make EXTRAVERSION=$EXTRA dep 2>&1 \
|
|
|| _fail " !!! reconfig dep failed"
|
|
|
|
new_state="buildtools"
|
|
;;
|
|
|
|
*buildtools)
|
|
_log " *** build and install tools"
|
|
for pkg in attr acl xfsprogs dmapi xfsdump xfstests
|
|
do
|
|
cd $WORKAREA/cmd/$pkg
|
|
|
|
# use e-fence - but this will only take effect on configure
|
|
make configure 2>&1 \
|
|
|| _fail " !!! configure $pkg failed"
|
|
make default 2>&1 \
|
|
|| _fail " !!! build $pkg failed"
|
|
|
|
_sudo make install install-dev 2>&1 \
|
|
|| _fail " !!! install $pkg failed"
|
|
|
|
# attr and acl now have install-lib targets as well
|
|
[ "$pkg" = "attr" -o "$pkg" = "acl" ] || continue
|
|
_sudo make install-lib 2>&1 \
|
|
|| _fail " !!! install $pkg failed"
|
|
done
|
|
|
|
new_state="buildkernel"
|
|
;;
|
|
|
|
*buildkernel)
|
|
_log " *** build kernel"
|
|
|
|
_change_state "clean" ; # we better start from scratch if this fails
|
|
|
|
cd $WORKAREA/linux
|
|
make -j4 EXTRAVERSION=$EXTRA bzImage modules 2>&1 \
|
|
|| _fail " !!! build bzImage/modules failed"
|
|
new_state="install"
|
|
;;
|
|
|
|
*install)
|
|
_log " *** blat old modules"
|
|
|
|
_sudo rm -rf $MODULES
|
|
|
|
_log " *** install kernel"
|
|
cd $WORKAREA/linux
|
|
_sudo cp -f $WORKAREA/linux/arch/i386/boot/bzImage $IMAGE 2>&1 \
|
|
|| _fail " !!! install kernel failed"
|
|
_sudo cp -f $WORKAREA/linux/System.map $SYSTEMMAP 2>&1 \
|
|
|| _fail " !!! install kernel failed"
|
|
_sudo make EXTRAVERSION=$EXTRA modules_install 2>&1 \
|
|
|| _fail " !!! install modules failed"
|
|
|
|
_log " *** reinit lilo"
|
|
_sudo /sbin/lilo 2>&1 \
|
|
|| _fail " !!! reinit lilo failed"
|
|
new_state="restart"
|
|
;;
|
|
|
|
*restart)
|
|
_log " *** select qa kernel"
|
|
_sudo /sbin/lilo -R linux-xfs-qa $KERNEL_OPTIONS 2>&1 \
|
|
|| _fail " !!! lilo failed"
|
|
|
|
_log " *** prepare to restart"
|
|
_change_state "restarted"
|
|
|
|
_log " *** restarting"
|
|
|
|
_restart # doesn't return
|
|
;;
|
|
|
|
*restarted)
|
|
_log " *** QA reentered after restart"
|
|
|
|
new_state="check"
|
|
;;
|
|
|
|
*check)
|
|
uname=`uname -ar`
|
|
_log " *** uname $uname"
|
|
_log " *** user tools"
|
|
ls -l /sbin/*xfs* /usr/sbin/*xfs* 2>&1
|
|
_log " *** kernel"
|
|
ls -l /boot/*$EXTRA* 2>&1
|
|
_log " *** kernel modules"
|
|
ls -l /lib/modules/$SVERSION$EXTRA/kernel/fs/xfs/*
|
|
|
|
if [ "$MODULAR" -eq 0 ]
|
|
then
|
|
new_state="reset"
|
|
else
|
|
new_state="probe"
|
|
fi
|
|
;;
|
|
|
|
*probe)
|
|
_log " *** modules dependencies"
|
|
|
|
_sudo depmod -a 2>&1 \
|
|
|| _fail " !!! failed to depmod -a"
|
|
|
|
_log " *** unmounting XFS mounts"
|
|
|
|
_sudo umount -a -t xfs 2>&1
|
|
|
|
_log " *** removing modules"
|
|
|
|
for m in xfsidbg xfs kdbm_pg kdbm_vm
|
|
do
|
|
_sudo rmmod $m 2> /dev/null
|
|
done
|
|
|
|
_log " *** installing modules"
|
|
|
|
_sudo modprobe xfs 2>&1 \
|
|
|| _fail " !!! failed to modprobe xfs"
|
|
|
|
new_state="reset"
|
|
;;
|
|
|
|
*reset)
|
|
|
|
_log " *** unmounting TEST_DEV"
|
|
|
|
_sudo umount $TEST_DEV 2>&1
|
|
|
|
_log " *** unmounting SCRATCH_DEV"
|
|
|
|
_sudo umount $SCRATCH_DEV 2>&1
|
|
|
|
_log " *** clean TEST_DEV"
|
|
|
|
_sudo mkfs -t xfs -f $MKFS_OPTIONS $TEST_DEV 2>&1 \
|
|
|| _fail " !!! failed to mkfs TEST_DEV"
|
|
|
|
_log " *** mounting TEST_DEV"
|
|
|
|
_sudo mount -t xfs $TEST_DEV $TEST_DIR 2>&1 \
|
|
|| _fail " !!! failed to mount"
|
|
|
|
new_state="run"
|
|
;;
|
|
|
|
soak-run)
|
|
cd $QADIR
|
|
|
|
_log " *** run soak test"
|
|
_sudo ./soak $SOAK_PASSES $SOAK_STRESS $SOAK_PROC \
|
|
|| _fail " !!! failed to run soak test"
|
|
|
|
new_state="done"
|
|
;;
|
|
|
|
bench-run)
|
|
cd $QADIR
|
|
|
|
_log " *** run benchmarks"
|
|
_sudo ./bench $BENCH_PASSES `id -nu && id -ng` \
|
|
|| _fail " !!! failed to run benchmarks"
|
|
|
|
_log ""
|
|
_log " *** send results mail"
|
|
mail -s "XFS QA benchmark results" $EMAIL < $QADIR/bench.out 2>&1
|
|
|
|
new_state="done"
|
|
;;
|
|
|
|
*run)
|
|
cd $QADIR
|
|
|
|
_log " *** run tests"
|
|
_sudo ./check -l -g auto 2>&1 | tee $ROOT/qa.out
|
|
|
|
_log ""
|
|
_log " *** send status mail"
|
|
mail -s "XFS QA status report" $EMAIL < $ROOT/qa.out 2>&1
|
|
|
|
new_state="done"
|
|
;;
|
|
|
|
*done)
|
|
_log "*** QA run complete"
|
|
|
|
_success
|
|
;;
|
|
|
|
*nothing)
|
|
new_state="done"
|
|
_log " *** do nothing"
|
|
;;
|
|
|
|
*)
|
|
_fail " !!! unknown state $state"
|
|
;;
|
|
esac
|
|
|
|
_log " *** state $state done (`date`)"
|
|
[ "$new_state" = "" ] && _fail " !!! no new state set"
|
|
_change_state $new_state
|
|
|
|
done
|