Blame nss/tests/ssl/ssl_dist_stress.sh

Packit 40b132
#! /bin/bash
Packit 40b132
#
Packit 40b132
# This Source Code Form is subject to the terms of the Mozilla Public
Packit 40b132
# License, v. 2.0. If a copy of the MPL was not distributed with this
Packit 40b132
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
Packit 40b132
Packit 40b132
########################################################################
Packit 40b132
#
Packit 40b132
# mozilla/security/nss/tests/ssl/ssl_dist_stress.sh
Packit 40b132
#
Packit 40b132
# Script to test NSS SSL - distributed stresstest - this script needs to 
Packit 40b132
# source the regular ssl.sh (for shellfunctions, certs and variables 
Packit 40b132
# initialisation)
Packit 40b132
# create certs
Packit 40b132
# start server
Packit 40b132
# start itself via rsh on different systems to connect back to the server
Packit 40b132
# 
Packit 40b132
#
Packit 40b132
# needs to work on all Unix and Windows platforms
Packit 40b132
#
Packit 40b132
# special strings
Packit 40b132
# ---------------
Packit 40b132
#   FIXME ... known problems, search for this string
Packit 40b132
#   NOTE .... unexpected behavior
Packit 40b132
#
Packit 40b132
########################################################################
Packit 40b132
Packit 40b132
############################## ssl_ds_init #############################
Packit 40b132
# local shell function to initialize this script
Packit 40b132
########################################################################
Packit 40b132
ssl_ds_init()
Packit 40b132
{
Packit 40b132
  if [ -z "$GLOB_MIN_CERT" ] ; then
Packit 40b132
      GLOB_MIN_CERT=0
Packit 40b132
  fi
Packit 40b132
  if [ -z "$GLOB_MAX_CERT" ] ; then
Packit 40b132
      GLOB_MAX_CERT=200
Packit 40b132
  fi
Packit 40b132
  IP_PARAM=""
Packit 40b132
  CD_QADIR_SSL=""
Packit 40b132
Packit 40b132
Packit 40b132
  if [ -n "$1" ] ; then
Packit 40b132
      ssl_ds_eval_opts $*
Packit 40b132
  fi
Packit 40b132
  SCRIPTNAME=ssl_dist_stress.sh      # sourced - $0 would point to all.sh
Packit 40b132
Packit 40b132
  if [ -z "${CLEANUP}" ] ; then     # if nobody else is responsible for
Packit 40b132
      CLEANUP="${SCRIPTNAME}"       # cleaning this script will do it
Packit 40b132
  fi
Packit 40b132
  
Packit 40b132
  ssl_init  # let some other script do the hard work (initialize, generate certs, ...
Packit 40b132
Packit 40b132
  SCRIPTNAME=ssl_dist_stress.sh
Packit 40b132
  echo "$SCRIPTNAME: SSL distributed stress tests ==============================="
Packit 40b132
Packit 40b132
}
Packit 40b132
Packit 40b132
######################### ssl_ds_usage #################################
Packit 40b132
# local shell function to explain the usage
Packit 40b132
########################################################################
Packit 40b132
ssl_ds_usage()
Packit 40b132
{
Packit 40b132
  echo "Usage: `basename $1`"
Packit 40b132
  echo "        -host hostname "
Packit 40b132
  echo "           ...host who runs the server, for distributed stress test"
Packit 40b132
  echo "        -stress "
Packit 40b132
  echo "           ...runs the server sider of the distributed stress test"
Packit 40b132
  echo "        -dir unixdirectory "
Packit 40b132
  echo "           ...lets the server side of the distributed stress test"
Packit 40b132
  echo "              know where to find the scritp to start on the remote side"
Packit 40b132
  echo "        -certnum start-end"
Packit 40b132
  echo "           ... provides the range of certs for distributed stress test"
Packit 40b132
  echo "               for example -certnum 10-20 will connect 10 times"
Packit 40b132
  echo "               no blanks in the range string (not 10 - 20)"
Packit 40b132
  echo "               valid range ${GLOB_MIN_CERT}-${GLOB_MAX_CERT}"
Packit 40b132
  echo "        -? ...prints this text"
Packit 40b132
  exit 1 #does not need to be Exit, very early in script
Packit 40b132
}
Packit 40b132
Packit 40b132
######################### ssl_ds_eval_opts #############################
Packit 40b132
# local shell function to deal with options and parameters
Packit 40b132
########################################################################
Packit 40b132
ssl_ds_eval_opts()
Packit 40b132
{
Packit 40b132
    #use $0 not $SCRIPTNAM
Packit 40b132
Packit 40b132
  while [ -n "$1" ]
Packit 40b132
  do
Packit 40b132
    case $1 in
Packit 40b132
        -host)
