2008-08-15 08:12:54 +04:00
#!/bin/bash
2008-06-06 16:40:11 +04:00
#
2012-10-01 22:02:15 +04:00
# 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/.
2008-06-06 16:40:11 +04:00
########################################################################
#
# mozilla/security/nss/tests/all.sh
#
2008-10-23 04:38:29 +04:00
# Script to start selected available NSS QA suites on one machine
2016-01-25 18:14:18 +03:00
# this script is called or sourced by NSS QA which runs on all required
2008-06-06 16:40:11 +04:00
# platforms
#
2008-10-23 04:38:29 +04:00
# Needs to work on all Unix and Windows platforms
#
# Currently available NSS QA suites:
# ----------------------------------
# cipher.sh - tests NSS ciphers
# libpkix.sh - tests PKIX functionality
2016-01-25 18:14:18 +03:00
# cert.sh - exercises certutil and creates certs necessary for
2008-10-23 04:38:29 +04:00
# all other tests
# dbtests.sh - tests related to certificate databases
# tools.sh - tests the majority of the NSS tools
2016-01-25 18:14:18 +03:00
# fips.sh - tests basic functionallity of NSS in FIPS-compliant
2008-10-23 04:38:29 +04:00
# - mode
# sdr.sh - tests NSS SDR
# crmf.sh - CRMF/CMMF testing
# smime.sh - S/MIME testing
# ssl.sh - tests SSL V2 SSL V3 and TLS
# ocsp.sh - OCSP testing
# merge.sh - tests merging old and new shareable databases
2016-01-25 18:14:18 +03:00
# pkits.sh - NIST/PKITS tests
# chains.sh - PKIX cert chains tests
2008-10-23 04:38:29 +04:00
# dbupgrade.sh - upgrade databases to new shareable version (used
# only in upgrade test cycle)
# memleak.sh - memory leak testing (optional)
2016-01-25 18:14:18 +03:00
# ssl_gtests.sh- Gtest based unit tests for ssl
2016-06-02 23:33:04 +03:00
# gtests.sh - Gtest based unit tests for everything else
2018-07-25 16:17:58 +03:00
# policy.sh - Crypto Policy tests
2016-09-26 03:47:58 +03:00
# bogo.sh - Bogo interop tests (disabled by default)
# https://boringssl.googlesource.com/boringssl/+/master/ssl/test/PORTING.md
2017-01-21 16:23:56 +03:00
# interop.sh - Interoperability tests (disabled by default)
# https://github.com/ekr/tls_interop
2018-09-28 19:17:37 +03:00
# tlsfuzzer.sh - tlsfuzzer interop tests (disabled by default)
# https://github.com/tomato42/tlsfuzzer/
2008-10-23 04:38:29 +04:00
#
# NSS testing is now devided to 4 cycles:
# ---------------------------------------
# standard - run test suites with defaults settings
# pkix - run test suites with PKIX enabled
2016-01-25 18:14:18 +03:00
# upgradedb - upgrade existing certificate databases to shareable
# format (creates them if doesn't exist yet) and run
2008-10-23 04:38:29 +04:00
# test suites with those databases
2016-01-25 18:14:18 +03:00
# sharedb - run test suites with shareable database format
# enabled (databases are created directly to this
2008-10-23 04:38:29 +04:00
# format)
#
# Mandatory environment variables (to be set before testing):
# -----------------------------------------------------------
# HOST - test machine host name
# DOMSUF - test machine domain name
#
# Optional environment variables to specify build to use:
# -------------------------------------------------------
2016-01-25 18:14:18 +03:00
# BUILT_OPT - use optimized/debug build
2008-10-23 04:38:29 +04:00
# USE_64 - use 64bit/32bit build
#
# Optional environment variables to select which cycles/suites to test:
# ---------------------------------------------------------------------
2016-01-25 18:14:18 +03:00
# NSS_CYCLES - list of cycles to run (separated by space
2008-10-23 04:38:29 +04:00
# character)
# - by default all cycles are tested
#
# NSS_TESTS - list of all test suites to run (separated by space
2016-01-25 18:14:18 +03:00
# character, without trailing .sh)
2008-10-23 04:38:29 +04:00
# - this list can be reduced for individual test cycles
#
# NSS_SSL_TESTS - list of ssl tests to run (see ssl.sh)
2010-02-07 14:54:28 +03:00
# NSS_SSL_RUN - list of ssl sub-tests to run (see ssl.sh)
2008-10-23 04:38:29 +04:00
#
# Testing schema:
2008-06-06 16:40:11 +04:00
# ---------------
2016-01-25 18:14:18 +03:00
# all.sh ~ (main)
2008-10-23 04:38:29 +04:00
# | |
# +------------+------------+-----------+ ~ run_cycles
# | | | | |
# standard pkix upgradedb sharedb ~ run_cycle_*
# | |
# +------+------+------+-----> ~ run_tests
# | | | | |
# cert tools fips ssl ... ~ . *.sh
#
# Special strings:
# ----------------
2008-06-06 16:40:11 +04:00
# FIXME ... known problems, search for this string
# NOTE .... unexpected behavior
#
# NOTE:
# -----
2008-10-23 04:38:29 +04:00
# Unlike the old QA this is based on files sourcing each other
# This is done to save time, since a great portion of time is lost
# in calling and sourcing the same things multiple times over the
2016-01-25 18:14:18 +03:00
# network. Also, this way all scripts have all shell function
2008-10-23 04:38:29 +04:00
# available and a completely common environment
2008-06-06 16:40:11 +04:00
#
########################################################################
2017-08-25 10:37:32 +03:00
RUN_FIPS = ""
2008-10-23 04:38:29 +04:00
############################## run_tests ###############################
# run test suites defined in TESTS variable, skip scripts defined in
# TESTS_SKIP variable
########################################################################
2008-06-06 16:40:11 +04:00
run_tests( )
{
2017-12-19 17:26:12 +03:00
echo " Running test cycle: ${ TEST_MODE } ---------------------- "
echo " List of tests that will be executed: ${ TESTS } "
2008-10-23 04:38:29 +04:00
for TEST in ${ TESTS }
do
2016-01-25 18:14:18 +03:00
# NOTE: the spaces are important. If you don't include
# the spaces, then turning off ssl_gtests will also turn off ssl
# tests.
echo " ${ TESTS_SKIP } " | grep " ${ TEST } " > /dev/null
2008-10-23 04:38:29 +04:00
if [ $? -eq 0 ] ; then
continue
fi
SCRIPTNAME = ${ TEST } .sh
echo " Running tests for ${ TEST } "
2016-01-25 18:14:18 +03:00
echo " TIMESTAMP ${ TEST } BEGIN: `date` "
2008-10-23 04:38:29 +04:00
( cd ${ QADIR } /${ TEST } ; . ./${ SCRIPTNAME } 2>& 1)
echo " TIMESTAMP ${ TEST } END: `date` "
done
}
########################## run_cycle_standard ##########################
2017-11-01 17:38:36 +03:00
# run test suites with dbm database (no PKIX, no sharedb)
2008-10-23 04:38:29 +04:00
########################################################################
run_cycle_standard( )
{
TEST_MODE = STANDARD
TESTS = " ${ ALL_TESTS } "
2017-11-01 17:38:36 +03:00
TESTS_SKIP = "cipher libpkix sdr ocsp pkits"
NSS_DEFAULT_DB_TYPE = "dbm"
export NSS_DEFAULT_DB_TYPE
NSS_SSL_TESTS = ` echo " ${ NSS_SSL_TESTS } " | sed -e "s/normal//g" -e "s/fips//g" -e "s/_//g" `
NSS_SSL_RUN = ` echo " ${ NSS_SSL_RUN } " | sed -e "s/cov//g" -e "s/auth//g" `
2008-10-23 04:38:29 +04:00
run_tests
}
############################ run_cycle_pkix ############################
# run test suites with PKIX enabled
########################################################################
run_cycle_pkix( )
{
TEST_MODE = PKIX
TABLE_ARGS = "bgcolor=cyan"
html_head "Testing with PKIX"
html "</TABLE><BR>"
HOSTDIR = " ${ HOSTDIR } /pkix "
mkdir -p " ${ HOSTDIR } "
init_directories
NSS_ENABLE_PKIX_VERIFY = "1"
export NSS_ENABLE_PKIX_VERIFY
TESTS = " ${ ALL_TESTS } "
2016-06-02 23:33:04 +03:00
TESTS_SKIP = "cipher dbtests sdr crmf smime merge multinit"
2017-11-01 17:38:36 +03:00
2016-09-26 03:47:58 +03:00
NSS_SSL_TESTS = ` echo " ${ NSS_SSL_TESTS } " | sed -e "s/normal//g" -e "s/fips//g" -e "s/_//g" `
2017-11-01 17:38:36 +03:00
export -n NSS_SSL_RUN
2017-12-19 17:26:12 +03:00
# use the default format. (unset for the shell, export -n for binaries)
2017-11-01 17:38:36 +03:00
export -n NSS_DEFAULT_DB_TYPE
2017-12-19 17:26:12 +03:00
unset NSS_DEFAULT_DB_TYPE
2008-10-23 04:38:29 +04:00
run_tests
}
######################### run_cycle_upgrade_db #########################
# upgrades certificate database to shareable format and run test suites
# with those databases
########################################################################
run_cycle_upgrade_db( )
{
TEST_MODE = UPGRADE_DB
TABLE_ARGS = "bgcolor=pink"
html_head "Testing with upgraded library"
html "</TABLE><BR>"
OLDHOSTDIR = " ${ HOSTDIR } "
HOSTDIR = " ${ HOSTDIR } /upgradedb "
mkdir -p " ${ HOSTDIR } "
init_directories
if [ -r " ${ OLDHOSTDIR } /cert.log " ] ; then
2017-08-25 10:37:32 +03:00
DIRS = " alicedir bobdir CA cert_extensions client clientCA dave eccurves eve ext_client ext_server $RUN_FIPS SDR server serverCA stapling tools/copydir cert.log cert.done tests.* "
2008-10-23 04:38:29 +04:00
for i in $DIRS
do
cp -r ${ OLDHOSTDIR } /${ i } ${ HOSTDIR } #2> /dev/null
done
fi
2016-01-25 18:14:18 +03:00
# upgrade certs dbs to shared db
2008-10-23 04:38:29 +04:00
TESTS = "dbupgrade"
TESTS_SKIP =
run_tests
NSS_DEFAULT_DB_TYPE = "sql"
export NSS_DEFAULT_DB_TYPE
# run the subset of tests with the upgraded database
TESTS = " ${ ALL_TESTS } "
2016-06-02 23:33:04 +03:00
TESTS_SKIP = "cipher libpkix cert dbtests sdr ocsp pkits chains"
2008-10-23 04:38:29 +04:00
2016-09-26 03:47:58 +03:00
NSS_SSL_TESTS = ` echo " ${ NSS_SSL_TESTS } " | sed -e "s/normal//g" -e "s/fips//g" -e "s/_//g" `
2008-10-23 04:38:29 +04:00
NSS_SSL_RUN = ` echo " ${ NSS_SSL_RUN } " | sed -e "s/cov//g" -e "s/auth//g" `
run_tests
}
########################## run_cycle_shared_db #########################
# run test suites with certificate databases set to shareable format
########################################################################
run_cycle_shared_db( )
{
TEST_MODE = SHARED_DB
TABLE_ARGS = "bgcolor=yellow"
html_head "Testing with shared library"
html "</TABLE><BR>"
HOSTDIR = " ${ HOSTDIR } /sharedb "
mkdir -p " ${ HOSTDIR } "
init_directories
NSS_DEFAULT_DB_TYPE = "sql"
export NSS_DEFAULT_DB_TYPE
# run the tests for native sharedb support
TESTS = " ${ ALL_TESTS } "
2017-11-01 17:38:36 +03:00
TESTS_SKIP = "dbupgrade"
2008-10-23 04:38:29 +04:00
2017-11-01 17:38:36 +03:00
export -n NSS_SSL_TESTS
export -n NSS_SSL_RUN
2008-10-23 04:38:29 +04:00
run_tests
2008-06-06 16:40:11 +04:00
}
2008-10-23 04:38:29 +04:00
############################# run_cycles ###############################
# run test cycles defined in CYCLES variable
########################################################################
run_cycles( )
{
for CYCLE in ${ CYCLES }
do
2016-01-25 18:14:18 +03:00
case " ${ CYCLE } " in
2008-10-23 04:38:29 +04:00
"standard" )
run_cycle_standard
; ;
"pkix" )
2016-06-30 09:42:30 +03:00
if [ -z " $NSS_DISABLE_LIBPKIX " ] ; then
run_cycle_pkix
fi
2008-10-23 04:38:29 +04:00
; ;
"upgradedb" )
run_cycle_upgrade_db
; ;
"sharedb" )
run_cycle_shared_db
; ;
2016-01-25 18:14:18 +03:00
esac
2008-10-23 04:38:29 +04:00
. ${ ENV_BACKUP }
done
}
############################## main code ###############################
2017-11-24 11:00:26 +03:00
SCRIPTNAME = all.sh
CLEANUP = " ${ SCRIPTNAME } "
cd ` dirname $0 `
# all.sh should be the first one to try to source the init
if [ -z " ${ INIT_SOURCED } " -o " ${ INIT_SOURCED } " != "TRUE" ] ; then
cd common
. ./init.sh
fi
2008-10-23 04:38:29 +04:00
cycles = "standard pkix upgradedb sharedb"
CYCLES = ${ NSS_CYCLES :- $cycles }
2018-01-11 16:09:34 +03:00
NO_INIT_SUPPORT = ` certutil --build-flags | grep -cw NSS_NO_INIT_SUPPORT`
if [ $NO_INIT_SUPPORT -eq 0 ] ; then
2017-08-25 10:37:32 +03:00
RUN_FIPS = "fips"
fi
2018-07-25 16:17:58 +03:00
tests = " cipher lowhash libpkix cert dbtests tools $RUN_FIPS sdr crmf smime ssl ocsp merge pkits ec gtests ssl_gtests policy "
2017-03-24 10:38:05 +03:00
# Don't run chains tests when we have a gyp build.
if [ " $OBJDIR " != "Debug" -a " $OBJDIR " != "Release" ] ; then
tests = " $tests chains "
fi
2008-10-23 04:38:29 +04:00
TESTS = ${ NSS_TESTS :- $tests }
2008-06-06 16:40:11 +04:00
ALL_TESTS = ${ TESTS }
2018-03-15 19:00:48 +03:00
nss_ssl_tests = "crl iopr policy normal_normal"
2018-01-11 16:09:34 +03:00
if [ $NO_INIT_SUPPORT -eq 0 ] ; then
2017-09-12 15:46:59 +03:00
nss_ssl_tests = " $nss_ssl_tests fips_normal normal_fips "
fi
2008-10-23 04:38:29 +04:00
NSS_SSL_TESTS = " ${ NSS_SSL_TESTS :- $nss_ssl_tests } "
2018-08-28 17:18:25 +03:00
nss_ssl_run = "cov auth stapling signed_cert_timestamps stress scheme"
2008-10-23 04:38:29 +04:00
NSS_SSL_RUN = " ${ NSS_SSL_RUN :- $nss_ssl_run } "
# NOTE:
# Lists of enabled tests and other settings are stored to ${ENV_BACKUP}
# file and are are restored after every test cycle.
2008-06-06 16:40:11 +04:00
ENV_BACKUP = ${ HOSTDIR } /env.sh
env_backup > ${ ENV_BACKUP }
2018-02-28 13:13:28 +03:00
# Print hardware support if we built it.
if [ -f ${ BINDIR } /hw-support ] ; then
${ BINDIR } /hw-support
fi
2008-10-23 04:38:29 +04:00
if [ " ${ O_CRON } " = "ON" ] ; then
run_cycles >> ${ LOGFILE }
2016-01-25 18:14:18 +03:00
else
2008-10-23 04:38:29 +04:00
run_cycles | tee -a ${ LOGFILE }
2008-06-06 16:40:11 +04:00
fi
SCRIPTNAME = all.sh
. ${ QADIR } /common/cleanup.sh