#! /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/.
########################################################################
#
# mozilla/security/nss/tests/multinit/multinit.sh
#
# Script to test NSS multinit
#
# needs to work on all Unix and Windows platforms
#
# special strings
# ---------------
# FIXME ... known problems, search for this string
# NOTE .... unexpected behavior
#
########################################################################
############################## multinit_init ##############################
# local shell function to initialize this script
########################################################################
multinit_init()
{
SCRIPTNAME=multinit.sh
# sourced - $0 would point to all.sh
if [ -z
"${CLEANUP}" ] ;
then # if nobody else is responsible for
CLEANUP=
"${SCRIPTNAME}" # cleaning this script will do it
fi
if [ -z
"${INIT_SOURCED}" -o
"${INIT_SOURCED}" !=
"TRUE" ];
then
cd ../common
. ./init.sh
fi
if [ ! -r $CERT_LOG_FILE ];
then # we need certificates here
cd ../cert
. ./cert.sh
fi
SCRIPTNAME=multinit.sh
html_head
"MULTI Tests"
grep
"SUCCESS: SMIME passed" $CERT_LOG_FILE >/dev/null || {
Exit 11
"Fatal - S/MIME of cert.sh needs to pass first"
}
# set up our directories
MULTINITDIR=${HOSTDIR}/multinit
MULTINITDIR_1=${MULTINITDIR}/dir1
MULTINITDIR_2=${MULTINITDIR}/dir2
MULTINITDIR_3=${MULTINITDIR}/dir3
R_MULINITDIR=../multinit
R_MULTINITDIR_1=${R_MULTINITDIR}/dir1
R_MULTINITDIR_2=${R_MULTINITDIR}/dir2
R_MULTINITDIR_3=${R_MULTINITDIR}/dir3
# first create them all
mkdir -p ${MULTINITDIR}
mkdir -p ${MULTINITDIR_1}
mkdir -p ${MULTINITDIR_2}
mkdir -p ${MULTINITDIR_3}
# now copy them fro alice, bob, and dave
cd ${MULTINITDIR}
cp ${P_R_ALICEDIR}/* ${MULTINITDIR_1}/
cp ${P_R_BOBDIR}/* ${MULTINITDIR_2}/
cp ${P_R_DAVEDIR}/* ${MULTINITDIR_3}/
# finally delete the RootCerts module to keep the certificate noice in the
# summary lines down
echo | modutil -
delete RootCerts -dbdir ${MULTINITDIR_1}
echo | modutil -
delete RootCerts -dbdir ${MULTINITDIR_2}
echo | modutil -
delete RootCerts -dbdir ${MULTINITDIR_3}
MULTINIT_TESTS=${QADIR}/multinit/multinit.txt
}
############################## multinit_main ##############################
# local shell function to test basic signed and enveloped messages
# from 1 --> 2"
########################################################################
multinit_main()
{
html_head
"Multi init interface testing"
exec < ${MULTINIT_TESTS}
while read order commands shutdown_type dirs readonly testname
do
if [
"$order" !=
"#" ]; then
read tag expected_result
# handle the case where we expect different results based on
# the database type.
if [
"$tag" !=
"all" ];
then
read tag2 expected_result2
if [
"$NSS_DEFAULT_DB_TYPE" ==
"$tag2" ];
then
expected_result=$expected_result2
fi
fi
# convert shutdown type to option flags
shutdown_command=
"";
if [
"$shutdown_type" ==
"old" ];
then
shutdown_command=
"--oldStype"
fi
# convert read only to option flags
ro_command=
"";
case $readonly in
all) ro_command=
"--main_readonly --lib1_readonly --lib2_readonly";;
libs) ro_command=
"--lib1_readonly --lib2_readonly";;
main) ro_command=
"--main_readonly";;
lib1) ro_command=
"--lib1_readonly";;
lib2) ro_command=
"--lib2_readonly";;
none) ;;
*) ;;
esac
# convert commands to option flags
main_command=`
echo $commands | sed -e
's;,.*$;;'`
lib1_command=`
echo $commands | sed -e
's;,.*,;+&+;' -e
's;^.*+,;;' -e
's;,+.*$;;'`
lib2_command=`
echo $commands | sed -e
's;^.*,;;'`
# convert db's to option flags
main_db=`
echo $dirs | sed -e
's;,.*$;;'`
lib1_db=`
echo $dirs | sed -e
's;,.*,;+&+;' -e
's;^.*+,;;' -e
's;,+.*$;;'`
lib2_db=`
echo $dirs | sed -e
's;^.*,;;'`
# show us the command we are executing
echo ${PROFILETOOL} ${BINDIR}/multinit --order $order --main_command $main_command --li
b1_command $lib1_command --lib2_command $lib2_command $shutdown_command --main_db $main_db --lib1_db $lib1_db --lib2_db $lib2_db $ro_command --main_token_name "Main" --lib1_token_name "Lib1" --lib2_token_name "Lib2" --verbose --summary
# execute the command an collect the result. Most of the user
# visible output goes to stderr, so it's not captured by the pipe
actual_result=`${PROFILETOOL} ${BINDIR}/multinit --order $order --main_command $main_command --lib1_command $lib1_command --lib2_command $lib2_command $shutdown_command --main_db $main_db --lib1_db $lib1_db --lib2_db $lib2_db $ro_command --main_token_name "Main" --lib1_token_name "Lib1" --lib2_token_name "Lib2" --verbose --summary | grep "^result=" | sed -e 's;^result=;;'`
# show what we got and what we expected for diagnostic purposes
echo "actual = |$actual_result|"
echo "expected = |$expected_result|"
test "$actual_result" == "$expected_result"
html_msg $? 0 "$testname"
fi
done
}
############################## multinit_cleanup ###########################
# local shell function to finish this script (no exit since it might be
# sourced)
########################################################################
multinit_cleanup()
{
html "