diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /security/nss/tests/qa_stat | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'security/nss/tests/qa_stat')
-rwxr-xr-x | security/nss/tests/qa_stat | 938 |
1 files changed, 938 insertions, 0 deletions
diff --git a/security/nss/tests/qa_stat b/security/nss/tests/qa_stat new file mode 100755 index 0000000000..ddf8dd8d2a --- /dev/null +++ b/security/nss/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> + +<br> +<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 result</a><br> +<a href="ftp://ftp.mozilla.org/pub/security/nss/daily_qa">Mozilla Daily NSS QA result</a></h2> + + + +<br> +<center> +<h1> +<a NAME="Top"></a><b><font size=+2>QA Results</font></b></h1></center> + + +<table BORDER WIDTH="100%" NOSAVE > +<tr> +<td> <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> <a href="'$RESULT'">result</a> </td>' + fi + if [ "$LOG" = "0" ] ; then + echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>' + else + echo '<td> <a href="'$LOG'">log</a> </td>' + fi + if [ "$1" = "failed" ] ; then + echo '<td> <a href="'${HREF_TMP_HTML_FILE}'#errorlist">error</a> </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> <a href="'$BCB_RESULT'">result</a> </td>' + fi + if [ "$BCB_LOG" = "0" ] ; then + echo '<td BGCOLOR='$HTML_MISSINGCOLOR' NOSAVE>'$HTML_MISSINGMSG'</td>' + else + echo '<td> <a href="'$BCB_LOG'">log</a> </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 ' ' + echo '<br> ' + echo '<center>' + echo '<h1>' + echo '<a NAME="'$1'"></a>'$1'</h1></center>' + echo ' ' + 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 |