1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
#! /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 --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
# 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 "</TABLE><BR>"
cd ${QADIR}
. common/cleanup.sh
}
################## main #################################################
multinit_init
multinit_main
multinit_cleanup
|