gecko-dev/security/nss/tests/qa_stat
sonmi%netscape.com 7c1970ee45 Since we have frozen the tip I only checked in high priority fixes.
The individual fixes:
1) A complete QA failure produces a readable email now
2) the nssqa has goes thru a central Exit
3) hanging processes under NT and Win2K are killed (tail -f)
4) Functionallity is implemented to kill other remaining processes (killpif file)
5) improved general cleanup in Exit functions
6) the header is sourced from the nssqa dir rateher than /u/sonmi/bin
7) Problems with QA being reported as passed even if missing fixed
8) Most problems with the "missing Platform list" fixed
9) One QA failure path (cd to a dir without permission) did not give
	errormessage about the reason of failure before
10) fixed html errors in generated email
11) stopped filtering the "bad password" cases as real failures (was fixed in
	nssqa a while ago, but still filtered
12) removing more tmp files from /tmp (decreased debugging)
2001-01-23 01:51:47 +00:00

460 lines
12 KiB
Bash
Executable File

#! /bin/sh
########################################################################
#
# /u/sonmi/bin/qa_stat - /u/svbld/bin/init/nss/qa_stat
#
# this script is supposed to automatically run QA for NSS on all required
# Unix platforms
#
# parameters
# ----------
# nssversion (supported: 30b, 31, tip)
# builddate (default - today)
#
# options
# -------
# -y answer all questions with y - use at your own risk...ignores warnings
# -s silent (only usefull with -y)
# -h, -? - you guessed right - displays this text
# -d debug
# -f <filename> - write the (error)output to filename
# -m <mailinglist> - send filename to mailinglist (csl) only useful
# with -f
# -cron equivalient to -y -s -d -f $RESULTDIR/$HOST.qa_stat
#
########################################################################
O_OPTIONS=ON
. `dirname $0`/header
EARLY_EXIT=TRUE
DOCDIR=/u/sonmi/doc
Debug "NTDIST $NTDIST"
Debug "UXDIST $UXDIST"
Debug "TESTSCRIPTDIR $TESTSCRIPTDIR"
Debug "RESULTDIR $RESULTDIR"
############################### find_qa_systems ##########################
# local shell function, tries to determine the QA operating system
########################################################################
find_qa_systems()
{
#the line below had a bug, which caused nssqa as being run when only
#the .nssqa file existed
#FIXME remaining bugs:
#when only debug but not opt is being run this is not recognized.
#2000 and NT are reported the same way
#it should also examine the directory (.1) for files
for w in `ls $RESULTDIR | grep \.1$ | sed -e "s/\..*//" | sort -u`
do
NO_RSH="FALSE"
QA_OS=""
QA_RHVER=""
IS_64=""
IS_WIN=""
grep WINDOWS-OS-LINE ${RESULTDIR}/${w}.nssqa && NO_RSH=TRUE
if [ $NO_RSH = "TRUE" ]
then
grep WINDOWS-OS-LINE ${RESULTDIR}/${w}.nssqa | sed -e "s/ /_/g" \
-e "s/WINDOWS-OS-LINE:_Windows/${w}/g" >>$TMP_PLATFORMLIST_FILE
grep WINDOWS-OS-LINE ${RESULTDIR}/${w}.nssqa | sed -e "s/ /_/g" \
-e "s/WINDOWS-OS-LINE:_Windows/${w}/g"
else
QA_SYS=`rsh $w uname -sr`
echo $QA_SYS | grep Linux && QA_RHVER=`rsh $w cat /etc/redhat-release`
if [ -n "$QA_RHVER" ]
then
QA_OS=`echo $w $QA_RHVER | sed -e "s/Red Hat /RH /" \
-e "s/ release//"`
else
case $QA_SYS in
*SunOS*5.8*)
IS_64=`rsh $w isainfo -v | grep 64 >/dev/null && \
echo 64 bit`
if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
;;
*HP*)
IS_64=`rsh $w getconf KERNEL_BITS | grep 64 >/dev/null && \
echo 64 bit`
if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
;;
*AIX*)
IS_64=`rsh $w lslpp -l | grep "bos.64bit"> /dev/null && \
echo 64 bit`
if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
;;
esac
QA_OS=`echo "$w $QA_SYS $IS_64"`
fi
echo $QA_OS
echo $QA_OS | sed -e "s/ /_/g" >>$TMP_PLATFORMLIST_FILE # use later for
# missing list
fi
done
}
################################### set_files ##########################
# local shell function, sets the name of the resultfile to:
# <filename> if option -f <filename>
# $RESULTDIR/result if write permission
# (mozilla/tests_results/security/result)
# $HOME/resultNSS${NSSVER}-${BUILDDATE} if no write permission in $RESULTDIR
########################################################################
set_files()
{
if [ $O_FILE = ON -a $O_CRON = OFF ] # if -f was specified write there
then
RFILE=$FILENAME
else
RFILE=${RESULTDIR}/result
#RFILE=${RESULTDIR}/result.$$
if [ ! -w $RESULTDIR ]
then
RFILE=$HOME/resultNSS${NSSVER}-${BUILDDATE}
Debug "Using alternate resultfile $RFILE"
elif [ $O_CRON = ON ]
then
find ${RESULTDIR} -exec chmod a+rw {} \; #FIXME - umask
#doesn't seem to work - this is a tmp workaround
fi
if [ ! -x $RESULTDIR -o ! -r $RESULTDIR -o ! -w $RESULTDIR ]
then
glob_usage "$RESULTDIR does not have the right permissions `ls -l $RESULTDIR`"
fi
if [ -d $RESULTDIR ]
then
cd $RESULTDIR
else
glob_usage "$RESULTDIR does not exist"
fi
fi
TMP_E_FILE=${RFILE}.E$$
TMP_P_FILE=${RFILE}.P$$
TMP_PLATFORMLIST_FILE=${RFILE}.platform.$$
rm $TMP_PLATFORMLIST_FILE 2>/dev/null
TMP_PERF_FILE=${RFILE}.perf.$$
HTML_FILE=${RFILE}.html
TMPFILES="$TMPFILES $TMP_E_FILE $TMP_P_FILE"
#FIXME rm the rest too - add them to the TMPFILES
FILENAME=$RFILE #we might want to mail it...later switch to html file
O_FILE="ON"
rm $HTML_FILE $RFILE $TMP_E_FILE $TMP_P_FILE 2>/dev/null
cp $DOCDIR/QAheader.html $HTML_FILE
}
################################# html_eot #########################
# local shell function, writes end of the html table
########################################################################
html_eot()
{
echo '</table>'
}
################################# html_footer #########################
# local shell function, writes end of the html body
########################################################################
html_footer()
{
echo '</body>'
echo '</html>'
}
################################# setQAsysvars #########################
# local shell function, sets system specific variables
########################################################################
setQAsysvars()
{
if [ "$MACHINE" != "0" ]
then
TESTDATE=`ls -ld $MACHINE | awk '{ print $5, $6, $7 }'`
TESTNUMBER=`echo $MACHINE | sed -e 's/.*\.//'`
SYSNAME=`echo $MACHINE | sed -e 's/\..*//'`
Debug "SYSNAME= $SYSNAME"
QA_SYS_OS=`grep $SYSNAME $TMP_PLATFORMLIST_FILE |sed -e 's/
//' | \
sort | uniq | sed -e "s/$SYSNAME//" \
-e "s/WINNT_WIN95/Windows NT/" \
-e "s/WINNT_WINNT/Windows NT/" \
-e "s/Windows_NT_WIN95/Windows NT/" \
-e "s/Windows_NT_WINNT/Windows NT/" | sort | uniq`
Debug "QA_SYS_OS= $QA_SYS_OS"
fi
BUILD_SYS=`echo $BUILDPLATFORM | sed -e 's/\.OBJ//' -e 's/_DBG/ Debug/' \
-e 's/_OPT/ Optimized/' -e 's/_64/ 64bit/' -e 's/_glibc_PTH//' \
-e 's/_/ /'`
Debug "BUILD_SYS=$BUILD_SYS"
if [ -f "${RESULTDIR}/${MACHINE}/results.html" ]
then
RESULT="http://cindercone${RESULTDIR}/${MACHINE}/results.html"
Debug "RESULT=$RESULT"
else
RESULT="0"
Debug "no resultfile"
fi
if [ -f "${RESULTDIR}/${MACHINE}/output.log" ]
then
LOG="http://cindercone${RESULTDIR}/${MACHINE}/output.log"
Debug "LOG=$LOG"
else
LOG="0"
Debug "no logfile"
fi
}
HTML_ERRORCOLOR=\"#FF0000\"
HTML_ERRORMSG=Failed
HTML_MISSINGCOLOR=\"#FFFFCC\"
HTML_MISSINGMSG=Missing
HTML_PASSEDCOLOR=\"#66FF99\"
HTML_PASSEDMSG=Passed
################################# html_line() #########################
# local shell function, writes a line in the html table
########################################################################
html_line()
{
echo '<tr NOSAVE>'
echo '<td NOSAVE>'$BUILD_SYS'</td>'
echo ''
echo '<td NOSAVE>'$QA_SYS_OS'</td>'
echo ''
echo '<td>'$SYSNAME'</td>'
#echo '<td>'$SYSNAME $TESTNUMBER $TESTDATE'</td>'
echo ''
if [ "$1" = "failed" ]
then
echo '<td BGCOLOR='$HTML_ERRORCOLOR' NOSAVE><b>'$HTML_ERRORMSG'</b></td>'
elif [ "$1" = "passed" ]
then
echo '<td BGCOLOR='$HTML_PASSEDCOLOR' NOSAVE>'$HTML_PASSEDMSG'</td>'
else
echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>'
fi
if [ "$RESULT" = "0" ]
then
echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>'
else
echo '<td>&nbsp;<a href="'$RESULT'">result</a>&nbsp;</td>'
fi
echo ''
if [ "$LOG" = "0" ]
then
echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>'
else
echo '<td>&nbsp;<a href="'$LOG'">log</a>&nbsp;</td>'
fi
echo ''
if [ "$1" = "failed" ]
then
echo '<td>&nbsp;<a href="#errorlist">error</a>&nbsp;</td>'
else
echo '<td></td>'
fi
echo '<td>'$TESTDATE $TESTNUMBER'</td>'
echo '</tr>'
}
################################# qa_errorlist #########################
# local shell function, finds problems in the previously run QA
########################################################################
qa_errorlist()
{
if [ "$1" = "1" ]
then
echo " R e s u l t E r r o r l i s t"
lline
fi
#FIXME it should also examine the files for passed messages, since
#sometimes empty results and output.log files are generated
grep red */results.html |
sed -e 's/.results.html:<TR><TD>/ /' -e 's/<[^>]*>/ /g'
if [ "$1" = "1" ]
then
lline
echo " O u t p u t E r r o r / W a r n i n g l i s t"
lline
fi
grep 'cache hits; .* cache misses, .* cache not reusable' */output.log |
grep -v selfserv |
grep -v '0 cache hits; 1 cache misses, 0 cache not reusable' |
grep -v '0 cache hits; 0 cache misses, 0 cache not reusable' |
grep -v ' cache hits; 1 cache misses, 0 cache not reusable'
#grep -v '999 cache hits; 1 cache misses, 0 cache not reusable'
if [ "$1" = "1" ]
then
lline
echo " C o r e l i s t "
lline
fi
find . -name core -print 2>/dev/null
}
platformlist()
{
lline
echo " P l a t f o r m l i s t "
grep Platform */results.html |
sed -e 's/.results.html:<H4>Platform:/ /' \
-e 's/<BR>//' |
while read MACHINE BUILDPLATFORM
do
grep $MACHINE $1 >/dev/null
ret=$?
setQAsysvars
if [ $ret -eq 0 ]
then
echo "Failed $MACHINE $BUILDPLATFORM"
html_line failed >>$HTML_FILE
#echo "1 $MACHINE $BUILDPLATFORM Failed 2"
else
echo "Passed $MACHINE $BUILDPLATFORM"
html_line passed >>$HTML_FILE
#echo "1 $MACHINE $BUILDPLATFORM passed 2"
fi
done
}
############################ check_platforms ###########################
# local shell function, finds out if we ran on all required platforms
########################################################################
check_platforms()
{
#lline
#echo " M i s s i n g P l a t f o r m s"
#lline
QA_MISSING="QA report missing"
MACHINE="0"
for BUILDPLATFORM in `cat $TESTSCRIPTDIR/platformlist`
do
grep $BUILDPLATFORM $TMP_PLATFORMLIST_FILE > /dev/null || {
echo "$BUILDPLATFORM not tested: $QA_MISSING" >>$TMP_P_FILE
setQAsysvars
html_line missing >>$HTML_FILE
}
done
}
lline()
{
echo
echo "------------------------------------------------------------------"
echo
}
header()
{
lline
echo "QA results for NSS $NSSVER builddate $QAYEAR $BUILDDATE "
echo "today's date `date`"
lline
echo "testing in $RESULTDIR"
}
rsaperf()
{
grep RSAPERF */output.log | grep -v "_DBG" > $TMP_PERF_FILE
echo '&nbsp;'
echo '<br>&nbsp;'
echo '<center>'
echo '<h1>'
echo '<a NAME="Performance list"></a>Performance list</h1></center>'
echo '&nbsp;'
echo '<table BORDER WIDTH="100%" NOSAVE >'
echo '<tr NOSAVE>'
echo '<td NOSAVE><b><font size=+1>Build-OS and version</font></b></td>'
echo ''
echo '<td><b><font size=+1>Systemname</font></b></td>'
echo ''
echo '<td><b><font size=+1># of iterations</font></b></td>'
echo ''
echo '<td><b><font size=+1>average for one op</font></b></td>'
echo ''
echo '<td><b><font size=+1>Total</font></b></td>'
echo ''
echo '<td><b><font size=+1>QA time / #</font></b></td>'
echo '</tr>'
cat $TMP_PERF_FILE | while read MACHINE BUILDPLATFORM no_iter t1 t2 total total_unit t3 t4 t5 average average_unit
do
BUILD_SYS=`echo $BUILDPLATFORM | sed -e 's/\.OBJ//' \
-e 's/_DBG/ Debug/' \
-e 's/_OPT/ Optimized/' -e 's/_64/ 64bit/' -e 's/_glibc_PTH//' \
-e 's/_/ /'`
TESTNUMBER=`echo $MACHINE | sed -e 's/[^\.]*\.//' -e 's/\/.*//'`
MACHINE=`echo $MACHINE | sed -e 's/\..*//'`
TESTDATE=`ls -ld ${MACHINE}.${TESTNUMBER} | awk '{ print $5, $6, $7 }'`
echo '<tr>'
echo '<td>'$BUILD_SYS'</td>'
echo ''
echo '<td>'$MACHINE'</td>'
echo ''
echo '<td>'$no_iter'</td>'
echo ''
echo '<td>'$average' '$average_unit'</td>'
echo ''
echo '<td>'$total' '$total_unit'</td>'
echo ''
echo '<td>'$TESTDATE $TESTNUMBER'</td>'
echo ''
echo '</tr>'
done
echo '</table>'
}
set_files
find_qa_systems 2>/dev/null
#header > $RFILE
qa_errorlist 1 > $TMP_E_FILE
cat $TMP_E_FILE
platformlist $TMP_E_FILE > $RFILE
cat $RFILE
echo "" >$TMP_P_FILE
check_platforms $RFILE
html_eot >>$HTML_FILE
rsaperf >>$HTML_FILE
echo '<a NAME="errorlist"></a>' >> $HTML_FILE
qa_errorlist 2 | sed -e "s/^/<br>/" >>$HTML_FILE
html_footer >>$HTML_FILE
EARLY_EXIT=FALSE
FILENAME=$HTML_FILE #we might want to mail it...
Exit