security/nss/tests/ssl/ssl_dist_stress.sh

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rwxr-xr-x

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 #! /bin/bash
     2 #
     3 # This Source Code Form is subject to the terms of the Mozilla Public
     4 # License, v. 2.0. If a copy of the MPL was not distributed with this
     5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
     7 ########################################################################
     8 #
     9 # mozilla/security/nss/tests/ssl/ssl_dist_stress.sh
    10 #
    11 # Script to test NSS SSL - distributed stresstest - this script needs to 
    12 # source the regular ssl.sh (for shellfunctions, certs and variables 
    13 # initialisation)
    14 # create certs
    15 # start server
    16 # start itself via rsh on different systems to connect back to the server
    17 # 
    18 #
    19 # needs to work on all Unix and Windows platforms
    20 #
    21 # special strings
    22 # ---------------
    23 #   FIXME ... known problems, search for this string
    24 #   NOTE .... unexpected behavior
    25 #
    26 ########################################################################
    28 ############################## ssl_ds_init #############################
    29 # local shell function to initialize this script
    30 ########################################################################
    31 ssl_ds_init()
    32 {
    33   if [ -z "$GLOB_MIN_CERT" ] ; then
    34       GLOB_MIN_CERT=0
    35   fi
    36   if [ -z "$GLOB_MAX_CERT" ] ; then
    37       GLOB_MAX_CERT=200
    38   fi
    39   IP_PARAM=""
    40   CD_QADIR_SSL=""
    43   if [ -n "$1" ] ; then
    44       ssl_ds_eval_opts $*
    45   fi
    46   SCRIPTNAME=ssl_dist_stress.sh      # sourced - $0 would point to all.sh
    48   if [ -z "${CLEANUP}" ] ; then     # if nobody else is responsible for
    49       CLEANUP="${SCRIPTNAME}"       # cleaning this script will do it
    50   fi
    52   ssl_init  # let some other script do the hard work (initialize, generate certs, ...
    54   SCRIPTNAME=ssl_dist_stress.sh
    55   echo "$SCRIPTNAME: SSL distributed stress tests ==============================="
    57 }
    59 ######################### ssl_ds_usage #################################
    60 # local shell function to explain the usage
    61 ########################################################################
    62 ssl_ds_usage()
    63 {
    64   echo "Usage: `basename $1`"
    65   echo "        -host hostname "
    66   echo "           ...host who runs the server, for distributed stress test"
    67   echo "        -stress "
    68   echo "           ...runs the server sider of the distributed stress test"
    69   echo "        -dir unixdirectory "
    70   echo "           ...lets the server side of the distributed stress test"
    71   echo "              know where to find the scritp to start on the remote side"
    72   echo "        -certnum start-end"
    73   echo "           ... provides the range of certs for distributed stress test"
    74   echo "               for example -certnum 10-20 will connect 10 times"
    75   echo "               no blanks in the range string (not 10 - 20)"
    76   echo "               valid range ${GLOB_MIN_CERT}-${GLOB_MAX_CERT}"
    77   echo "        -? ...prints this text"
    78   exit 1 #does not need to be Exit, very early in script
    79 }
    81 ######################### ssl_ds_eval_opts #############################
    82 # local shell function to deal with options and parameters
    83 ########################################################################
    84 ssl_ds_eval_opts()
    85 {
    86     #use $0 not $SCRIPTNAM<E, too early, SCRIPTNAME not yet set
    88   while [ -n "$1" ]
    89   do
    90     case $1 in
    91         -host)
    92             BUILD_OPT=1
    93             export BUILD_OPT
    94             DO_REM_ST="TRUE"
    95             shift
    96             SERVERHOST=$1
    97             HOST=$1
    98             if [ -z $SERVERHOST ] ; then
    99                 echo "$0 `uname -n`: -host requires hostname"
   100                 ssl_ds_usage
   101             fi
   102             echo "$0 `uname -n`: host $HOST ($1)"
   103             ;;
   104         -certn*)
   105             shift
   106             rangeOK=`echo $1  | sed -e 's/[0-9][0-9]*-[0-9][0-9]*/OK/'`
   107             MIN_CERT=`echo $1 | sed -e 's/-[0-9][0-9]*//' -e 's/^00*//'`
   108             MAX_CERT=`echo $1 | sed -e 's/[0-9][0-9]*-//' -e 's/^00*//'`
   109             if [ -z "$rangeOK" -o "$rangeOK" != "OK" -o \
   110                          -z "$MIN_CERT" -o -z "$MAX_CERT" -o \
   111                         "$MIN_CERT" -gt "$MAX_CERT" -o \
   112                         "$MIN_CERT" -lt "$GLOB_MIN_CERT" -o \
   113                         "$MAX_CERT" -gt "$GLOB_MAX_CERT" ] ; then
   114                 echo "$0 `uname -n`: -certn range not valid"
   115                 ssl_ds_usage
   116             fi
   117             echo "$0 `uname -n`: will use certs from $MIN_CERT to $MAX_CERT"
   118             ;;
   119         -server|-stress|-dist*st*)
   120             BUILD_OPT=1
   121             export BUILD_OPT
   122             DO_DIST_ST="TRUE"
   123             ;;
   124         -dir|-unixdir|-uxdir|-qadir)
   125             shift
   126             UX_DIR=$1
   127 	    #FIXME - we need a default unixdir
   128             if [ -z "$UX_DIR" ] ; then # -o ! -d "$UX_DIR" ] ; then can't do, Win doesn't know...
   129                 echo "$0 `uname -n`: -dir requires directoryname "
   130                 ssl_ds_usage
   131             fi
   132             CD_QADIR_SSL="cd $UX_DIR"
   133             ;;
   134         -ip*)
   135             shift
   136             IP_ADDRESS=$1
   137             if [ -z "$IP_ADDRESS" ] ; then
   138                 echo "$0 `uname -n`: -ip requires ip-address "
   139                 ssl_ds_usage
   140             fi
   141             USE_IP=TRUE
   142             IP_PARAM="-ip $IP_ADDRESS"
   143             ;;
   144         -h|-help|"-?"|*)
   145             ssl_ds_usage
   146             ;;
   147     esac
   148     shift
   149   done
   150 }
   152 ############################## ssl_ds_rem_stress #######################
   153 # local shell function to perform the client part of the SSL stress test
   154 ########################################################################
   156 ssl_ds_rem_stress()
   157 {
   158   testname="SSL remote part of Stress test (`uname -n`)"
   159   echo "$SCRIPTNAME `uname -n`: $testname"
   161   #cp -r "${CLIENTDIR}" /tmp/ssl_ds.$$ #FIXME
   162   #cd /tmp/ssl_ds.$$
   163   #verbose="-v"
   165   cd ${CLIENTDIR}
   167   CONTINUE=$MAX_CERT
   168   while [ $CONTINUE -ge $MIN_CERT ]
   169   do
   170       echo "strsclnt -D -p ${PORT} -d ${P_R_CLIENTDIR} -w nss -c 1 $verbose  "
   171       echo "         -n TestUser$CONTINUE ${HOSTADDR} #`uname -n`"
   172       ${BINDIR}/strsclnt -D -p ${PORT} -d . -w nss -c 1 $verbose  \
   173                -n "TestUser$CONTINUE" ${HOSTADDR} &
   174                #${HOSTADDR} &
   175       CONTINUE=`expr $CONTINUE - 1 `
   176       #sleep 4 #give process time to start up
   177   done
   179   html_msg 0 0 "${testname}" #FIXME
   180 }
   182 ######################### ssl_ds_dist_stress ###########################
   183 # local shell function to perform the server part of the new, distributed 
   184 # SSL stress test
   185 ########################################################################
   187 ssl_ds_dist_stress()
   188 {
   189   max_clientlist=" 
   190                box-200
   191                washer-200
   192                dryer-200
   193                hornet-50
   194                shabadoo-50
   195                y2sun2-10
   196                galileo-10
   197                shame-10
   198                axilla-10
   199                columbus-10
   200                smarch-10
   201                nugget-10
   202                charm-10
   203                hp64-10
   204                biggayal-10
   205                orville-10
   206                kwyjibo-10
   207                hbombaix-10
   208                raven-10
   209                jordan-10
   210                phaedrus-10
   211                louie-10
   212                trex-10
   213                compaqtor-10"
   215   #clientlist=" huey-2 dewey-2 hornet-2 shabadoo-2" #FIXME ADJUST
   216   clientlist="  box-200 washer-200 huey-200 dewey-200 hornet-200 shabadoo-200 louie-200"
   217   #clientlist="  box-2 huey-2 "
   218   #clientlist="washer-200 huey-200 dewey-200 hornet-200 "
   220   html_head "SSL Distributed Stress Test"
   222   testname="SSL distributed Stress test"
   224   echo cd "${CLIENTDIR}"
   225   cd "${CLIENTDIR}"
   226   if [ -z "CD_QADIR_SSL" ] ; then
   227       CD_QADIR_SSL="cd $QADIR/ssl"
   228   else
   229       cp -r $HOSTDIR $HOSTDIR/../../../../../booboo_Solaris8/mozilla/tests_results/security
   230   fi
   232   #sparam=" -t 128 -D -r "
   233   sparam=" -t 16 -D -r -r -y "
   234   start_selfserv
   236   for c in $clientlist
   237   do
   238       client=`echo $c | sed -e "s/-.*//"`
   239       number=`echo $c | sed -e "s/.*-//"`
   240       CLIENT_OK="TRUE"
   241       echo $client
   242       ping $client >/dev/null || CLIENT_OK="FALSE"
   243       if [ "$CLIENT_OK" = "FALSE" ] ; then
   244           echo "$SCRIPTNAME `uname -n`: $client can't be reached - skipping"
   245       else
   246           get_certrange $number
   247           echo "$SCRIPTNAME `uname -n`: $RSH $client -l svbld \\ "
   248           echo "       \" $CD_QADIR_SSL ;ssl_dist_stress.sh \\"
   249           echo "            -host $HOST -certnum $CERTRANGE $IP_PARAM \" "
   250           $RSH $client -l svbld \
   251                " $CD_QADIR_SSL;ssl_dist_stress.sh -host $HOST -certnum $CERTRANGE $IP_PARAM " &
   252       fi
   253   done
   255   echo cd "${CLIENTDIR}"
   256   cd "${CLIENTDIR}"
   258   sleep 500 # give the clients time to finish #FIXME ADJUST
   260   echo "GET /stop HTTP/1.0\n\n" > stdin.txt #check to make sure it has /r/n
   261   echo "tstclnt -h $HOSTADDR -p  8443 -d ${P_R_CLIENTDIR} -n TestUser0 "
   262   echo "        -w nss -f < stdin.txt"
   263   ${BINDIR}/tstclnt -h $HOSTADDR -p  8443 -d ${P_R_CLIENTDIR} -n TestUser0 \
   264 	  -w nss -f < stdin.txt
   266   html_msg 0 0 "${testname}"
   267   html "</TABLE><BR>"
   268 }
   270 ############################ get_certrange #############################
   271 # local shell function to find the range of certs that the next remote 
   272 # client is supposed to use (only for server side of the dist stress test
   273 ########################################################################
   274 get_certrange()
   275 {
   276   rangeOK=`echo $1  | sed -e 's/[0-9][0-9]*/OK/'`
   277   if [ -z "$rangeOK" -o "$rangeOK" != "OK" -o $1 = "OK" ] ; then
   278       range=10
   279       echo "$SCRIPTNAME `uname -n`: $1 is not a valid number of certs "
   280       echo "        defaulting to 10 for $client"
   281   else
   282       range=$1
   283       if [ $range -gt $GLOB_MAX_CERT ] ; then
   284           range=$GLOB_MAX_CERT
   285       fi
   286   fi
   287   if [ -z "$FROM_CERT" ] ; then    # start new on top of the cert stack
   288       FROM_CERT=$GLOB_MAX_CERT
   289   elif [ `expr $FROM_CERT - $range + 1 ` -lt  0 ] ; then 
   290           FROM_CERT=$GLOB_MAX_CERT # dont let it fall below 0 on the TO_CERT
   292   fi
   293   TO_CERT=`expr $FROM_CERT - $range + 1 `
   294   if [ $TO_CERT -lt 0 ] ; then     # it's not that I'm bad in math, I just 
   295       TO_CERT=0                    # don't trust expr...
   296   fi
   297   CERTRANGE="${TO_CERT}-${FROM_CERT}"
   298   FROM_CERT=`expr ${TO_CERT} - 1 ` #start the next  client one below 
   299 }
   302 ################## main #################################################
   304 DO_DIST_ST="TRUE"
   305 . ./ssl.sh
   306 ssl_ds_init $*
   307 if [ -n  "$DO_REM_ST" -a "$DO_REM_ST" = "TRUE" ] ; then
   308     ssl_ds_rem_stress
   309     exit 0 #no cleanup on purpose
   310 elif [ -n  "$DO_DIST_ST" -a "$DO_DIST_ST" = "TRUE" ] ; then
   311     ssl_ds_dist_stress
   312 fi
   313 ssl_cleanup

mercurial