Packit 40b132
            BUILD_OPT=1
Packit 40b132
            export BUILD_OPT
Packit 40b132
            DO_REM_ST="TRUE"
Packit 40b132
            shift
Packit 40b132
            SERVERHOST=$1
Packit 40b132
            HOST=$1
Packit 40b132
            if [ -z $SERVERHOST ] ; then
Packit 40b132
                echo "$0 `uname -n`: -host requires hostname"
Packit 40b132
                ssl_ds_usage
Packit 40b132
            fi
Packit 40b132
            echo "$0 `uname -n`: host $HOST ($1)"
Packit 40b132
            ;;
Packit 40b132
        -certn*)
Packit 40b132
            shift
Packit 40b132
            rangeOK=`echo $1  | sed -e 's/[0-9][0-9]*-[0-9][0-9]*/OK/'`
Packit 40b132
            MIN_CERT=`echo $1 | sed -e 's/-[0-9][0-9]*//' -e 's/^00*//'`
Packit 40b132
            MAX_CERT=`echo $1 | sed -e 's/[0-9][0-9]*-//' -e 's/^00*//'`
Packit 40b132
            if [ -z "$rangeOK" -o "$rangeOK" != "OK" -o \
Packit 40b132
                         -z "$MIN_CERT" -o -z "$MAX_CERT" -o \
Packit 40b132
                        "$MIN_CERT" -gt "$MAX_CERT" -o \
Packit 40b132
                        "$MIN_CERT" -lt "$GLOB_MIN_CERT" -o \
Packit 40b132
                        "$MAX_CERT" -gt "$GLOB_MAX_CERT" ] ; then
Packit 40b132
                echo "$0 `uname -n`: -certn range not valid"
Packit 40b132
                ssl_ds_usage
Packit 40b132
            fi
Packit 40b132
            echo "$0 `uname -n`: will use certs from $MIN_CERT to $MAX_CERT"
Packit 40b132
            ;;
Packit 40b132
        -server|-stress|-dist*st*)
Packit 40b132
            BUILD_OPT=1
Packit 40b132
            export BUILD_OPT
Packit 40b132
            DO_DIST_ST="TRUE"
Packit 40b132
            ;;
Packit 40b132
        -dir|-unixdir|-uxdir|-qadir)
Packit 40b132
            shift
Packit 40b132
            UX_DIR=$1
Packit 40b132
	    #FIXME - we need a default unixdir
Packit 40b132
            if [ -z "$UX_DIR" ] ; then # -o ! -d "$UX_DIR" ] ; then can't do, Win doesn't know...
Packit 40b132
                echo "$0 `uname -n`: -dir requires directoryname "
Packit 40b132
                ssl_ds_usage
Packit 40b132
            fi
Packit 40b132
            CD_QADIR_SSL="cd $UX_DIR"
Packit 40b132
            ;;
Packit 40b132
        -ip*)
Packit 40b132
            shift
Packit 40b132
            IP_ADDRESS=$1
Packit 40b132
            if [ -z "$IP_ADDRESS" ] ; then
Packit 40b132
                echo "$0 `uname -n`: -ip requires ip-address "
Packit 40b132
                ssl_ds_usage
Packit 40b132
            fi
Packit 40b132
            USE_IP=TRUE
Packit 40b132
            IP_PARAM="-ip $IP_ADDRESS"
Packit 40b132
            ;;
Packit 40b132
        -h|-help|"-?"|*)
Packit 40b132
            ssl_ds_usage
Packit 40b132
            ;;
Packit 40b132
    esac
Packit 40b132
    shift
Packit 40b132
  done
