summaryrefslogtreecommitdiff
path: root/tests/ssl/ssl_dist_stress.sh
blob: a67dfcbac5cc9919cd418e6414fca2d4ec65714e (plain)
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