michael@0: #!/bin/bash michael@0: # michael@0: # This Source Code Form is subject to the terms of the Mozilla Public michael@0: # License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: # file, You can obtain one at http://mozilla.org/MPL/2.0/. michael@0: michael@0: # michael@0: # PRIOR TO RUNNING THIS SCRIPT michael@0: # you should adjust MAIL_COMMAND and QA_LIST michael@0: # michael@0: # External dependencies: michael@0: # - install the NISCC test files, e.g. at /niscc (readonly OK) michael@0: # - libfaketimeMT because the test certificates have expired michael@0: # - build environment for building NSS michael@0: # - gdb to analyze core files michael@0: # - a command line mail tool (e.g. mailx) michael@0: # - openssl to combine input PEM files into pkcs#12 michael@0: # - curl for obtaining version information from the web michael@0: # michael@0: michael@0: ################################################################################ michael@0: # Print script usage michael@0: ################################################################################ michael@0: usage() michael@0: { michael@0: cat << EOF michael@0: Usage: $0 [options] michael@0: michael@0: Test NSS library against NISCC SMIME and TLS testcases. michael@0: michael@0: Options: michael@0: -h, --help print this help message and exit michael@0: -v, --verbose enable extra verbose output michael@0: --niscc-home DIR use NISCC testcases from directory DIR (default /niscc) michael@0: --host HOST use host HOST (default '127.0.0.1') michael@0: --threads X set thread number to X (max. 10, default 10) michael@0: --out DIR set DIR as output directory (default '/out') michael@0: --mail ADDRESS send mail with test result to ADDRESS michael@0: --nss DIR set NSS directory to DIR (default '~/niscc-hg/nss') michael@0: --nss-hack DIR set hacked NSS directory to DIR (default '~/niscc-hg/nss_hack') michael@0: --log-store store all the logs (only summary by default) michael@0: --no-build-test don't pull and build tested NSS michael@0: --no-build-hack don't pull and build hacked NSS michael@0: --test-system test system installed NSS michael@0: --date DATE use DATE in log archive name and outgoing email michael@0: --libfaketime path.so use faketime library with LD_PRELOAD=path.so michael@0: --smallset test only a very small subset michael@0: michael@0: All options are optional. michael@0: All options (and possibly more) can be also set through environment variables. michael@0: Commandline options have higher priority than environment variables. michael@0: For more information please refer to the source code of this script. michael@0: michael@0: For a successfull run the script NEEDS the core file pattern to be 'core.*', michael@0: e.g. 'core.%t'. You can check the current pattern in michael@0: '/proc/sys/kernel/core_pattern'. Otherwise the test will be unable to detect michael@0: any failures and will pass every time. michael@0: michael@0: It is recommended to use hacked and tested binaries in a location, where their michael@0: absolute path is max. 80 characters. If their path is longer and a core file is michael@0: generated, its properties may be incomplete. michael@0: michael@0: Return value of the script indicates how many failures it experienced. michael@0: michael@0: EOF michael@0: exit $1 michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Process command-line arguments michael@0: ################################################################################ michael@0: process_args() michael@0: { michael@0: HELP="false" michael@0: args=`getopt -u -l "niscc-home:,host:,threads:,out:,verbose,mail:,nss:,nss-hack:,log-store,no-build-test,no-build-hack,help,test-system,date:,libfaketime:,smallset" -- "hv" $*` michael@0: [ "$?" != "0" ] && usage 1 michael@0: set -- $args michael@0: for i; do michael@0: case "$i" in michael@0: -v|--verbose) michael@0: shift michael@0: VERBOSE="-v" michael@0: ;; michael@0: --niscc-home) michael@0: shift michael@0: NISCC_HOME="$1" michael@0: shift michael@0: ;; michael@0: --host) michael@0: shift michael@0: HOST="$1" michael@0: shift michael@0: ;; michael@0: --threads) michael@0: shift michael@0: THREADS="$1" michael@0: shift michael@0: ;; michael@0: --out) michael@0: shift michael@0: TEST_OUTPUT="$1" michael@0: shift michael@0: ;; michael@0: --mail) michael@0: shift michael@0: USE_MAIL="true" michael@0: QA_LIST="$1" michael@0: shift michael@0: ;; michael@0: --nss) michael@0: shift michael@0: LOCALDIST="$1" michael@0: shift michael@0: ;; michael@0: --nss-hack) michael@0: shift michael@0: NSS_HACK="$1" michael@0: shift michael@0: ;; michael@0: --log-store) michael@0: shift michael@0: LOG_STORE="true" michael@0: ;; michael@0: --no-build-test) michael@0: shift michael@0: NO_BUILD_TEST="true" michael@0: ;; michael@0: --no-build-hack) michael@0: shift michael@0: NO_BUILD_HACK="true" michael@0: ;; michael@0: -h|--help) michael@0: shift michael@0: HELP="true" michael@0: ;; michael@0: --test-system) michael@0: shift michael@0: TEST_SYSTEM="true" michael@0: ;; michael@0: --date) michael@0: shift michael@0: DATE="$1" michael@0: shift michael@0: ;; michael@0: --libfaketime) michael@0: shift michael@0: FAKETIMELIB="$1" michael@0: shift michael@0: ;; michael@0: --smallset) michael@0: shift michael@0: SMALLSET="true" michael@0: ;; michael@0: --) michael@0: ;; michael@0: *) michael@0: ;; michael@0: esac michael@0: done michael@0: [ $HELP = "true" ] && usage 0 michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Create and set needed and useful environment variables michael@0: ################################################################################ michael@0: create_environment() michael@0: { michael@0: # Base location of NISCC testcases michael@0: export NISCC_HOME=${NISCC_HOME:-/niscc} michael@0: michael@0: # Base location of NSS michael@0: export HG=${HG:-"$HOME/niscc-hg"} michael@0: michael@0: # NSS being tested michael@0: export LOCALDIST=${LOCALDIST:-"${HG}/nss"} michael@0: michael@0: # Hacked NSS - built with "NISCC_TEST=1" michael@0: export NSS_HACK=${NSS_HACK:-"${HG}/nss_hack"} michael@0: michael@0: # Hostname of the testmachine michael@0: export HOST=${HOST:-127.0.0.1} michael@0: michael@0: # Whether to store logfiles michael@0: export LOG_STORE=${LOG_STORE:-"false"} michael@0: michael@0: # Whether to mail the summary michael@0: export USE_MAIL=${USE_MAIL:-"false"} michael@0: michael@0: # How to mail summary michael@0: export MAIL_COMMAND=${MAIL_COMMAND:-"mailx -S smtp=smtp://your.smtp.server:25 -r your+niscc@email.address"} michael@0: michael@0: # List of mail addresses where to send summary michael@0: export QA_LIST=${QA_LIST:-"result@recipient.address"} michael@0: michael@0: # Whether to use 64b build michael@0: export USE_64=${USE_64:-1} michael@0: michael@0: # Directory where to write all the output data (around 650MiB for each run) michael@0: export TEST_OUTPUT=${TEST_OUTPUT:-"$HOME/out"} michael@0: michael@0: # How many threads to use in selfserv and strsclnt (max. 10) michael@0: export THREADS=${THREADS:-10} michael@0: michael@0: # If true, do not build tthe tested version of NSS michael@0: export NO_BUILD_TEST=${NO_BUILD_TEST:-"false"} michael@0: michael@0: # If true, do not build the special NSS version for NISCC michael@0: export NO_BUILD_HACK=${NO_BUILD_HACK:-"false"} michael@0: michael@0: # If true, do not rebuild client and server directories michael@0: export NO_SETUP=${NO_SETUP:-"false"} michael@0: michael@0: # Location of NISCC SSL/TLS testcases michael@0: export TEST=${TEST:-"${NISCC_HOME}/NISCC_SSL_testcases"} michael@0: michael@0: # If true, then be extra verbose michael@0: export VERBOSE=${VERBOSE:-""} michael@0: michael@0: # If true, test the system installed NSS michael@0: export TEST_SYSTEM=${TEST_SYSTEM:-"false"} michael@0: [ "$TEST_SYSTEM" = "true" ] && export NO_BUILD_TEST="true" michael@0: michael@0: [ ! -z "$VERBOSE" ] && set -xv michael@0: michael@0: # Real date for naming of archives (system date must be 2002-11-18 .. 2007-11-18 due to certificate validity michael@0: DATE=${DATE:-`date`} michael@0: export DATE=`date -d "$DATE" +%Y%m%d` michael@0: michael@0: FAKETIMELIB=${FAKETIMELIB:-""} michael@0: export DATE=`date -d "$DATE" +%Y%m%d` michael@0: michael@0: # Whether to test only a very small subset michael@0: export SMALLSET=${SMALLSET:-"false"} michael@0: michael@0: # Create output dir if it doesn't exist michael@0: mkdir -p ${TEST_OUTPUT} michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Do a HG pull of NSS michael@0: ################################################################################ michael@0: hg_pull() michael@0: { michael@0: # Tested NSS - by default using HG default tip michael@0: if [ "$NO_BUILD_TEST" = "false" ]; then michael@0: echo "cloning NSS sources to be tested from HG" michael@0: [ ! -d "$LOCALDIST" ] && mkdir -p "$LOCALDIST" michael@0: cd "$LOCALDIST" michael@0: [ ! -d "$LOCALDIST/nspr" ] && hg clone --noupdate https://hg.mozilla.org/projects/nspr michael@0: cd nspr; hg pull; hg update -C -r default; cd .. michael@0: [ ! -d "$LOCALDIST/nss" ] && hg clone --noupdate https://hg.mozilla.org/projects/nss michael@0: cd nss; hg pull; hg update -C -r default; cd .. michael@0: #find . -exec touch {} \; michael@0: fi michael@0: michael@0: # Hacked NSS - by default using some RTM version. michael@0: # Do not use HEAD for hacked NSS - it needs to be stable and bug-free michael@0: if [ "$NO_BUILD_HACK" = "false" ]; then michael@0: echo "cloning NSS sources for a hacked build from HG" michael@0: [ ! -d "$NSS_HACK" ] && mkdir -p "$NSS_HACK" michael@0: cd "$NSS_HACK" michael@0: NSPR_TAG=`curl --silent http://hg.mozilla.org/releases/mozilla-aurora/raw-file/default/nsprpub/TAG-INFO | head -1 | sed --regexp-extended 's/[[:space:]]//g' | awk '{print $1}'` michael@0: NSS_TAG=`curl --silent http://hg.mozilla.org/releases/mozilla-aurora/raw-file/default/security/nss/TAG-INFO | head -1 | sed --regexp-extended 's/[[:space:]]//g' | awk '{print $1}'` michael@0: [ ! -d "$NSS_HACK/nspr" ] && hg clone --noupdate https://hg.mozilla.org/projects/nspr michael@0: cd nspr; hg pull; hg update -C -r "$NSPR_TAG"; cd .. michael@0: [ ! -d "$NSS_HACK/nss" ] && hg clone --noupdate https://hg.mozilla.org/projects/nss michael@0: cd nss; hg pull; hg update -C -r "$NSS_TAG"; cd .. michael@0: #find . -exec touch {} \; michael@0: fi michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Build NSS after setting make variable NISCC_TEST michael@0: ################################################################################ michael@0: build_NSS() michael@0: { michael@0: # Tested NSS michael@0: if [ "$NO_BUILD_TEST" = "false" ]; then michael@0: echo "building NSS to be tested" michael@0: cd "$LOCALDIST" michael@0: unset NISCC_TEST michael@0: cd nss michael@0: gmake nss_clean_all &>> $TEST_OUTPUT/nisccBuildLog michael@0: gmake nss_build_all &>> $TEST_OUTPUT/nisccBuildLog michael@0: fi michael@0: michael@0: # Hacked NSS michael@0: if [ "$NO_BUILD_HACK" = "false" ]; then michael@0: echo "building hacked NSS" michael@0: cd "$NSS_HACK" michael@0: export NISCC_TEST=1 michael@0: cd nss michael@0: gmake nss_clean_all &>> $TEST_OUTPUT/nisccBuildLogHack michael@0: gmake nss_build_all &>> $TEST_OUTPUT/nisccBuildLogHack michael@0: fi michael@0: michael@0: unset NISCC_TEST michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Set build dir, bin and lib directories michael@0: ################################################################################ michael@0: init() michael@0: { michael@0: # Enable useful core files to be generated in case of crash michael@0: ulimit -c unlimited michael@0: michael@0: # Pattern of core files, they should be created in current directory michael@0: echo "core_pattern $(cat /proc/sys/kernel/core_pattern)" > "$TEST_OUTPUT/nisccLog00" michael@0: michael@0: # gmake is needed in the path for this suite to run michael@0: echo "PATH $PATH" >> "$TEST_OUTPUT/nisccLog00" michael@0: michael@0: # Find out hacked NSS version michael@0: DISTTYPE=`cd "$NSS_HACK/nss/tests/common"; gmake objdir_name` michael@0: echo "NSS_HACK DISTTYPE $DISTTYPE" >> "$TEST_OUTPUT/nisccLog00" michael@0: export HACKBIN="$NSS_HACK/dist/$DISTTYPE/bin" michael@0: export HACKLIB="$NSS_HACK/dist/$DISTTYPE/lib" michael@0: michael@0: if [ "$TEST_SYSTEM" = "false" ]; then michael@0: # Find out nss version michael@0: DISTTYPE=`cd "$LOCALDIST/nss/tests/common"; gmake objdir_name` michael@0: echo "NSS DISTTYPE $DISTTYPE" >> "$TEST_OUTPUT/nisccLog00" michael@0: export TESTBIN="$LOCALDIST/dist/$DISTTYPE/bin" michael@0: export TESTLIB="$LOCALDIST/dist/$DISTTYPE/lib" michael@0: export TESTTOOLS="$TESTBIN" michael@0: else michael@0: # Using system installed NSS michael@0: echo "USING SYSTEM NSS" >> "$TEST_OUTPUT/nisccLog00" michael@0: export TESTBIN="/usr/bin" michael@0: if [ `uname -m` = "x86_64" ]; then michael@0: export TESTLIB="/usr/lib64" michael@0: export TESTTOOLS="/usr/lib64/nss/unsupported-tools" michael@0: else michael@0: export TESTLIB="/usr/lib" michael@0: export TESTTOOLS="/usr/lib/nss/unsupported-tools" michael@0: fi michael@0: fi michael@0: michael@0: # Verify NISCC_TEST was set in the proper library michael@0: if strings "$HACKLIB/libssl3.so" | grep NISCC_TEST > /dev/null 2>&1; then michael@0: echo "$HACKLIB/libssl3.so contains NISCC_TEST" >> "$TEST_OUTPUT/nisccLog00" michael@0: else michael@0: echo "$HACKLIB/libssl3.so does NOT contain NISCC_TEST" >> "$TEST_OUTPUT/nisccLog00" michael@0: fi michael@0: michael@0: if strings "$TESTLIB/libssl3.so" | grep NISCC_TEST > /dev/null 2>&1; then michael@0: echo "$TESTLIB/libssl3.so contains NISCC_TEST" >> "$TEST_OUTPUT/nisccLog00" michael@0: else michael@0: echo "$TESTLIB/libssl3.so does NOT contain NISCC_TEST" >> "$TEST_OUTPUT/nisccLog00" michael@0: fi michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Setup simple client and server directory michael@0: ################################################################################ michael@0: ssl_setup_dirs_simple() michael@0: { michael@0: [ "$NO_SETUP" = "true" ] && return michael@0: michael@0: echo "Setting up working directories for SSL simple tests" michael@0: michael@0: CLIENT="$TEST_OUTPUT/niscc_ssl/simple_client" michael@0: SERVER="$TEST_OUTPUT/niscc_ssl/simple_server" michael@0: michael@0: # Generate .p12 files michael@0: openssl pkcs12 -export -inkey "$TEST/client_key.pem" -in "$TEST/client_crt.pem" -out "$TEST_OUTPUT/client_crt.p12" -passout pass:testtest1 -name "client_crt" michael@0: openssl pkcs12 -export -inkey "$TEST/server_key.pem" -in "$TEST/server_crt.pem" -out "$TEST_OUTPUT/server_crt.p12" -passout pass:testtest1 -name "server_crt" michael@0: michael@0: # Setup simple client directory michael@0: rm -rf "$CLIENT" michael@0: mkdir -p "$CLIENT" michael@0: echo test > "$CLIENT/password-is-test.txt" michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -N -d "$CLIENT" -f "$CLIENT/password-is-test.txt" >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -A -d "$CLIENT" -n rootca -i "$TEST/rootca.crt" -t "C,C," >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/pk12util" -i "$TEST_OUTPUT/client_crt.p12" -d "$CLIENT" -k "$CLIENT/password-is-test.txt" -W testtest1 >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -L -d "$CLIENT" >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: michael@0: # File containg message used for terminating the server michael@0: echo "GET /stop HTTP/1.0" > "$CLIENT/stop.txt" michael@0: echo "" >> "$CLIENT/stop.txt" michael@0: michael@0: # Setup simple server directory michael@0: rm -rf "$SERVER" michael@0: mkdir -p "$SERVER" michael@0: echo test > "$SERVER/password-is-test.txt" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -N -d "$SERVER" -f "$SERVER/password-is-test.txt" >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -A -d "$SERVER" -n rootca -i "$TEST/rootca.crt" -t "TC,C," >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/pk12util" -i "$TEST_OUTPUT/server_crt.p12" -d "$SERVER" -k "$SERVER/password-is-test.txt" -W testtest1 >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -L -d "$SERVER" >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Setup resigned client and server directory michael@0: ################################################################################ michael@0: ssl_setup_dirs_resigned() michael@0: { michael@0: [ "$NO_SETUP" = "true" ] && return michael@0: michael@0: echo "Setting up working directories for SSL resigned tests" michael@0: michael@0: CLIENT="$TEST_OUTPUT/niscc_ssl/resigned_client" michael@0: SERVER="$TEST_OUTPUT/niscc_ssl/resigned_server" michael@0: michael@0: # Setup resigned client directory michael@0: rm -rf "$CLIENT" michael@0: mkdir -p "$CLIENT" michael@0: echo test > "$CLIENT/password-is-test.txt" michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -N -d "$CLIENT" -f "$CLIENT/password-is-test.txt" >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -A -d "$CLIENT" -n rootca -i "$TEST/rootca.crt" -t "C,C," >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/pk12util" -i "$TEST_OUTPUT/client_crt.p12" -d "$CLIENT" -k "$CLIENT/password-is-test.txt" -W testtest1 >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -L -d "$CLIENT" >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: michael@0: echo "GET /stop HTTP/1.0" > "$CLIENT/stop.txt" michael@0: echo "" >> "$CLIENT/stop.txt" michael@0: michael@0: # Setup resigned server directory michael@0: rm -rf "$SERVER" michael@0: mkdir -p "$SERVER" michael@0: echo test > "$SERVER/password-is-test.txt" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -N -d "$SERVER" -f "$SERVER/password-is-test.txt" >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -A -d "$SERVER" -n rootca -i "$TEST/rootca.crt" -t "TC,C," >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/pk12util" -i "$TEST_OUTPUT/server_crt.p12" -d "$SERVER" -k "$SERVER/password-is-test.txt" -W testtest1 >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -L -d "$SERVER" >> "$TEST_OUTPUT/nisccLog00" 2>&1 michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: } michael@0: michael@0: ################################################################################ michael@0: # NISCC SMIME tests michael@0: ################################################################################ michael@0: niscc_smime() michael@0: { michael@0: cd "$TEST_OUTPUT" michael@0: DATA="$NISCC_HOME/NISCC_SMIME_testcases" michael@0: michael@0: [ ! -d niscc_smime ] && mkdir -p niscc_smime michael@0: michael@0: export SMIME_CERT_DB_DIR=envDB michael@0: export NSS_STRICT_SHUTDOWN=1 michael@0: export NSS_DISABLE_ARENA_FREE_LIST=1 michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: michael@0: # Generate .p12 files michael@0: openssl pkcs12 -export -inkey "$DATA/Client.key" -in "$DATA/Client.crt" -out Client.p12 -passout pass:testtest1 &>/dev/null michael@0: openssl pkcs12 -export -inkey "$DATA/CA.key" -in "$DATA/CA.crt" -out CA.p12 -passout pass:testtest1 &>/dev/null michael@0: michael@0: # Generate envDB if needed michael@0: if [ ! -d "$SMIME_CERT_DB_DIR" ]; then michael@0: mkdir -p "$SMIME_CERT_DB_DIR" michael@0: echo testtest1 > password-is-testtest1.txt michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -N -d "./$SMIME_CERT_DB_DIR" -f password-is-testtest1.txt > /dev/null 2>&1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -A -d "$SMIME_CERT_DB_DIR" -f password-is-testtest1.txt -i "$DATA/CA.crt" -n CA -t "TC,C," michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -A -d "$SMIME_CERT_DB_DIR" -f password-is-testtest1.txt -i "$DATA/Client.crt" -n Client -t "TC,C," michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/pk12util" -i ./CA.p12 -d "$SMIME_CERT_DB_DIR" -k password-is-testtest1.txt -W testtest1 michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/pk12util" -i ./Client.p12 -d "$SMIME_CERT_DB_DIR" -k password-is-testtest1.txt -W testtest1 michael@0: fi michael@0: michael@0: # if p7m-ed-m-files.txt does not exist, then generate it. michael@0: [ -f "$DATA/p7m-ed-m-files.txt" ] && sed "s|^|$DATA/|" "$DATA/p7m-ed-m-files.txt" > p7m-ed-m-files.txt michael@0: export P7M_ED_M_FILES=p7m-ed-m-files.txt michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: [ ! -f "$P7M_ED_M_FILES" ] && find "$DATA"/p7m-ed-m-0* -type f -print | head -10 >> "$P7M_ED_M_FILES" michael@0: else michael@0: [ ! -f "$P7M_ED_M_FILES" ] && find "$DATA"/p7m-ed-m-0* -type f -print >> "$P7M_ED_M_FILES" michael@0: fi michael@0: michael@0: # Test "p7m-ed-m*" testcases michael@0: echo "Testing SMIME enveloped data testcases" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/cmsutil" $VERBOSE -D -d "$SMIME_CERT_DB_DIR" -p testtest1 -b -i "$P7M_ED_M_FILES" > niscc_smime/p7m-ed-m-results.txt 2>&1 michael@0: michael@0: export SMIME_CERT_DB_DIR=sigDB michael@0: # Generate sigDB if needed michael@0: if [ ! -d "$SMIME_CERT_DB_DIR" ]; then michael@0: mkdir -p "$SMIME_CERT_DB_DIR" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -N -d "$SMIME_CERT_DB_DIR" -f password-is-testtest1.txt michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -A -d "$SMIME_CERT_DB_DIR" -i "$DATA/CA.crt" -n CA -t "TC,C," michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/certutil" -A -d "$SMIME_CERT_DB_DIR" -i "$DATA/Client.crt" -n Client -t "TC,C," michael@0: fi michael@0: michael@0: # if p7m-sd-dt-files.txt does not exist, then generate it. michael@0: [ -f "$DATA/p7m-sd-dt-files.txt" ] && sed "s|^|$DATA/|" "$DATA/p7m-sd-dt-files.txt" > p7m-sd-dt-files.txt michael@0: export P7M_SD_DT_FILES=p7m-sd-dt-files.txt michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: [ ! -f "$P7M_SD_DT_FILES" ] && find "$DATA"/p7m-sd-dt-[cm]-* -type f -print | head -10 >> "$P7M_SD_DT_FILES" michael@0: else michael@0: [ ! -f "$P7M_SD_DT_FILES" ] && find "$DATA"/p7m-sd-dt-[cm]-* -type f -print >> "$P7M_SD_DT_FILES" michael@0: fi michael@0: michael@0: [ ! -f detached.txt ] && touch detached.txt michael@0: michael@0: # Test "p7m-sd-dt*" testcases michael@0: echo "Testing SMIME detached signed data testcases" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/cmsutil" $VERBOSE -D -d "$SMIME_CERT_DB_DIR" -c detached.txt -b -i "$P7M_SD_DT_FILES" > niscc_smime/p7m-sd-dt-results.txt 2>&1 michael@0: michael@0: # if p7m-sd-op-files.txt does not exist, then generate it. michael@0: [ -f "$DATA/p7m-sd-op-files.txt" ] && sed "s|^|$DATA/|" "$DATA/p7m-sd-op-files.txt" > p7m-sd-op-files.txt michael@0: export P7M_SD_OP_FILES=p7m-sd-op-files.txt michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: [ ! -f "$P7M_SD_OP_FILES" ] && find "$DATA"/p7m-sd-op-[cm]-* -type f -print | head -10 >> "$P7M_SD_OP_FILES" michael@0: else michael@0: [ ! -f "$P7M_SD_OP_FILES" ] && find "$DATA"/p7m-sd-op-[cm]-* -type f -print >> "$P7M_SD_OP_FILES" michael@0: fi michael@0: michael@0: # Test "p7m-sd-op*" testcases michael@0: echo "Testing SMIME opaque signed data testcases" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTBIN}/cmsutil" $VERBOSE -D -d "$SMIME_CERT_DB_DIR" -b -i "$P7M_SD_OP_FILES" > niscc_smime/p7m-sd-op-results.txt 2>&1 michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Set env variables for NISCC SSL tests michael@0: ################################################################################ michael@0: niscc_ssl_init() michael@0: { michael@0: export NSS_STRICT_SHUTDOWN=1 michael@0: export NSS_DISABLE_ARENA_FREE_LIST=1 michael@0: cd "$TEST_OUTPUT" michael@0: } michael@0: michael@0: force_crash() michael@0: { michael@0: echo "int main(int argc, char *argv[]) { int *i; i = (int*)(void*)1; *i = 1; }" > "$TEST_OUTPUT/crashme.c" michael@0: gcc -g -o "$TEST_OUTPUT/crashme" "$TEST_OUTPUT/crashme.c" michael@0: "$TEST_OUTPUT/crashme" michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Do simple client auth tests michael@0: # Use an altered client against the server michael@0: ################################################################################ michael@0: ssl_simple_client_auth() michael@0: { michael@0: echo "Testing SSL simple client auth testcases" michael@0: export CLIENT="$TEST_OUTPUT/niscc_ssl/simple_client" michael@0: export SERVER="$TEST_OUTPUT/niscc_ssl/simple_server" michael@0: export PORT=8443 michael@0: export START_AT=1 michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: export STOP_AT=10 michael@0: else michael@0: export STOP_AT=106160 michael@0: fi michael@0: unset NISCC_TEST michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/selfserv" $VERBOSE -p $PORT -d "$SERVER" -n server_crt -rr -t $THREADS -w test > "$TEST_OUTPUT/nisccLog01" 2>&1 & michael@0: michael@0: export NISCC_TEST="$TEST/simple_client" michael@0: export LD_LIBRARY_PATH="$HACKLIB" michael@0: michael@0: for START in `seq $START_AT $THREADS $STOP_AT`; do michael@0: START_AT=$START \ michael@0: STOP_AT=$(($START+$THREADS)) \ michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${HACKBIN}/strsclnt" $VERBOSE -d "$CLIENT" -n client_crt -p $PORT -t $THREADS -c $THREADS -o -N -w test $HOST >> "$TEST_OUTPUT/nisccLog02" 2>&1 michael@0: done michael@0: michael@0: unset NISCC_TEST michael@0: echo "starting tstclnt to shutdown simple client selfserv process" michael@0: for i in `seq 5`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${HACKBIN}/tstclnt" -h $HOST -p $PORT -d "$CLIENT" -n client_crt -o -f -w test < "$CLIENT/stop.txt" >> "$TEST_OUTPUT/nisccLog02" 2>&1 michael@0: done michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: michael@0: sleep 1 michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Do simple server auth tests michael@0: # Use an altered server against the client michael@0: ################################################################################ michael@0: ssl_simple_server_auth() michael@0: { michael@0: echo "Testing SSL simple server auth testcases" michael@0: export CLIENT="$TEST_OUTPUT/niscc_ssl/simple_client" michael@0: export SERVER="$TEST_OUTPUT/niscc_ssl/simple_server" michael@0: export PORT=8444 michael@0: export START_AT=00000001 michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: export STOP_AT=00000010 michael@0: else michael@0: export STOP_AT=00106167 michael@0: fi michael@0: export LD_LIBRARY_PATH="$HACKLIB" michael@0: export NISCC_TEST="$TEST/simple_server" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${HACKBIN}/selfserv" $VERBOSE -p $PORT -d "$SERVER" -n server_crt -t $THREADS -w test > "$TEST_OUTPUT/nisccLog03" 2>&1 & michael@0: michael@0: unset NISCC_TEST michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: for START in `seq $START_AT $THREADS $STOP_AT`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/strsclnt" $VERBOSE -d "$CLIENT" -p $PORT -t $THREADS -c $THREADS -o -N $HOST >> "$TEST_OUTPUT/nisccLog04" 2>&1 michael@0: done michael@0: michael@0: echo "starting tstclnt to shutdown simple server selfserv process" michael@0: for i in `seq 5`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/tstclnt" -h $HOST -p $PORT -d "$CLIENT" -n client_crt -o -f -w test < "$CLIENT/stop.txt" >> "$TEST_OUTPUT/nisccLog04" 2>&1 michael@0: done michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: michael@0: sleep 1 michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Do simple rootCA tests michael@0: # Use an altered server against the client michael@0: ################################################################################ michael@0: ssl_simple_rootca() michael@0: { michael@0: echo "Testing SSL simple rootCA testcases" michael@0: export CLIENT="$TEST_OUTPUT/niscc_ssl/simple_client" michael@0: export SERVER="$TEST_OUTPUT/niscc_ssl/simple_server" michael@0: export PORT=8445 michael@0: export START_AT=1 michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: export STOP_AT=10 michael@0: else michael@0: export STOP_AT=106190 michael@0: fi michael@0: export LD_LIBRARY_PATH="$HACKLIB" michael@0: export NISCC_TEST="$TEST/simple_rootca" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${HACKBIN}/selfserv" $VERBOSE -p $PORT -d "$SERVER" -n server_crt -t $THREADS -w test > "$TEST_OUTPUT/nisccLog05" 2>&1 & michael@0: michael@0: unset NISCC_TEST michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: for START in `seq $START_AT $THREADS $STOP_AT`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/strsclnt" $VERBOSE -d "$CLIENT" -p $PORT -t $THREADS -c $THREADS -o -N $HOST >> "$TEST_OUTPUT/nisccLog06" 2>&1 michael@0: done michael@0: michael@0: echo "starting tstclnt to shutdown simple rootca selfserv process" michael@0: for i in `seq 5`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/tstclnt" -h $HOST -p $PORT -d "$CLIENT" -n client_crt -o -f -w test < "$CLIENT/stop.txt" >> "$TEST_OUTPUT/nisccLog06" 2>&1 michael@0: done michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: michael@0: sleep 1 michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Do resigned client auth tests michael@0: # Use an altered client against the server michael@0: ################################################################################ michael@0: ssl_resigned_client_auth() michael@0: { michael@0: echo "Testing SSL resigned client auth testcases" michael@0: export CLIENT="$TEST_OUTPUT/niscc_ssl/resigned_client" michael@0: export SERVER="$TEST_OUTPUT/niscc_ssl/resigned_server" michael@0: export PORT=8446 michael@0: export START_AT=0 michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: export STOP_AT=9 michael@0: else michael@0: export STOP_AT=99981 michael@0: fi michael@0: unset NISCC_TEST michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/selfserv" $VERBOSE -p $PORT -d "$SERVER" -n server_crt -rr -t $THREADS -w test > "$TEST_OUTPUT/nisccLog07" 2>&1 & michael@0: michael@0: export NISCC_TEST="$TEST/resigned_client" michael@0: export LD_LIBRARY_PATH="$HACKLIB" michael@0: michael@0: for START in `seq $START_AT $THREADS $STOP_AT`; do michael@0: START_AT=$START \ michael@0: STOP_AT=$(($START+$THREADS)) \ michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${HACKBIN}/strsclnt" $VERBOSE -d "$CLIENT" -n client_crt -p $PORT -t $THREADS -c $THREADS -o -N -w test $HOST >> "$TEST_OUTPUT/nisccLog08" 2>&1 michael@0: done michael@0: michael@0: unset NISCC_TEST michael@0: echo "starting tstclnt to shutdown resigned client selfserv process" michael@0: for i in `seq 5`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${HACKBIN}/tstclnt" -h $HOST -p $PORT -d "$CLIENT" -n client_crt -o -f -w test < "$CLIENT/stop.txt" >> "$TEST_OUTPUT/nisccLog08" 2>&1 michael@0: done michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: michael@0: sleep 1 michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Do resigned server auth tests michael@0: # Use an altered server against the client michael@0: ################################################################################ michael@0: ssl_resigned_server_auth() michael@0: { michael@0: echo "Testing SSL resigned server auth testcases" michael@0: export CLIENT="$TEST_OUTPUT/niscc_ssl/resigned_client" michael@0: export SERVER="$TEST_OUTPUT/niscc_ssl/resigned_server" michael@0: export PORT=8447 michael@0: export START_AT=0 michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: export STOP_AT=9 michael@0: else michael@0: export STOP_AT=100068 michael@0: fi michael@0: export LD_LIBRARY_PATH="$HACKLIB" michael@0: export NISCC_TEST="$TEST/resigned_server" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${HACKBIN}/selfserv" $VERBOSE -p $PORT -d "$SERVER" -n server_crt -t $THREADS -w test > "$TEST_OUTPUT/nisccLog09" 2>&1 & michael@0: michael@0: unset NISCC_TEST michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: for START in `seq $START_AT $THREADS $STOP_AT`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/strsclnt" $VERBOSE -d "$CLIENT" -p $PORT -t $THREADS -c $THREADS -o -N $HOST >> "$TEST_OUTPUT/nisccLog10" 2>&1 michael@0: done michael@0: michael@0: echo "starting tstclnt to shutdown resigned server selfserv process" michael@0: for i in `seq 5`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/tstclnt" -h $HOST -p $PORT -d "$CLIENT" -n client_crt -o -f -w test < "$CLIENT/stop.txt" >> "$TEST_OUTPUT/nisccLog10" 2>&1 michael@0: done michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: michael@0: sleep 1 michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Do resigned rootCA tests michael@0: # Use an altered server against the client michael@0: ################################################################################ michael@0: ssl_resigned_rootca() michael@0: { michael@0: echo "Testing SSL resigned rootCA testcases" michael@0: export CLIENT="$TEST_OUTPUT/niscc_ssl/resigned_client" michael@0: export SERVER="$TEST_OUTPUT/niscc_ssl/resigned_server" michael@0: export PORT=8448 michael@0: export START_AT=0 michael@0: if [ "$SMALLSET" = "true" ]; then michael@0: export STOP_AT=9 michael@0: else michael@0: export STOP_AT=99959 michael@0: fi michael@0: export LD_LIBRARY_PATH="$HACKLIB" michael@0: export NISCC_TEST="$TEST/resigned_rootca" michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${HACKBIN}/selfserv" $VERBOSE -p $PORT -d "$SERVER" -n server_crt -t $THREADS -w test > "$TEST_OUTPUT/nisccLog11" 2>&1 & michael@0: michael@0: unset NISCC_TEST michael@0: export LD_LIBRARY_PATH="$TESTLIB" michael@0: for START in `seq $START_AT $THREADS $STOP_AT`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/strsclnt" $VERBOSE -d "$CLIENT" -p $PORT -t $THREADS -c $THREADS -o -N $HOST >> "$TEST_OUTPUT/nisccLog12" 2>&1 michael@0: done michael@0: michael@0: echo "starting tstclnt to shutdown resigned rootca selfserv process" michael@0: for i in `seq 5`; do michael@0: LD_PRELOAD=${FAKETIMELIB} NO_FAKE_STAT=1 FAKETIME="@2004-03-29 14:14:14" \ michael@0: "${TESTTOOLS}/tstclnt" -h $HOST -p $PORT -d "$CLIENT" -n client_crt -o -f -w test < "$CLIENT/stop.txt" >> "$TEST_OUTPUT/nisccLog12" 2>&1 michael@0: done michael@0: michael@0: unset LD_LIBRARY_PATH michael@0: michael@0: sleep 1 michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Email the test logfile, and if core found, notify of failure michael@0: ################################################################################ michael@0: mail_testLog() michael@0: { michael@0: pushd "$TEST_OUTPUT" michael@0: michael@0: # remove mozilla nss build false positives and core stored in previous runs michael@0: find . -name "core*" -print | grep -v coreconf | grep -v core_watch | grep -v archive >> crashLog michael@0: export SIZE=`cat crashLog | wc -l` michael@0: michael@0: [ "$USE_MAIL" = "false" ] && return michael@0: michael@0: # mail text michael@0: MT=mailText michael@0: rm -f $MT michael@0: michael@0: if [ "$SIZE" -ne 1 ]; then michael@0: echo "### FAILED ###" >> $MT michael@0: echo "### Exactly one crash is expected." >> $MT michael@0: echo "### Zero means: crash detection is broken, fix the script!" >> $MT michael@0: echo "### > 1 means: robustness test failure, fix the bug! (check the logs)" >> $MT michael@0: cat crashLog >> nisccLogSummary michael@0: SUBJ="FAILED: NISCC TESTS (check file: crashLog)" michael@0: else michael@0: echo ":) PASSED :)" >> $MT michael@0: SUBJ="PASSED: NISCC tests" michael@0: fi michael@0: michael@0: echo "Date used during test run: $DATE" >> $MT michael@0: michael@0: echo "Count of lines in files:" >> $MT michael@0: wc -l crashLog nisccBuildLog nisccBuildLogHack nisccLog[0-9]* p7m-* |grep -vw total >> $MT michael@0: NUM=`cat nisccLog0[123456789] nisccLog1[12] | egrep -ic "success/passed"` michael@0: echo "Number of times the SSL tests reported success/passed (low expected): $NUM" >> $MT michael@0: NUM=`cat nisccLog0[123456789] nisccLog1[12] | egrep -ic "problem|failed|error"` michael@0: echo "Number of times the SSL tests reported problem/failed/error (high expected): $NUM" >> $MT michael@0: NUM=`cat niscc_smime/p7m*results.txt | egrep -ic "success/passed"` michael@0: echo "Number of times the S/MIME tests reported success/passed (low expected): $NUM" >> $MT michael@0: NUM=`cat niscc_smime/p7m*results.txt | egrep -ic "problem|failed|error"` michael@0: echo "Number of times the S/MIME tests reported problem/failed/error (high expected): $NUM" >> $MT michael@0: echo "==== tail of nisccBuildLog ====" >> $MT michael@0: tail -20 nisccBuildLog >> $MT michael@0: echo "===============================" >> $MT michael@0: echo "==== tail of nisccBuildLogHack ====" >> $MT michael@0: tail -20 nisccBuildLogHack >> $MT michael@0: echo "===================================" >> $MT michael@0: michael@0: #NUM=`` michael@0: #echo "Number of : $NUM" >> $MT michael@0: michael@0: cat $MT | $MAIL_COMMAND -s "$SUBJ" $QA_LIST michael@0: michael@0: popd michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Summarize all logs michael@0: ################################################################################ michael@0: log_summary() michael@0: { michael@0: echo "Summarizing all logs" michael@0: # Move old logs michael@0: [ -f "$TEST_OUTPUT/nisccLogSummary" ] && mv nisccLogSummary nisccLogSummary.old michael@0: [ -f "$TEST_OUTPUT/crashLog" ] && mv crashLog crashLog.old michael@0: michael@0: for a in $TEST_OUTPUT/nisccLog[0-9]*; do michael@0: echo ================================== "$a" michael@0: grep -v using "$a" | sort | uniq -c | sort -b -n +0 -1 michael@0: done > $TEST_OUTPUT/nisccLogSummary michael@0: michael@0: for a in $TEST_OUTPUT/niscc_smime/p7m-*-results.txt; do michael@0: echo ================================== "$a" michael@0: grep -v using "$a" | sort | uniq -c | sort -b -n +0 -1 michael@0: done >> $TEST_OUTPUT/nisccLogSummary michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Process core files michael@0: ################################################################################ michael@0: core_process() michael@0: { michael@0: echo "Processing core files" michael@0: cd "$TEST_OUTPUT" michael@0: michael@0: for CORE in `cat crashLog`; do michael@0: FILE=`file "$CORE" | sed "s/.* from '//" | sed "s/'.*//"` michael@0: BINARY=`strings "$CORE" | grep "^${FILE}" | tail -1` michael@0: gdb "$BINARY" "$CORE" << EOF_GDB > "$CORE.details" michael@0: where michael@0: quit michael@0: EOF_GDB michael@0: done michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Move the old log files to save them, delete extra log files michael@0: ################################################################################ michael@0: move_files() michael@0: { michael@0: echo "Moving and deleting log files" michael@0: cd "$TEST_OUTPUT" michael@0: michael@0: rm -rf TRASH michael@0: mkdir TRASH michael@0: michael@0: if [ "$LOG_STORE" = "true" ]; then michael@0: BRANCH=`echo $LOCALDIST | sed "s:.*/\(security.*\)/builds/.*:\1:"` michael@0: if [ "$BRANCH" = "$LOCALDIST" ]; then michael@0: ARCHIVE="$TEST_OUTPUT/archive" michael@0: else michael@0: ARCHIVE="$TEST_OUTPUT/archive/$BRANCH" michael@0: fi michael@0: michael@0: # Check for archive directory michael@0: if [ ! -d "$ARCHIVE" ]; then michael@0: mkdir -p "$ARCHIVE" michael@0: fi michael@0: michael@0: # Determine next log storage point michael@0: slot=`ls -1 "$ARCHIVE" | grep $DATE | wc -l` michael@0: slot=`expr $slot + 1` michael@0: location="$ARCHIVE/$DATE.$slot" michael@0: mkdir -p "$location" michael@0: michael@0: # Archive the logs michael@0: mv nisccBuildLog "$location" 2> /dev/null michael@0: mv nisccBuildLogHack "$location" 2> /dev/null michael@0: mv nisccLogSummary "$location" michael@0: mv nisccLog* "$location" michael@0: mv niscc_smime/p7m-ed-m-results.txt "$location" michael@0: mv niscc_smime/p7m-sd-dt-results.txt "$location" michael@0: mv niscc_smime/p7m-sd-op-results.txt "$location" michael@0: michael@0: # Archive any core files produced michael@0: for core in `cat "$TEST_OUTPUT/crashLog"`; do michael@0: mv "$core" "$location" michael@0: mv "$core.details" "$location" michael@0: done michael@0: mv crashLog "$location" michael@0: else michael@0: # Logs not stored => summaries, crashlog and corefiles not moved, other logs deleted michael@0: mv nisccLog00 nisccLog01 nisccLog02 nisccLog03 nisccLog04 nisccLog05 nisccLog06 nisccLog07 nisccLog08 nisccLog09 nisccLog10 nisccLog11 nisccLog12 TRASH/ michael@0: mv niscc_smime/p7m-ed-m-results.txt niscc_smime/p7m-sd-dt-results.txt niscc_smime/p7m-sd-op-results.txt TRASH/ michael@0: fi michael@0: mv envDB sigDB niscc_smime niscc_ssl TRASH/ michael@0: mv CA.p12 Client.p12 client_crt.p12 server_crt.p12 TRASH/ michael@0: mv p7m-ed-m-files.txt p7m-sd-dt-files.txt p7m-sd-op-files.txt password-is-testtest1.txt detached.txt TRASH/ michael@0: mv crashme.c crashme TRASH/ michael@0: } michael@0: michael@0: ################################################################################ michael@0: # Main michael@0: ################################################################################ michael@0: process_args $* michael@0: create_environment michael@0: hg_pull michael@0: build_NSS michael@0: init michael@0: niscc_smime michael@0: niscc_ssl_init michael@0: force_crash michael@0: ssl_setup_dirs_simple michael@0: ssl_simple_client_auth michael@0: ssl_simple_server_auth michael@0: ssl_simple_rootca michael@0: ssl_setup_dirs_resigned michael@0: ssl_resigned_client_auth michael@0: ssl_resigned_server_auth michael@0: ssl_resigned_rootca michael@0: # no idea what these commented-out lines are supposed to be! michael@0: #ssl_setup_dirs_update michael@0: # ssl_update_server_auth der michael@0: # ssl_update_client_auth der michael@0: # ssl_update_server_auth resigned-der michael@0: # ssl_update_client_auth resigned-der michael@0: log_summary michael@0: mail_testLog michael@0: core_process michael@0: move_files michael@0: exit $SIZE