| #! /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 |