#!/bin/sh # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # # libpkix_init.sh # ### when the script is exiting, handle it in the Cleanup routine...the result ### value will get set to 0 if all the tests completed successfully, so we can ### use that value in the handler trap 'Cleanup' EXIT result=1 checkmem=0 arenas=0 quiet=0 doNIST=1 doNIST_PDTest=0 doPD=0 doTop=0 doModule=0 doPki=0 doOCSP=0 doOCSPTest=0 combinedErrors=0 totalErrors=0 prematureTermination=0 errors=0 if [ -z "${INIT_SOURCED}" ] ; then libpkixCommondir=`pwd` cd ../../common . ./init.sh > /dev/null cd ${libpkixCommondir} fi DIST_BIN=${DIST}/${OBJDIR}/bin ### setup some defaults WD=`pwd` prog=`basename $0` testOut=${HOSTDIR}/${prog}.$$ testOutMem=${HOSTDIR}/${prog}_mem.$$ #################### # cleanup from tests #################### Cleanup() { if [ ${testOut} != "" ]; then rm -f ${testOut} fi if [ ${testOutMem} != "" ]; then rm -f ${testOutMem} fi if [ -d ../../nist_pkits/certs ]; then rm -f ../../nist_pkits/certs fi if [ ${doTop} -eq 1 ]; then for i in ${linkMStoreNistFiles}; do if [ -f ${HOSTDIR}/rev_data/multiple_certstores/$i ]; then rm -f ${HOSTDIR}/rev_data/multiple_certstores/$i fi done if [ -d ${HOSTDIR}/rev_data/multiple_certstores ]; then rm -fr ${HOSTDIR}/rev_data/multiple_certstores fi fi if [ ${doModule} -eq 1 ]; then for i in ${linkModuleNistFiles}; do if [ -f ${HOSTDIR}/rev_data/local/$i ]; then rm -f ${HOSTDIR}/rev_data/local/$i fi done for i in ${localCRLFiles}; do if [ -f ${HOSTDIR}/rev_data/local/$i ]; then rm -f ${HOSTDIR}/rev_data/local/$i fi done fi if [ ${doPki} -eq 1 ]; then for i in ${linkPkiNistFiles}; do if [ -f ${HOSTDIR}/rev_data/local/$i ]; then rm -f ${HOSTDIR}/rev_data/local/$i fi done fi return ${result} } ### ParseArgs ParseArgs() # args { while [ $# -gt 0 ]; do if [ $1 = "-checkmem" ]; then checkmem=1 elif [ $1 = "-quiet" ]; then quiet=1 elif [ $1 = "-arenas" ]; then arenas=1 fi shift done } Display() # string { if [ ${quiet} -eq 0 ]; then echo "$1" fi } testHeadingEcho() { echo "*******************************************************************************" echo "START OF TESTS FOR ${testunit}${memText}" echo "*******************************************************************************" echo "" } testEndingEcho() { if [ ${totalErrors} -eq 0 ]; then echo "" echo "************************************************************" echo "END OF TESTS FOR ${testunit}: ALL TESTS COMPLETED SUCCESSFULLY" echo "************************************************************" echo "" return 0 fi if [ ${totalErrors} -eq 1 ]; then plural="" else plural="S" fi echo "" echo "************************************************************" echo "END OF TESTS FOR ${testunit}: ${totalErrors} TEST${plural} FAILED" echo "************************************************************" echo "" return ${totalErrors} } ########### # RunTests ########### RunTests() { errors=0 memErrors=0 prematureErrors=0 failedpgms="" failedmempgms="" failedprematurepgms="" memText="" arenaCmd="" if [ ${checkmem} -eq 1 ]; then memText=" (Memory Checking Enabled)" fi if [ ${arenas} -eq 1 ]; then arenaCmd="-arenas" fi # # Announce start of tests # Display "*******************************************************************************" Display "START OF TESTS FOR PKIX ${testunit} ${memText}" Display "*******************************************************************************" Display "" # run each test specified by the input redirection below while read testPgm args; do shortTestPurpose=`echo $args | awk '{print $1 " " $2 " "}'` fullTestPurpose=${args} if [ ${doTop} -eq 1 -o ${doModule} -eq 1 -o ${doPki} -eq 1 ]; then testPurpose=${shortTestPurpose} else testPurpose=${fullTestPurpose} fi # If we want shorter command printout for NIST tests, delete next line testPurpose=${fullTestPurpose} # Skip OCSP tests if OCSP is not defined in the environment if [ ${doOCSPTest} -eq 0 ]; then hasOCSP=`echo ${args} | grep OCSP-Test` if [ ! -z "${hasOCSP}" ]; then Display "SKIPPING ${testPgm} ${testPurpose}" continue fi fi if [ ${doNIST} -eq 0 ]; then hasNIST=`echo ${args} | grep NIST-Test` if [ ! -z "${hasNIST}" ]; then Display "SKIPPING ${testPgm} ${testPurpose}" continue fi fi # This "if" is not reached when doNIST is not set. The assumption # is that NIST tests are basic, NIST Path Discovery tests are # additional if [ ${doNIST_PDTest} -eq 0 ]; then hasNIST=`echo ${args} | grep NIST-PDTest` if [ ! -z "${hasNIST}" ]; then Display "SKIPPING ${testPgm} ${testPurpose}" continue fi fi Display "RUNNING ${testPgm} ${arenaCmd} ${testPurpose}" numtests=`expr ${numtests} + 1` if [ ${checkmem} -eq 1 ]; then dbx -C -c "runargs ${arenaCmd} ${args};check -all;run;exit" ${DIST_BIN}/${testPgm} > ${testOut} 2>&1 else ${DIST_BIN}/${testPgm} ${arenaCmd} ${args} > ${testOut} 2>&1 fi # Examine output file to see if test failed and keep track of number # of failures and names of failed tests. This assumes that the test # uses our utility library for displaying information cat ${testOut} | tail -2 | grep "COMPLETED SUCCESSFULLY" >/dev/null 2>&1 if [ $? -ne 0 ]; then testFail=1 errors=`expr ${errors} + 1` failedpgms="${failedpgms}\n${testPgm} ${testPurpose} " # cat ${testOut} else testFail=0 passed=`expr ${passed} + 1` fi cat ${testOut} html_msg ${testFail} 0 "${testPgm} ${arenaCmd} ${shortTestPurpose}" if [ ${checkmem} -eq 1 ]; then grep "(actual leaks:" ${testOut} > ${testOutMem} 2>&1 if [ $? -ne 0 ]; then prematureErrors=`expr ${prematureErrors} + 1` failedprematurepgms="${failedprematurepgms}${testPgm} " Display "...program terminated prematurely (unable to check for memory leak errors) ..." else #grep "(actual leaks: 0" ${testOut} > /dev/null 2>&1 # special consideration for memory leak in NSS_NoDB_Init grep "(actual leaks: 1 total size: 4 bytes)" ${testOut} > /dev/null 2>&1 if [ $? -ne 0 ]; then memErrors=`expr ${memErrors} + 1` failedmempgms="${failedmempgms}${testPgm} " cat ${testOutMem} fi fi fi done if [ ${errors} -eq 0 ]; then if [ ${memErrors} -eq 0 ]; then Display "" Display "************************************************************" Display "END OF TESTS FOR PKIX ${testunit}: ALL TESTS COMPLETED SUCCESSFULLY" Display "************************************************************" Display "" return 0 fi fi if [ ${errors} -eq 1 ]; then plural="" else plural="S" fi Display "" Display "*******************************************************************************" Display "END OF TESTS FOR PKIX ${testunit}: ${errors} UNIT TEST${plural} FAILED: ${failedpgms}" Display "" if [ ${checkmem} -eq 1 ]; then if [ ${memErrors} -eq 1 ]; then memPlural="" else memPlural="S" fi Display " ${memErrors} MEMORY LEAK TEST${memPlural} FAILED: ${failedmempgms}" if [ ${prematureErrors} -ne 0 ]; then if [ ${prematureErrors} -eq 1 ]; then prematurePlural="" else prematurePlural="S" fi Display " ${prematureErrors} MEMORY LEAK TEST${prematurePlural} INDETERMINATE: ${failedprematurepgms}" fi fi Display "*******************************************************************************" Display "" combinedErrors=`expr ${errors} + ${memErrors} + ${prematureErrors}` return ${combinedErrors} }