Packit 40b132
}
Packit 40b132
Packit 40b132
############################## ssl_ds_rem_stress #######################
Packit 40b132
# local shell function to perform the client part of the SSL stress test
Packit 40b132
########################################################################
Packit 40b132
Packit 40b132
ssl_ds_rem_stress()
Packit 40b132
{
Packit 40b132
  testname="SSL remote part of Stress test (`uname -n`)"
Packit 40b132
  echo "$SCRIPTNAME `uname -n`: $testname"
Packit 40b132
Packit 40b132
  #cp -r "${CLIENTDIR}" /tmp/ssl_ds.$$ #FIXME
Packit 40b132
  #cd /tmp/ssl_ds.$$
Packit 40b132
  #verbose="-v"
Packit 40b132
Packit 40b132
  cd ${CLIENTDIR}
Packit 40b132
Packit 40b132
  CONTINUE=$MAX_CERT
Packit 40b132
  while [ $CONTINUE -ge $MIN_CERT ]
Packit 40b132
  do
Packit 40b132
      echo "strsclnt -D -p ${PORT} -d ${P_R_CLIENTDIR} -w nss -c 1 $verbose  "
Packit 40b132
      echo "         -n TestUser$CONTINUE ${HOSTADDR} #`uname -n`"
Packit 40b132
      ${BINDIR}/strsclnt -D -p ${PORT} -d . -w nss -c 1 $verbose  \
Packit 40b132
               -n "TestUser$CONTINUE" ${HOSTADDR} &
Packit 40b132
               #${HOSTADDR} &
Packit 40b132
      CONTINUE=`expr $CONTINUE - 1 `
Packit 40b132
      #sleep 4 #give process time to start up
Packit 40b132
  done
Packit 40b132
Packit 40b132
  html_msg 0 0 "${testname}" #FIXME
Packit 40b132
}
Packit 40b132
Packit 40b132
######################### ssl_ds_dist_stress ###########################
Packit 40b132
# local shell function to perform the server part of the new, distributed 
Packit 40b132
# SSL stress test
Packit 40b132
########################################################################
Packit 40b132
Packit 40b132
ssl_ds_dist_stress()
Packit 40b132
{
Packit 40b132
  max_clientlist=" 
Packit 40b132
               box-200
Packit 40b132
               washer-200
Packit 40b132
               dryer-200
Packit 40b132
               hornet-50
Packit 40b132
               shabadoo-50
Packit 40b132
               y2sun2-10
Packit 40b132
               galileo-10
Packit 40b132
               shame-10
Packit 40b132
               axilla-10
Packit 40b132
               columbus-10
Packit 40b132
               smarch-10
Packit 40b132
               nugget-10
Packit 40b132
               charm-10
Packit 40b132
               hp64-10
Packit 40b132
               biggayal-10
Packit 40b132
               orville-10
Packit 40b132
               kwyjibo-10
Packit 40b132
               hbombaix-10
Packit 40b132
               raven-10
Packit 40b132
               jordan-10
Packit 40b132
               phaedrus-10
Packit 40b132
               louie-10
Packit 40b132
               trex-10
Packit 40b132
               compaqtor-10"
Packit 40b132
Packit 40b132
  #clientlist=" huey-2 dewey-2 hornet-2 shabadoo-2" #FIXME ADJUST
Packit 40b132
  clientlist="  box-200 washer-200 huey-200 dewey-200 hornet-200 shabadoo-200 louie-200"
Packit 40b132
  #clientlist="  box-2 huey-2 "
Packit 40b132
  #clientlist="washer-200 huey-200 dewey-200 hornet-200 "
Packit 40b132
Packit 40b132
  html_head "SSL Distributed Stress Test"
Packit 40b132
Packit 40b132
  testname="SSL distributed Stress test"
Packit 40b132
Packit 40b132
  echo cd "${CLIENTDIR}"
Packit 40b132
  cd "${CLIENTDIR}"
Packit 40b132
  if [ -z "CD_QADIR_SSL" ] ; then
Packit 40b132
      CD_QADIR_SSL="cd $QADIR/ssl"
Packit 40b132
  else
Packit 40b132
      cp -r $HOSTDIR $HOSTDIR/../../../../../booboo_Solaris8/mozilla/tests_results/security
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  #sparam=" -t 128 -D -r "
Packit 40b132
  sparam=" -t 16 -D -r -r -y "
Packit 40b132
  start_selfserv
Packit 40b132
Packit 40b132
  for c in $clientlist
Packit 40b132
  do
Packit 40b132
      client=`echo $c | sed -e "s/-.*//"`
Packit 40b132
      number=`echo $c | sed -e "s/.*-//"`
Packit 40b132
      CLIENT_OK="TRUE"
Packit 40b132
      echo $client
Packit 40b132
      ping $client >/dev/null || CLIENT_OK="FALSE"
Packit 40b132
      if [ "$CLIENT_OK" = "FALSE" ] ; then
Packit 40b132
          echo "$SCRIPTNAME `uname -n`: $client can't be reached - skipping"
Packit 40b132
      else
Packit 40b132
          get_certrange $number
Packit 40b132
          echo "$SCRIPTNAME `uname -n`: $RSH $client -l svbld \\ "
Packit 40b132
          echo "       \" $CD_QADIR_SSL ;ssl_dist_stress.sh \\"
Packit 40b132
          echo "            -host $HOST -certnum $CERTRANGE $IP_PARAM \" "
Packit 40b132
          $RSH $client -l svbld \
Packit 40b132
               " $CD_QADIR_SSL;ssl_dist_stress.sh -host $HOST -certnum $CERTRANGE $IP_PARAM " &
Packit 40b132
      fi
Packit 40b132
  done
Packit 40b132
Packit 40b132
  echo cd "${CLIENTDIR}"
Packit 40b132
  cd "${CLIENTDIR}"
Packit 40b132
Packit 40b132
  sleep 500 # give the clients time to finish #FIXME ADJUST
Packit 40b132
 
Packit 40b132
  echo "GET /stop HTTP/1.0\n\n" > stdin.txt #check to make sure it has /r/n
Packit 40b132
  echo "tstclnt -h $HOSTADDR -p  8443 -d ${P_R_CLIENTDIR} -n TestUser0 "
Packit 40b132
  echo "        -w nss -f < stdin.txt"
Packit 40b132
  ${BINDIR}/tstclnt -h $HOSTADDR -p  8443 -d ${P_R_CLIENTDIR} -n TestUser0 \
Packit 40b132
	  -w nss -f < stdin.txt
Packit 40b132
  
Packit 40b132
  html_msg 0 0 "${testname}"
Packit 40b132
  html "
"
Packit 40b132
}
Packit 40b132
Packit 40b132
############################ get_certrange #############################
Packit 40b132
# local shell function to find the range of certs that the next remote 
Packit 40b132
# client is supposed to use (only for server side of the dist stress test
Packit 40b132
########################################################################
Packit 40b132
get_certrange()
Packit 40b132
{
Packit 40b132
  rangeOK=`echo $1  | sed -e 's/[0-9][0-9]*/OK/'`
Packit 40b132
  if [ -z "$rangeOK" -o "$rangeOK" != "OK" -o $1 = "OK" ] ; then
Packit 40b132
      range=10
Packit 40b132
      echo "$SCRIPTNAME `uname -n`: $1 is not a valid number of certs "
Packit 40b132
      echo "        defaulting to 10 for $client"
Packit 40b132
  else
Packit 40b132
      range=$1
Packit 40b132
      if [ $range -gt $GLOB_MAX_CERT ] ; then
Packit 40b132
          range=$GLOB_MAX_CERT
Packit 40b132
      fi
Packit 40b132
  fi
Packit 40b132
  if [ -z "$FROM_CERT" ] ; then    # start new on top of the cert stack
Packit 40b132
      FROM_CERT=$GLOB_MAX_CERT
Packit 40b132
  elif [ `expr $FROM_CERT - $range + 1 ` -lt  0 ] ; then 
Packit 40b132
          FROM_CERT=$GLOB_MAX_CERT # dont let it fall below 0 on the TO_CERT
Packit 40b132
Packit 40b132
  fi
Packit 40b132
  TO_CERT=`expr $FROM_CERT - $range + 1 `
Packit 40b132
  if [ $TO_CERT -lt 0 ] ; then     # it's not that I'm bad in math, I just 
Packit 40b132
      TO_CERT=0                    # don't trust expr...
Packit 40b132
  fi
Packit 40b132
  CERTRANGE="${TO_CERT}-${FROM_CERT}"
Packit 40b132
  FROM_CERT=`expr ${TO_CERT} - 1 ` #start the next  client one below 
Packit 40b132
}
Packit 40b132
Packit 40b132
Packit 40b132
################## main #################################################
Packit 40b132
Packit 40b132
DO_DIST_ST="TRUE"
Packit 40b132
. ./ssl.sh
Packit 40b132
ssl_ds_init $*
Packit 40b132
if [ -n  "$DO_REM_ST" -a "$DO_REM_ST" = "TRUE" ] ; then
Packit 40b132
    ssl_ds_rem_stress
Packit 40b132
    exit 0 #no cleanup on purpose
Packit 40b132
elif [ -n  "$DO_DIST_ST" -a "$DO_DIST_ST" = "TRUE" ] ; then
Packit 40b132
    ssl_ds_dist_stress
Packit 40b132
fi
Packit 40b132
ssl_cleanup