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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
|
#! /bin/bash
#
# 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/ssl/ssl_dist_stress.sh
#
# Script to test NSS SSL - distributed stresstest - this script needs to
# source the regular ssl.sh (for shellfunctions, certs and variables
# initialisation)
# create certs
# start server
# start itself via rsh on different systems to connect back to the server
#
#
# needs to work on all Unix and Windows platforms
#
# special strings
# ---------------
# FIXME ... known problems, search for this string
# NOTE .... unexpected behavior
#
########################################################################
############################## ssl_ds_init #############################
# local shell function to initialize this script
########################################################################
ssl_ds_init()
{
if [ -z "$GLOB_MIN_CERT" ] ; then
GLOB_MIN_CERT=0
fi
if [ -z "$GLOB_MAX_CERT" ] ; then
GLOB_MAX_CERT=200
fi
IP_PARAM=""
CD_QADIR_SSL=""
if [ -n "$1" ] ; then
ssl_ds_eval_opts $*
fi
SCRIPTNAME=ssl_dist_stress.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
ssl_init # let some other script do the hard work (initialize, generate certs, ...
SCRIPTNAME=ssl_dist_stress.sh
echo "$SCRIPTNAME: SSL distributed stress tests ==============================="
}
######################### ssl_ds_usage #################################
# local shell function to explain the usage
########################################################################
ssl_ds_usage()
{
echo "Usage: `basename $1`"
echo " -host hostname "
echo " ...host who runs the server, for distributed stress test"
echo " -stress "
echo " ...runs the server sider of the distributed stress test"
echo " -dir unixdirectory "
echo " ...lets the server side of the distributed stress test"
echo " know where to find the scritp to start on the remote side"
echo " -certnum start-end"
echo " ... provides the range of certs for distributed stress test"
echo " for example -certnum 10-20 will connect 10 times"
echo " no blanks in the range string (not 10 - 20)"
echo " valid range ${GLOB_MIN_CERT}-${GLOB_MAX_CERT}"
echo " -? ...prints this text"
exit 1 #does not need to be Exit, very early in script
}
######################### ssl_ds_eval_opts #############################
# local shell function to deal with options and parameters
########################################################################
ssl_ds_eval_opts()
{
#use $0 not $SCRIPTNAM<E, too early, SCRIPTNAME not yet set
while [ -n "$1" ]
do
case $1 in
-host)
BUILD_OPT=1
export BUILD_OPT
DO_REM_ST="TRUE"
shift
SERVERHOST=$1
HOST=$1
if [ -z $SERVERHOST ] ; then
echo "$0 `uname -n`: -host requires hostname"
ssl_ds_usage
fi
echo "$0 `uname -n`: host $HOST ($1)"
;;
-certn*)
shift
rangeOK=`echo $1 | sed -e 's/[0-9][0-9]*-[0-9][0-9]*/OK/'`
MIN_CERT=`echo $1 | sed -e 's/-[0-9][0-9]*//' -e 's/^00*//'`
MAX_CERT=`echo $1 | sed -e 's/[0-9][0-9]*-//' -e 's/^00*//'`
if [ -z "$rangeOK" -o "$rangeOK" != "OK" -o \
-z "$MIN_CERT" -o -z "$MAX_CERT" -o \
"$MIN_CERT" -gt "$MAX_CERT" -o \
"$MIN_CERT" -lt "$GLOB_MIN_CERT" -o \
"$MAX_CERT" -gt "$GLOB_MAX_CERT" ] ; then
echo "$0 `uname -n`: -certn range not valid"
ssl_ds_usage
fi
echo "$0 `uname -n`: will use certs from $MIN_CERT to $MAX_CERT"
;;
-server|-stress|-dist*st*)
BUILD_OPT=1
export BUILD_OPT
DO_DIST_ST="TRUE"
;;
-dir|-unixdir|-uxdir|-qadir)
shift
UX_DIR=$1
#FIXME - we need a default unixdir
if [ -z "$UX_DIR" ] ; then # -o ! -d "$UX_DIR" ] ; then can't do, Win doesn't know...
echo "$0 `uname -n`: -dir requires directoryname "
ssl_ds_usage
fi
CD_QADIR_SSL="cd $UX_DIR"
;;
-ip*)
shift
IP_ADDRESS=$1
if [ -z "$IP_ADDRESS" ] ; then
echo "$0 `uname -n`: -ip requires ip-address "
ssl_ds_usage
fi
USE_IP=TRUE
IP_PARAM="-ip $IP_ADDRESS"
;;
-h|-help|"-?"|*)
ssl_ds_usage
;;
esac
shift
done
}
############################## ssl_ds_rem_stress #######################
# local shell function to perform the client part of the SSL stress test
########################################################################
ssl_ds_rem_stress()
{
testname="SSL remote part of Stress test (`uname -n`)"
echo "$SCRIPTNAME `uname -n`: $testname"
#cp -r "${CLIENTDIR}" /tmp/ssl_ds.$$ #FIXME
#cd /tmp/ssl_ds.$$
#verbose="-v"
cd ${CLIENTDIR}
CONTINUE=$MAX_CERT
while [ $CONTINUE -ge $MIN_CERT ]
do
echo "strsclnt -D -p ${PORT} -d ${P_R_CLIENTDIR} -w nss -c 1 $verbose "
echo " -n TestUser$CONTINUE ${HOSTADDR} #`uname -n`"
${BINDIR}/strsclnt -D -p ${PORT} -d . -w nss -c 1 $verbose \
-n "TestUser$CONTINUE" ${HOSTADDR} &
#${HOSTADDR} &
CONTINUE=`expr $CONTINUE - 1 `
#sleep 4 #give process time to start up
done
html_msg 0 0 "${testname}" #FIXME
}
######################### ssl_ds_dist_stress ###########################
# local shell function to perform the server part of the new, distributed
# SSL stress test
########################################################################
ssl_ds_dist_stress()
{
max_clientlist="
box-200
washer-200
dryer-200
hornet-50
shabadoo-50
y2sun2-10
galileo-10
shame-10
axilla-10
columbus-10
smarch-10
nugget-10
charm-10
hp64-10
biggayal-10
orville-10
kwyjibo-10
hbombaix-10
raven-10
jordan-10
phaedrus-10
louie-10
trex-10
compaqtor-10"
#clientlist=" huey-2 dewey-2 hornet-2 shabadoo-2" #FIXME ADJUST
clientlist=" box-200 washer-200 huey-200 dewey-200 hornet-200 shabadoo-200 louie-200"
#clientlist=" box-2 huey-2 "
#clientlist="washer-200 huey-200 dewey-200 hornet-200 "
html_head "SSL Distributed Stress Test"
testname="SSL distributed Stress test"
echo cd "${CLIENTDIR}"
cd "${CLIENTDIR}"
if [ -z "CD_QADIR_SSL" ] ; then
CD_QADIR_SSL="cd $QADIR/ssl"
else
cp -r $HOSTDIR $HOSTDIR/../../../../../booboo_Solaris8/mozilla/tests_results/security
fi
#sparam=" -t 128 -D -r "
sparam=" -t 16 -D -r -r -y "
start_selfserv
for c in $clientlist
do
client=`echo $c | sed -e "s/-.*//"`
number=`echo $c | sed -e "s/.*-//"`
CLIENT_OK="TRUE"
echo $client
ping $client >/dev/null || CLIENT_OK="FALSE"
if [ "$CLIENT_OK" = "FALSE" ] ; then
echo "$SCRIPTNAME `uname -n`: $client can't be reached - skipping"
else
get_certrange $number
echo "$SCRIPTNAME `uname -n`: $RSH $client -l svbld \\ "
echo " \" $CD_QADIR_SSL ;ssl_dist_stress.sh \\"
echo " -host $HOST -certnum $CERTRANGE $IP_PARAM \" "
$RSH $client -l svbld \
" $CD_QADIR_SSL;ssl_dist_stress.sh -host $HOST -certnum $CERTRANGE $IP_PARAM " &
fi
done
echo cd "${CLIENTDIR}"
cd "${CLIENTDIR}"
sleep 500 # give the clients time to finish #FIXME ADJUST
echo "GET /stop HTTP/1.0\n\n" > stdin.txt #check to make sure it has /r/n
echo "tstclnt -h $HOSTADDR -p 8443 -d ${P_R_CLIENTDIR} -n TestUser0 "
echo " -w nss -f < stdin.txt"
${BINDIR}/tstclnt -h $HOSTADDR -p 8443 -d ${P_R_CLIENTDIR} -n TestUser0 \
-w nss -f < stdin.txt
html_msg 0 0 "${testname}"
html "</TABLE><BR>"
}
############################ get_certrange #############################
# local shell function to find the range of certs that the next remote
# client is supposed to use (only for server side of the dist stress test
########################################################################
get_certrange()
{
rangeOK=`echo $1 | sed -e 's/[0-9][0-9]*/OK/'`
if [ -z "$rangeOK" -o "$rangeOK" != "OK" -o $1 = "OK" ] ; then
range=10
echo "$SCRIPTNAME `uname -n`: $1 is not a valid number of certs "
echo " defaulting to 10 for $client"
else
range=$1
if [ $range -gt $GLOB_MAX_CERT ] ; then
range=$GLOB_MAX_CERT
fi
fi
if [ -z "$FROM_CERT" ] ; then # start new on top of the cert stack
FROM_CERT=$GLOB_MAX_CERT
elif [ `expr $FROM_CERT - $range + 1 ` -lt 0 ] ; then
FROM_CERT=$GLOB_MAX_CERT # dont let it fall below 0 on the TO_CERT
fi
TO_CERT=`expr $FROM_CERT - $range + 1 `
if [ $TO_CERT -lt 0 ] ; then # it's not that I'm bad in math, I just
TO_CERT=0 # don't trust expr...
fi
CERTRANGE="${TO_CERT}-${FROM_CERT}"
FROM_CERT=`expr ${TO_CERT} - 1 ` #start the next client one below
}
################## main #################################################
DO_DIST_ST="TRUE"
. ./ssl.sh
ssl_ds_init $*
if [ -n "$DO_REM_ST" -a "$DO_REM_ST" = "TRUE" ] ; then
ssl_ds_rem_stress
exit 0 #no cleanup on purpose
elif [ -n "$DO_DIST_ST" -a "$DO_DIST_ST" = "TRUE" ] ; then
ssl_ds_dist_stress
fi
ssl_cleanup
|