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