summaryrefslogtreecommitdiff
path: root/tests/qa_stat
diff options
context:
space:
mode:
authorKai Engert <kaie@kuix.de>2013-02-28 12:44:50 +0100
committerKai Engert <kaie@kuix.de>2013-02-28 12:44:50 +0100
commit3ecd967b2a9e23403935e2bc932597f7e03e7f24 (patch)
tree4b0f054f0354c2dbe401f86d864c04c6034c1621 /tests/qa_stat
parentf45b9ca74a609e0521d0cc4b7fc91603774992df (diff)
downloadnss-hg-3ecd967b2a9e23403935e2bc932597f7e03e7f24.tar.gz
Bug 845556, reorganize NSS directory layout, moving files, very large changeset! r=wtc
Diffstat (limited to 'tests/qa_stat')
-rwxr-xr-xtests/qa_stat938
1 files changed, 938 insertions, 0 deletions
diff --git a/tests/qa_stat b/tests/qa_stat
new file mode 100755
index 000000000..ddf8dd8d2
--- /dev/null
+++ b/tests/qa_stat
@@ -0,0 +1,938 @@
+#! /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
+
+TBX_EXIT=49 # in case we are running on a tinderbox build, any
+ # early exit needs to return an error
+if [ -z "$O_TBX" -o "$O_TBX" = "OFF" ] ; then
+ if [ -z "$O_LOCAL" -o "$O_LOCAL" = "OFF" ] ; then
+ . `dirname $0`/header
+ fi
+fi
+Debug "Sourced header O_TBX=$O_TBX O_LOCAL=$O_LOCAL"
+TBX_EXIT=48
+EARLY_EXIT=TRUE
+
+URL="cindercone.red.iplanet.com"
+
+DOCDIR=/u/sonmi/doc
+
+HTML_ERRORCOLOR=\"#FF0000\"
+HTML_ERRORMSG=Failed
+
+HTML_MISSINGCOLOR=\"#FFFFCC\"
+HTML_MISSINGMSG=Missing
+
+HTML_INCOMPLETECOLOR=$HTML_MISSINGCOLOR
+HTML_INCOMPLETEMSG=Incomplete
+
+HTML_PASSEDCOLOR=\"#66FF99\"
+HTML_PASSEDMSG=Passed
+
+# this file is used to deal with hanging rsh - a new shell is started
+# for each rsh, and a function is called after it is finished - they
+# communicate with this file
+
+RSH_FILE=$TMP/rsh.$$
+echo >$RSH_FILE
+TMPFILES="$TMPFILES $WARNINGLIST $RSH_FILE "
+RSH_WAIT_TIME=80 #maximum time allowed for the 2 rsh to finish...
+#TOTAL_TESTS=106
+TOTAL_TESTS=252 #tip
+#TOTAL_TESTS=244 #3.4
+#TOTAL_TESTS=123 #3.3.2
+BCT_TOTAL_TESTS=122 #3.2.2
+#TOTAL_TESTS=133 #tip
+
+Debug "NTDIST $NTDIST"
+Debug "UXDIST $UXDIST"
+Debug "TESTSCRIPTDIR $TESTSCRIPTDIR"
+Debug "RESULTDIR $RESULTDIR"
+
+############################### watch_rsh ##############################
+# local shell function, deals with a hanging rsh (kills it...)
+# this function is started as a backgroundprocess before the rsh is started,
+# and writes info to the RSH_FILE, after the rsh is finished it writes finish
+# info to the same file (this time called as a function, forground).
+# the backgroundprocess stays around for RSH_WAIT_TIME, if then the finish
+# information is not there attempts to kill the rsh
+#
+# watch_rsh start qa_computername &
+# watch_rsh stop qa_computername
+#
+########################################################################
+watch_rsh()
+{
+ case $1 in
+ start)
+ echo "$2 started" >>$RSH_FILE
+ sleep $RSH_WAIT_TIME
+ O_ALWAYS_YES=ON # may modify global flags because this is a
+ # forked off bg process - kill_by_name otherwise
+ # will ask the user if it really should be killed
+ grep "$2 finished" $RSH_FILE >/dev/null || kill_by_name "rsh $2"
+ exit
+ ;;
+ stop)
+ echo "$2 finished" >>$RSH_FILE
+ ;;
+ esac
+}
+
+############################### find_qa_systems ########################
+# local shell function, tries to determine the QA operating system
+# works remotely, and for Windows machines
+########################################################################
+find_qa_systems()
+{
+for QA_SYS in `ls $RESULTDIR | grep '\.1$' | sed -e "s/\..*//" | sort -u`
+do
+ NO_RSH="FALSE"
+ QA_OS=""
+ QA_RHVER=""
+ IS_64=""
+ IS_WIN=""
+
+ grep OS-LINE ${RESULTDIR}/${QA_SYS}.nssqa >/dev/null && NO_RSH=TRUE
+
+ if [ "$NO_RSH" = "TRUE" ]
+ then
+
+ QA_OS=`grep OS-LINE ${RESULTDIR}/${QA_SYS}.nssqa | sort -u | sed \
+ -e "s/.*-OS-LINE: /${QA_SYS}/"`
+ QA_OS_STRING=`echo $QA_OS | sed -e "s/^[_ ]//" -e "s/ /_/g"`
+ echo $QA_OS_STRING >>$PLATFORMLIST
+ if [ "$O_SILENT" != ON ] ; then
+ echo $QA_OS
+ fi
+
+ #grep OS-LINE ${RESULTDIR}/${QA_SYS}.nssqa | sort -u | sed \
+ #-e "s/.*-OS-LINE: /${QA_SYS}_/" >>$PLATFORMLIST
+ #if [ "$O_SILENT" != ON ] ; then
+ #grep OS-LINE ${RESULTDIR}/${QA_SYS}.nssqa | sort -u | sed \
+ #-e "s/.*-OS-LINE:/${QA_SYS}/"
+ #fi
+ else
+ REM_SYSNAME=$QA_SYS
+ watch_rsh start $REM_SYSNAME &
+ qa_stat_get_sysinfo $QA_SYS
+ watch_rsh stop $REM_SYSNAME
+ echo $QA_OS_STRING >>$PLATFORMLIST
+ # use later for missing list
+ fi
+done
+
+}
+
+################################### qa_stat_init ##########################
+# 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
+########################################################################
+qa_stat_init()
+{
+ if [ $O_FILE = ON -a $O_CRON = OFF ] # if -f was specified write there
+ then
+ RFILE=$FILENAME
+ else
+ 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
+
+ ERRORLIST=${RFILE}.E
+ PLATFORMLIST=${RFILE}.P
+ PERFLIST=${RFILE}.PE
+ TMP_HTML_FILE=${RFILE}.html
+ HTML_FILE=${RESULTDIR}/result.html
+ WARNINGLIST=${RFILE}.W
+ BCMISSINGLIST=${RFILE}.BCM
+ BCERRORLIST=${RFILE}.BCE
+ TMPFILE=${RFILE}.T
+ ML_FILE=${RFILE}.ML
+
+ TMPFILES="$TMPFILES $TMPFILE"
+ TMPFILES="$TMPFILES $ERRORLIST $PLATFORMLIST $PERFLIST $WARNINGLIST \
+ $BCMISSINGLIST $BCERRORLIST $ML_FILE" #FIXME uncomment
+
+ FILENAME=$RFILE #we might want to mail it...later switch to html file
+ O_FILE="ON"
+
+ rm $ERRORLIST $PLATFORMLIST $PERFLIST $WARNINGLIST \
+ $BCMISSINGLIST $BCERRORLIST $TMP_HTML_FILE 2>/dev/null
+ touch $ERRORLIST $PLATFORMLIST $PERFLIST $WARNINGLIST \
+ $BCMISSINGLIST $BCERRORLIST $TMP_HTML_FILE 2>/dev/null
+
+ if [ $O_WIN = "ON" -a "$O_TBX" = "ON" ] ; then
+ HTML_PATH="http://${URL}${UX_D0}/nss${NSSVER}/tinderbox/tests_results/security/`basename $RESULTDIR`"
+ else
+ HTML_PATH="http://${URL}${RESULTDIR}"
+ fi
+ HREF_TMP_HTML_FILE="${HTML_PATH}/`basename $HTML_FILE`"
+
+ write_qa_header_html >$TMP_HTML_FILE
+}
+
+################################# html_footer #########################
+# local shell function, writes end of the html body
+#######################################################################
+write_qa_header_html()
+{
+echo 'Subject: QA Report ' $NSSVER $BUILDDATE '
+From: sonmi@iplanet.com
+Reply-To: sonmi@iplanet.com
+Content-Type: text/html; charset=us-ascii
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; U; SunOS 5.8 sun4u) [N
+etscape]">
+</head>
+<body>
+<br>
+&nbsp;
+<br>&nbsp;
+<h2>
+<a href="http://tinderbox.mozilla.org/showbuilds.cgi?tree=NSS">Tinderbox</a
+><br>
+<a href="http://cindercone.red.iplanet.com/share/builds/mccrel3/nss/nsstip/tinderbox/tests_results/security/">Tinderbox QA&nbsp;result</a><br>
+<a href="ftp://ftp.mozilla.org/pub/security/nss/daily_qa">Mozilla Daily NSS QA&nbsp;result</a></h2>
+&nbsp;
+
+&nbsp;
+<br>&nbsp;
+<center>
+<h1>
+<a NAME="Top"></a><b><font size=+2>QA&nbsp;Results</font></b></h1></center>
+
+
+<table BORDER WIDTH="100%" NOSAVE >
+<tr>
+<td>&nbsp;<b><font size=+1>Build-OS and version</font></b></td>
+<td><b><font size=+1>QA-OS</font></b></td>
+<td><b><font size=+1>Systemname</font></b></td>
+<td><b><font size=+1>P/F</font></b></td>
+<td><b><font size=+1>result</font></b></td>
+<td><b><font size=+1>output</font></b></td>
+<td><b><font size=+1>errors</font></b></td>
+<td><b><font size=+1>QA time / #</font></b></td>
+</tr>
+'
+}
+
+################################# 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
+ MACHINE=`echo $MACHINE | sed -e 's/^bct.//g'`
+ TESTDATE=`ls -ld $MACHINE | awk '{ print $6, $7, $8 }'`
+ TESTNUMBER=`echo $MACHINE | sed -e 's/.*\.//'`
+ SYSNAME=`echo $MACHINE | sed -e 's/\..*//'`
+ Debug "SYSNAME= $SYSNAME"
+
+ if [ "$O_TBX" = "ON" -o "$O_LOCAL" = "ON" ] ; then
+ QA_SYS_OS=$QA_OS
+ else
+ QA_SYS_OS=`grep $SYSNAME $PLATFORMLIST |
+ sed -e 's/ //' | \
+ sort | uniq | sed -e "s/$SYSNAME//" \
+ -e "s/^_//" | sort | uniq`
+ fi
+ 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="${HTML_PATH}/${MACHINE}/results.html"
+ else
+ RESULT="0"
+ fi
+ if [ -f "${RESULTDIR}/bct/${MACHINE}/results.html" ] ; then
+ BCB_RESULT="${HTML_PATH}/bct/${MACHINE}/results.html"
+ else
+ BCB_RESULT="0"
+ fi
+
+ if [ -f "${RESULTDIR}/${MACHINE}/output.log" ] ; then
+ LOG="${HTML_PATH}/${MACHINE}/output.log"
+ else
+ LOG="0"
+ fi
+ if [ -f "${RESULTDIR}/bct/${MACHINE}/output.log" ] ; then
+ BCB_LOG="${HTML_PATH}/bct/${MACHINE}/output.log"
+ else
+ BCB_LOG="0"
+ fi
+}
+
+################################# html_line() #########################
+# local shell function, writes a line in the html table
+########################################################################
+html_line()
+{
+ echo '<tr NOSAVE>'
+ echo '<td NOSAVE>'$BUILD_SYS'</td>'
+ echo ''
+ if [ "$QA_SYS_OS" != "0" ] ; then
+ echo '<td NOSAVE>'$QA_SYS_OS'</td>'
+ else
+ echo '<td></td>'
+ fi
+ echo ''
+ if [ "$SYSNAME" != "0" ] ; then
+ echo '<td>'$SYSNAME'</td>'
+ else
+ echo '<td></td>'
+ fi
+ #echo '<td>'$SYSNAME $TESTNUMBER $TESTDATE'</td>'
+ echo ''
+ # hopefully we never run more different tests on a tinderbox build...
+ # on win some shells can not handle exit codes greater then 52 (64???)
+ # so for very early exits the codes are set 50-45, for failures later
+ # in the process the higher the number, the more failures
+ if [ "$O_TBX" = "ON" -a "$TBX_EXIT" -gt 45 ] ; then
+ TBX_EXIT=0
+ fi
+ if [ "$1" = "failed" ]
+ then
+ TBX_EXIT=`expr $TBX_EXIT + 1`
+ echo '<td BGCOLOR='$HTML_ERRORCOLOR' NOSAVE><b>'$HTML_ERRORMSG'</b></td>'
+ elif [ "$1" = "passed" ]
+ then
+ echo '<td BGCOLOR='$HTML_PASSEDCOLOR' NOSAVE>'$HTML_PASSEDMSG'</td>'
+ elif [ "$1" = "incomplete" ]
+ then
+ TBX_EXIT=`expr $TBX_EXIT + 1`
+ echo '<td BGCOLOR='$HTML_INCOMPLETECOLOR' NOSAVE>'$HTML_INCOMPLETEMSG'</td>'
+ else
+ TBX_EXIT=`expr $TBX_EXIT + 1`
+ echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>'
+ fi
+ if [ "$CURRENT_TABLE" != "BC" ] ; then
+ 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
+ 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
+ if [ "$1" = "failed" ] ; then
+ echo '<td>&nbsp;<a href="'${HREF_TMP_HTML_FILE}'#errorlist">error</a>&nbsp;</td>'
+ else
+ echo '<td></td>'
+ fi
+ else
+ #<td><b><font size=+1>errors</font></b></td>
+ #<td><b><font size=+1>P/F</font></b></td>
+ #<td><b><font size=+1>P/F</font></b></td>
+
+ #echo '<td><b><font size=+1>All Current</font></b></td>'
+ #echo '<td><b><font size=+1>old dlls</font></b></td>'
+ #echo '<td><b><font size=+1>old executables</font></b></td>'
+ #if [ "$RESULT" != "0" -a "$LOG" != "0" ] ; then
+ #echo '<td><a href="'$RESULT'">result</a>, <a href="'$LOG'">log</td>'
+ #elif [ "$RESULT" = "0" -a "$LOG" != "0" ] ; then
+ #echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE><a href="'$LOG'">log</a></td>'
+ #elif [ "$RESULT" != "0" -a "$LOG" = "0" ] ; then
+ #echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE><a href="'$RESULT'">result</a></td>'
+ #else
+ #echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>'
+ #fi
+ #if [ "$BCB_RESULT" != "0" -a "$BCB_LOG" != "0" ] ; then
+ #echo '<td><a href="'$BCB_RESULT'">result</a>, <a href="'$BCB_LOG'"> log</td>'
+ #elif [ "$BCB_RESULT" = "0" -a "$BCB_LOG" != "0" ] ; then
+ #echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE><a href="'$BCB_LOG'">log</a></td>'
+ #elif [ "$BCB_RESULT" != "0" -a "$BCB_LOG" = "0" ] ; then
+ #echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE><a href="'$BCB_RESULT'">result</a></td>'
+ #else
+ #echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>'
+ #fi
+ if [ "$BCB_RESULT" = "0" ] ; then
+ echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>'
+ else
+ echo '<td>&nbsp;<a href="'$BCB_RESULT'">result</a>&nbsp;</td>'
+ fi
+ if [ "$BCB_LOG" = "0" ] ; then
+ echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>'
+ else
+ echo '<td>&nbsp;<a href="'$BCB_LOG'">log</a>&nbsp;</td>'
+ fi
+ fi
+ echo '<td>'$TESTDATE $TESTNUMBER'</td>'
+ echo '</tr>'
+}
+
+################################# qa_errorlist #########################
+# local shell function, finds problems in the previously run QA
+# linux:the gnu grep, on Linux can output 10 lines above and 3 lines below
+# the errormessage
+########################################################################
+qa_errorlist()
+{
+ grep "bgcolor=red" ${MACHINES_TO_CHECK}*/results.html |
+ sed -e 's/.results.html:<TR><TD>/ /' -e 's/<[^>]*>/ /g'
+ grep 'cache hits; .* cache misses, .* cache not reusable' \
+ ${MACHINES_TO_CHECK}*/output.log |
+ grep strsclnt |
+ grep -v '0 cache hits; 0 cache misses, 0 cache not reusable' |
+ grep -v ' cache hits; 1 cache misses, 0 cache not reusable'
+ for logfile in ${MACHINES_TO_CHECK}*/output.log; do
+ grep -vi "write to SSL socket" $logfile |
+ grep -vi "HDX PR_Read returned error" |
+ grep -vi "no error" |
+ grep -vi "12285" |
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP error
+ #grep -vi "5938" | needed for -v option
+ #grep -vi "HDX PR_Read hit EOF" |
+ grep -vi "write to SSL socket" $logfile |
+ grep -vi "peer cannot verify" |
+ grep -vi "error" |
+ grep -vi "fatal" |
+ grep -vi "TCP Connection aborted" |
+ grep -vi "TCP connection reset" |
+ grep $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP -i failed
+ done
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP "segmentation violation" \
+ ${MACHINES_TO_CHECK}*/output.log
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP "memory fault" \
+ ${MACHINES_TO_CHECK}*/output.log
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP "bus error" \
+ ${MACHINES_TO_CHECK}*/output.log
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP "core dumped" \
+ ${MACHINES_TO_CHECK}*/output.log
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP fatal \
+ ${MACHINES_TO_CHECK}*/output.log
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP -i\
+ "PKCS12 decode not verified" ${MACHINES_TO_CHECK}*/output.log
+
+ if [ -n "${MACHINES_TO_CHECK}" ] ; then
+ find ${MACHINES_TO_CHECK}* -name core -print 2>/dev/null |
+ grep -v bct
+ else
+ find . -name core -print 2>/dev/null |
+ grep -v bct
+ fi
+}
+
+tbx_missing_platforms ()
+{
+ QA_MISSING="QA report missing"
+ MACHINE="0"
+
+ if [ "$QA_OS_STRING" = "WINNT4.0" ] ; then
+ QA_OS_STRING="Windows-NT-4.0"
+ fi
+ for BUILDPLATFORM in `grep $QA_OS_STRING $TESTSCRIPTDIR/platformlist.tbx`
+ do
+ if [ "$BUILDPLATFORM" != "$QA_OS_STRING" ] ; then
+ Debug "BUILDPLATFORM = $BUILDPLATFORM QA_OS_STRING = $QA_OS_STRING"
+ grep $BUILDPLATFORM ${MACHINES_TO_CHECK}*/results.html \
+ >/dev/null || {
+ setQAsysvars
+ html_line missing >>$TMP_HTML_FILE
+ }
+ fi
+ done
+}
+
+############################ platform _list ###########################
+# local shell function, generate pass/fail information for each Platform
+########################################################################
+platformlist()
+{
+ grep Platform ${MACHINES_TO_CHECK}*/results.html |
+ sed -e 's/.results.html:<H4>Platform: /---/' \
+ -e 's/<BR>//' >$TMPFILE
+ # this is done a little complicated to avoid starting a subshell in
+ # a while read that gets the input from a pipeline, and variables set
+ #in or underneath this function get unset after done...
+ for MB in `cat $TMPFILE` ; do
+ MACHINE=`echo $MB | sed -e "s/---.*//"`
+ BUILDPLATFORM=`echo $MB | sed -e "s/.*---//"`
+ grep "${MACHINE}[^0-9]" $ERRORLIST >/dev/null
+ ret=$?
+ setQAsysvars
+ if [ $ret -eq 0 ]
+ then
+ echo "Failed $MACHINE $BUILDPLATFORM" >>$RFILE
+ html_line failed >>$TMP_HTML_FILE
+ else
+ echo "Passed $MACHINE $BUILDPLATFORM" >>$RFILE
+ html_line passed >>$TMP_HTML_FILE
+ fi
+ done
+}
+
+############################ missing_platforms ###########################
+# local shell function, finds out if we ran on all required platforms
+########################################################################
+missing_platforms()
+{
+ QA_MISSING="QA report missing"
+ MACHINE="0"
+ SYSNAME="0"
+ QA_SYS_OS="0"
+
+ for BUILDPLATFORM in `cat $TESTSCRIPTDIR/platformlist`
+ do
+ grep $BUILDPLATFORM $PLATFORMLIST > /dev/null || {
+ setQAsysvars
+ html_line missing >>$TMP_HTML_FILE
+ }
+ done
+}
+
+############################ incomplete_results ###########################
+# local shell function, finds out if all qa runs were complete
+########################################################################
+incomplete_results ()
+{
+
+ for w in `ls ${MACHINES_TO_CHECK}*/results.html`
+ do
+ grep bgcolor=red $w || {
+ PASSED_LINES=""
+ PASSED_LINES=`grep bgcolor=lightGreen $w | wc -l`
+ if [ -n "$PASSED_LINES" -a "$PASSED_LINES" -lt "$TOTAL_TESTS" ] ; then
+ BUILDPLATFORM=`grep Platform $w | sed -e 's/<H4>Platform:/ /' -e 's/<BR>//'`
+ MACHINE=`echo $w | sed -e "s/.results.html//"`
+ #MACHINE=`echo $w | sed -e "s/\.[0-9]*.results.html//"`
+ setQAsysvars
+ html_line incomplete >>$TMP_HTML_FILE
+ elif [ "$PASSED_LINES" -gt "$TOTAL_TESTS" ] ; then
+ echo "WARNING - more tests than expected on $w ($PASSED_LINES)" >>$WARNINGLIST
+ fi
+ }
+ done
+}
+
+qa_stat_table()
+{
+ echo '&nbsp;'
+ echo '<br>&nbsp;'
+ echo '<center>'
+ echo '<h1>'
+ echo '<a NAME="'$1'"></a>'$1'</h1></center>'
+ echo '&nbsp;'
+ echo '<table BORDER WIDTH="100%" NOSAVE >'
+ echo '<tr NOSAVE>'
+}
+
+############################### psaperf ########################
+# local shell function, copies results of the daily performance test
+# into a table in the QA report
+########################################################################
+rsaperf()
+{
+ grep RSAPERF */output.log | grep -v "_DBG" > $PERFLIST
+
+ qa_stat_table "Performance list"
+
+ echo '<td NOSAVE><b><font size=+1>Build-OS and version</font></b></td>'
+ echo '<td><b><font size=+1>Systemname</font></b></td>'
+ echo '<td><b><font size=+1># of iterations</font></b></td>'
+ echo '<td><b><font size=+1>average for one op</font></b></td>'
+ echo '<td><b><font size=+1>Total</font></b></td>'
+ echo '<td><b><font size=+1>QA time / #</font></b></td>'
+ echo '</tr>'
+ cat $PERFLIST |
+ while read MACHINE BUILDPLATFORM no_iter t1 t2 total total_unit t3 \
+ t4 t5 average average_unit
+ do
+ #caution subshell, variables local to this loop
+ 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 $6, $7, $8 }'`
+ 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>'
+}
+
+############################### qa_stat_cleanup ########################
+# local shell function, finishes html file, sets variables for global Exit
+########################################################################
+qa_stat_cleanup()
+{
+
+ html_footer >>$TMP_HTML_FILE
+
+ O_DEBUG=OFF
+
+ EARLY_EXIT=FALSE
+ cp $TMP_HTML_FILE $HTML_FILE
+ FILENAME=$HTML_FILE #we might want to mail it...
+ Exit
+}
+
+
+############################### bc_test ########################
+# local shell function, evaluates the results of the backward u
+# compatibility tests
+########################################################################
+bc_header()
+{
+CURRENT_TABLE="BC" #so html_line can determine which fields to write
+
+ qa_stat_table "Backward Compatibility Test"
+ echo '<td NOSAVE><b><font size=+1>Build-OS and version</font></b></td>'
+ echo '<td><b><font size=+1>QA-OS</font></b></td>'
+ echo '<td><b><font size=+1>Systemname</font></b></td>'
+ echo '<td><b><font size=+1>P/F</font></b></td>'
+ #echo '<td><b><font size=+1>All Current</font></b></td>'
+ #echo '<td><b><font size=+1>backward comp. test</font></b></td>'
+ echo '<td><b><font size=+1>result</font></b></td>'
+ echo '<td><b><font size=+1>output</font></b></td>'
+ echo '<td><b><font size=+1>QA time / #</font></b></td>'
+ echo '</tr>'
+
+}
+
+old_bc_test()
+{
+CURRENT_TABLE="BC" #so html_line can determine which fields to write
+
+ qa_stat_table "Backward Compatibility Test"
+ echo '<td NOSAVE><b><font size=+1>Build-OS and version</font></b></td>'
+ echo '<td><b><font size=+1>QA-OS</font></b></td>'
+ echo '<td><b><font size=+1>Systemname</font></b></td>'
+ echo '<td><b><font size=+1>P/F</font></b></td>'
+ #echo '<td><b><font size=+1>All Current</font></b></td>'
+ #echo '<td><b><font size=+1>backward comp. test</font></b></td>'
+ echo '<td><b><font size=+1>result</font></b></td>'
+ echo '<td><b><font size=+1>output</font></b></td>'
+ echo '<td><b><font size=+1>QA time / #</font></b></td>'
+ echo '</tr>'
+
+ for w in `ls */results.html`
+ do
+ TMP_RESULT="`dirname $w`/results.tmp"
+ TMP_BC_RESULT="`dirname bct/$w`/results.tmp"
+ rm $TMP_RESULT $TMP_BC_RESULT 2>/dev/null
+ cat $w | sed -e 's/<[^>]*>//g' -e 's/ /_/g' \
+ -e 's/signtool_-[vw]/signtool_-vw/' |
+ grep '_[PF]a[si][sl]ed' >$TMP_RESULT
+ cat bct/$w | sed -e 's/<[^>]*>//g' -e 's/ /_/g' \
+ -e 's/signtool_-[vw]/signtool_-vw/' |
+ grep '_[PF]a[si][sl]ed' >$TMP_BC_RESULT
+ diff $TMP_RESULT $TMP_BC_RESULT 2>>$BCMISSINGLIST |
+ grep -v "Create_objsign_cert_.signtool_-G.*Passed" |
+ grep -v "porting_Alice.s_email_cert" |
+ grep -v "^[0-9,cad]*$" | grep -v "^---$" | grep -v "^---.$" |
+ grep -v "Can.t_run_pk12util_tests_for_NSS_3.2" >/dev/null && (
+ echo "$w differs" >> $BCMISSINGLIST
+ echo "========================================="
+ echo "diff $w bct/$w"
+ echo "========================================="
+ diff $TMP_RESULT $TMP_BC_RESULT 2>&1 |
+ grep -v "Create_objsign_cert_.signtool_-G.*Passed" |
+ grep -v "porting_Alice.s_email_cert" |
+ grep -v "Can.t_run_pk12util_tests_for_NSS_3.2"
+ ) 2>&1 >>$BCERRORLIST
+
+ #diff -b $w bct/$w 2>>$BCMISSINGLIST |
+ #grep -v "Create objsign cert .signtool -G.*Passed" |
+ #grep -v "Listing signed files in jar .signtool -v.*Passed" |
+ #grep -v "Listing signed files in jar .signtool -w.*Passed" |
+ #grep -v "backward compatibility" |
+ #grep -v "Can.t run pk12util tests for NSS 3.2" |
+ #grep -v "porting Alice.s email cert " |
+ #grep -v "^---$" | grep -v "^[<> ] $" |
+ #grep -v "^---.$" | grep -v "^[<> ] .$" |
+ #grep -v '< </BODY></HTML>' |
+ #grep -v "^[0-9,cad]*$" 2>>$BCMISSINGLIST >/dev/null && (
+ #echo "$w differs" >> $BCMISSINGLIST
+ #echo "========================================="
+ #echo "diff $w bct/$w"
+ #echo "========================================="
+ #diff -b $w bct/$w 2>&1 |
+ #grep -v "Listing signed files in jar .signtool -v.*Passed" |
+ #grep -v "Listing signed files in jar .signtool -w.*Passed" |
+ #grep -v "backward compatibility" |
+ #grep -v "Can.t run pk12util tests for NSS 3.2" |
+ #grep -v "porting Alice.s email cert " |
+ #grep -v "^---$" | grep -v "^[<> ] $" |
+ #grep -v "^---.$" | grep -v "^[<> ] .$" |
+ #grep -v '< </BODY></HTML>' |
+ #grep -v "^[0-9,cad]*$" \
+ #) 2>&1 >>$BCERRORLIST
+ rm $TMP_RESULT $TMP_BC_RESULT 2>/dev/null
+ done
+ rm $ERRORLIST
+ cat $BCMISSINGLIST | sed -e "s/^diff: bc_...s.//" \
+ -e "s/.results.html.*/\/results.html/" |
+ sort -u > $ERRORLIST
+
+ platformlist
+ echo '</table>' >>$TMP_HTML_FILE
+
+ head -200 $BCERRORLIST | sed -e 's/<[^>]*>//g' -e "s/^/<br>/"
+}
+
+bc_test()
+{
+CURRENT_TABLE="BC" #so html_line can determine which fields to write
+
+ qa_stat_table "Backward Compatibility Test"
+ echo '<td NOSAVE><b><font size=+1>Build-OS and version</font></b></td>'
+ echo '<td><b><font size=+1>QA-OS</font></b></td>'
+ echo '<td><b><font size=+1>Systemname</font></b></td>'
+ echo '<td><b><font size=+1>P/F</font></b></td>'
+ #echo '<td><b><font size=+1>All Current</font></b></td>'
+ #echo '<td><b><font size=+1>backward comp. test</font></b></td>'
+ echo '<td><b><font size=+1>result</font></b></td>'
+ echo '<td><b><font size=+1>output</font></b></td>'
+ echo '<td><b><font size=+1>QA time / #</font></b></td>'
+ echo '</tr>'
+
+set -x
+ for w in `ls */results.html`
+ do
+ BCT_DIR=`dirname "bct/$w"`
+ BCT_RESULT="bct/$w"
+ BCT_LOG="$BCT_DIR/output.log"
+ grep "bgcolor=red" $BCT_RESULT |
+ sed -e 's/.results.html:<TR><TD>/ /' -e 's/<[^>]*>/ /g'
+ grep 'cache hits; .* cache misses, .* cache not reusable' \
+ $BCT_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 -vi "write to SSL socket" $BCT_LOG |
+ grep -vi "HDX PR_Read returned error" |
+ grep -vi "no error" |
+ grep -vi "12285" |
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP error
+ grep -vi "write to SSL socket" $BCT_LOG |
+ grep -vi "peer cannot verify" |
+ grep -vi "TCP Connection aborted" |
+ grep -vi "error" |
+ grep -vi "fatal" |
+ grep -vi "TCP connection reset" |
+ grep $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP -i failed $BCT_LOG
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP "segmentation violation" $BCT_LOG
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP "memory fault" $BCT_LOG
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP "bus error" $BCT_LOG
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP "core dumped" $BCT_LOG
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP fatal $BCT_LOG
+ grep -i $BEFORE_CONTEXT_GREP $AFTER_CONTEXT_GREP -i "PKCS12 decode not verified" $BCT_LOG
+ find ${BTC_DIR} -name core -print
+
+ done 2>&1 >>$BCERRORLIST
+ rm $ERRORLIST
+ cat $BCMISSINGLIST | sed -e "s/^diff: bc_...s.//" \
+ -e "s/.results.html.*/\/results.html/" |
+ sort -u > $ERRORLIST
+
+ platformlist
+ echo '</table>' >>$TMP_HTML_FILE
+
+ head -200 $BCERRORLIST | sed -e 's/<[^>]*>//g' -e "s/^/<br>/"
+}
+
+
+############################### bc_test ########################
+# local shell function, evaluates the results of the backward u
+# compatibility tests
+# move the whole function to old to tests a new solution
+########################################################################
+bc_test_old()
+{
+CURRENT_TABLE="BC" #so html_line can determine which fields to write
+
+ qa_stat_table "Backward Compatibility Test"
+ echo '<td NOSAVE><b><font size=+1>Build-OS and version</font></b></td>'
+ echo '<td><b><font size=+1>QA-OS</font></b></td>'
+ echo '<td><b><font size=+1>Systemname</font></b></td>'
+ echo '<td><b><font size=+1>P/F</font></b></td>'
+ #echo '<td><b><font size=+1>All Current</font></b></td>'
+ #echo '<td><b><font size=+1>backward comp. test</font></b></td>'
+ echo '<td><b><font size=+1>result</font></b></td>'
+ echo '<td><b><font size=+1>output</font></b></td>'
+ echo '<td><b><font size=+1>QA time / #</font></b></td>'
+ echo '</tr>'
+
+ for w in `ls */results.html`
+ do
+ diff -b $w bct/$w 2>>$BCMISSINGLIST |
+ grep -v "Create objsign cert .signtool -G.*Passed" |
+ grep -v "Listing signed files in jar .signtool -v.*Passed" |
+ grep -v "Listing signed files in jar .signtool -w.*Passed" |
+ grep -v "backward compatibility" |
+ grep -v "Can.t run pk12util tests for NSS 3.2" |
+ grep -v "porting Alice.s email cert " |
+ grep -v "^---$" | grep -v "^[<> ] $" |
+ grep -v "^---.$" | grep -v "^[<> ] .$" |
+ grep -v '< </BODY></HTML>' |
+ grep -v "^[0-9,cad]*$" 2>>$BCMISSINGLIST >/dev/null && (
+ echo "$w differs" >> $BCMISSINGLIST
+ echo "========================================="
+ echo "diff $w bct/$w"
+ echo "========================================="
+ diff -b $w bct/$w 2>&1 |
+ grep -v "Listing signed files in jar .signtool -v.*Passed" |
+ grep -v "Listing signed files in jar .signtool -w.*Passed" |
+ grep -v "backward compatibility" |
+ grep -v "Can.t run pk12util tests for NSS 3.2" |
+ grep -v "porting Alice.s email cert " |
+ grep -v "^---$" | grep -v "^[<> ] $" |
+ grep -v "^---.$" | grep -v "^[<> ] .$" |
+ grep -v '< </BODY></HTML>' |
+ grep -v "^[0-9,cad]*$" \
+ ) 2>&1 >>$BCERRORLIST
+ done
+ rm $ERRORLIST
+ cat $BCMISSINGLIST | sed -e "s/^diff: bc_...s.//" \
+ -e "s/.results.html.*/\/results.html/" |
+ sort -u > $ERRORLIST
+
+ platformlist
+ echo '</table>' >>$TMP_HTML_FILE
+
+ head -200 $BCERRORLIST | sed -e 's/<[^>]*>//g' -e "s/^/<br>/"
+
+}
+
+############################### tbx_main ########################
+# local shell function, tinderbox variation of the qa status script
+########################################################################
+tbx_main()
+{
+ TBX_EXIT=47
+ qa_stat_get_sysinfo # find out the OS we are running and all required tests
+ # on this OS
+
+ MACHINES_TO_CHECK=$HOST #`uname -n` only search the local tests for errors
+ qa_errorlist > $ERRORLIST #
+ platformlist
+ #tbx_missing_platforms #temp. taken out until we find a better way to
+ #determine if all necessary QA ran - right now we run different
+ #tinderboxes on one machine
+ incomplete_results
+ echo '</table>' >>$TMP_HTML_FILE
+ echo '<a NAME="errorlist"></a>' >> $TMP_HTML_FILE
+ cat $ERRORLIST | sed -e "s/^/<br>/" >>$TMP_HTML_FILE
+
+}
+
+############################### qa_stat_main ########################
+# local shell function, main flow of the qa status script
+########################################################################
+qa_stat_main()
+{
+ find_qa_systems 2>/dev/null
+ MACHINES_TO_CHECK="" # check all founf qa runs
+ qa_errorlist > $ERRORLIST
+ platformlist
+ missing_platforms
+ incomplete_results
+ echo '</table>' >>$TMP_HTML_FILE
+ echo '<a NAME="errorlist"></a>' >> $TMP_HTML_FILE
+ cat $ERRORLIST | sed -e "s/^/<br>/" >>$TMP_HTML_FILE
+ cat $WARNINGLIST 2>/dev/null | sed -e "s/^/<br>/" >>$TMP_HTML_FILE 2>/dev/null
+ rsaperf >>$TMP_HTML_FILE
+ bc_header >>$TMP_HTML_FILE
+ MACHINES_TO_CHECK="bct/"
+ TOTAL_TESTS=$BCT_TOTAL_TESTS
+ BEFORE_CONTEXT_GREP="" #WORKAROUND - errors in one outputlog within the first
+ AFTER_CONTEXT_GREP="" # or last lines will show up in the next/previos file
+ qa_errorlist > $ERRORLIST
+ platformlist
+ missing_platforms
+ incomplete_results
+ echo '</table>' >>$TMP_HTML_FILE
+ echo '<a NAME="errorlist"></a>' >> $TMP_HTML_FILE
+ cat $ERRORLIST | sed -e "s/^/<br>/" >>$TMP_HTML_FILE
+ cat $WARNINGLIST 2>/dev/null | sed -e "s/^/<br>/" >>$TMP_HTML_FILE 2>/dev/null
+ #bc_test >>$TMP_HTML_FILE
+}
+
+CURRENT_TABLE="Standard"
+qa_stat_init
+
+if [ "$O_TBX" = "ON" -o "$O_LOCAL" = "ON" ] ; then
+ tbx_main
+else
+ qa_stat_main
+fi
+
+qa_stat_cleanup