#! /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