#! /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 - write the (error)output to filename # -m - 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: # if option -f # $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
 
 

Tinderbox
Tinderbox QA result
Mozilla Daily NSS QA result

   
 

QA Results

' } ################################# html_footer ######################### # local shell function, writes end of the html body ####################################################################### html_footer() { echo '' echo '' } ################################# 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 '' echo '' echo '' if [ "$QA_SYS_OS" != "0" ] ; then echo '' else echo '' fi echo '' if [ "$SYSNAME" != "0" ] ; then echo '' else echo '' fi #echo '' 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 '' elif [ "$1" = "passed" ] then echo '' elif [ "$1" = "incomplete" ] then TBX_EXIT=`expr $TBX_EXIT + 1` echo '' else TBX_EXIT=`expr $TBX_EXIT + 1` echo '' fi if [ "$CURRENT_TABLE" != "BC" ] ; then if [ "$RESULT" = "0" ] ; then echo '' else echo '' fi if [ "$LOG" = "0" ] ; then echo '' else echo '' fi if [ "$1" = "failed" ] ; then echo '' else echo '' fi else # # # #echo '' #echo '' #echo '' #if [ "$RESULT" != "0" -a "$LOG" != "0" ] ; then #echo '' #elif [ "$RESULT" = "0" -a "$LOG" != "0" ] ; then #echo '' #elif [ "$RESULT" != "0" -a "$LOG" = "0" ] ; then #echo '' #else #echo '' #fi #if [ "$BCB_RESULT" != "0" -a "$BCB_LOG" != "0" ] ; then #echo '' #elif [ "$BCB_RESULT" = "0" -a "$BCB_LOG" != "0" ] ; then #echo '' #elif [ "$BCB_RESULT" != "0" -a "$BCB_LOG" = "0" ] ; then #echo '' #else #echo '' #fi if [ "$BCB_RESULT" = "0" ] ; then echo '' else echo '' fi if [ "$BCB_LOG" = "0" ] ; then echo '' else echo '' fi fi echo '' echo '' } ################################# 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:' echo '' echo '' echo '' #echo '' #echo '' echo '' echo '' echo '' echo '' } old_bc_test() { CURRENT_TABLE="BC" #so html_line can determine which fields to write qa_stat_table "Backward Compatibility Test" echo '' echo '' echo '' echo '' #echo '' #echo '' echo '' echo '' echo '' echo '' 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 '< ' | #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 '< ' | #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 '
 Build-OS and version QA-OS Systemname P/F result output errors QA time / #
'$BUILD_SYS''$QA_SYS_OS''$SYSNAME''$SYSNAME $TESTNUMBER $TESTDATE''$HTML_ERRORMSG''$HTML_PASSEDMSG''$HTML_INCOMPLETEMSG''$HTML_MISSINGMSG''$HTML_MISSINGMSG' result '$HTML_MISSINGMSG' log  error errorsP/FP/FAll Currentold dllsold executablesresult, loglogresult'$HTML_MISSINGMSG'result, loglogresult'$HTML_MISSINGMSG''$HTML_MISSINGMSG' result '$HTML_MISSINGMSG' log '$TESTDATE $TESTNUMBER'
/ /' -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:

Platform: /---/' \ -e 's/
//' >$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/

Platform:/ /' -e 's/
//'` 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 '
 ' echo '
' echo '

' echo ''$1'

' echo ' ' echo '' echo '' } ############################### 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 '' echo '' echo '' echo '' echo '' echo '' echo '' 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 '' echo '' echo '' echo '' echo '' echo '' echo '' echo '' echo '' echo '' echo '' echo '' echo '' echo '' done echo '
Build-OS and versionSystemname# of iterationsaverage for one opTotalQA time / #
'$BUILD_SYS''$MACHINE''$no_iter''$average' '$average_unit''$total' '$total_unit''$TESTDATE $TESTNUMBER'
' } ############################### 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 '

Build-OS and versionQA-OSSystemnameP/FAll Currentbackward comp. testresultoutputQA time / #
Build-OS and versionQA-OSSystemnameP/FAll Currentbackward comp. testresultoutputQA time / #
' >>$TMP_HTML_FILE head -200 $BCERRORLIST | sed -e 's/<[^>]*>//g' -e "s/^/
/" } bc_test() { CURRENT_TABLE="BC" #so html_line can determine which fields to write qa_stat_table "Backward Compatibility Test" echo 'Build-OS and version' echo 'QA-OS' echo 'Systemname' echo 'P/F' #echo 'All Current' #echo 'backward comp. test' echo 'result' echo 'output' echo 'QA time / #' echo '' 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:/ /' -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 '' >>$TMP_HTML_FILE head -200 $BCERRORLIST | sed -e 's/<[^>]*>//g' -e "s/^/
/" } ############################### 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 'Build-OS and version' echo 'QA-OS' echo 'Systemname' echo 'P/F' #echo 'All Current' #echo 'backward comp. test' echo 'result' echo 'output' echo 'QA time / #' echo '' 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 '< ' | 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 '< ' | 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 '' >>$TMP_HTML_FILE head -200 $BCERRORLIST | sed -e 's/<[^>]*>//g' -e "s/^/
/" } ############################### 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 '' >>$TMP_HTML_FILE echo '' >> $TMP_HTML_FILE cat $ERRORLIST | sed -e "s/^/
/" >>$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 '' >>$TMP_HTML_FILE echo '' >> $TMP_HTML_FILE cat $ERRORLIST | sed -e "s/^/
/" >>$TMP_HTML_FILE cat $WARNINGLIST 2>/dev/null | sed -e "s/^/
/" >>$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 '' >>$TMP_HTML_FILE echo '' >> $TMP_HTML_FILE cat $ERRORLIST | sed -e "s/^/
/" >>$TMP_HTML_FILE cat $WARNINGLIST 2>/dev/null | sed -e "s/^/
/" >>$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