Skip to content
runtests.sh 3.01 KiB
Newer Older
Daniel Stenberg's avatar
Daniel Stenberg committed
#!/bin/sh
#
# Main curl test script
#
#######################################################################
# These should be the only variables that might be needed to get edited:

HOSTIP=127.0.0.1
HOSTPORT=8999
CURL=../src/curl
LOGDIR=log
SERVERIN=$LOGDIR/server.input
CURLOUT=$LOGDIR/curl.out
NC=nc

# Normally, all test cases should be run, but at times it is handy to
# simply run a particular one:
TESTCASES=" 1 2 3 4"


compare () {
  # filter off the $4 pattern before compare!

  first="$1"
  sec="$2"
  text="$3"
  strip="$4"

  if test -n "$strip"; then
    egrep -v "$strip" < $first > $LOGDIR/generated.tmp
    egrep -v "$strip" < $sec > $LOGDIR/stored.tmp

    first="$LOGDIR/generated.tmp"
    sec="$LOGDIR/stored.tmp"
  fi

  cmp $first $sec
  if [ $? != "0" ]; then
    echo " $text FAILED"
    return 1
  else
    echo " $text OK"
    return 0
  fi
}

singletest ()
{
  NUMBER="$1"

  REPLY=data/reply$NUMBER.txt
  CURLCMD=data/command$NUMBER.txt
  HTTP=data/http$NUMBER.txt
  DESC=`cat data/name$NUMBER.txt | tr -d '\012'`

  echo "test $NUMBER... [$DESC]"

  ./runserv.pl $HOSTIP $HOSTPORT &

  sleep 1

  # get the command line options to use
  cmd=`sed -e "s/%HOSTIP/$HOSTIP/g" -e "s/%HOSTPORT/$HOSTPORT/g" <$CURLCMD `

  # run curl
  CMDLINE="$CURL -o $CURLOUT -i --silent $cmd"

  # we do it the eval way to deal with quotes and similar stuff
  eval $CMDLINE

  if test -n "$verbose"; then
    echo "$CMDLINE"
  fi

  if [ $? != "0" ]; then
    echo "Failed to invoke curl for test $NUMBER"
  else
    # when curl is done, the server has closed down as well

    # verify the received data
    compare $CURLOUT $REPLY " fetch"

    if [ $? != "0" ]; then
      exit;
    fi

    # verify the sent request
    compare $SERVERIN $HTTP " command" "User-Agent:"

    if [ $? != "0" ]; then
      exit;
    fi
  fi

  return 0
}


#######################################################################
# Check options to this test program
#

if test "$1" = "-v"; then
  verbose="1"
fi

if test -n "$NEWSETUP"; then

  #######################################################################
  # Make sure the Host: lines are correct for this setup
  #

  HOST="$HOSTIP:$HOSTPORT"
  for test in data/http*.txt; do
   sed -e "s/Host: \([0-9.:]*\)/Host: $HOST/g" < $test > $test.tmp
   mv $test.tmp $test
  done
fi

#######################################################################
# Output curl version being tested
#
VERSION=`$CURL -V`

echo "Running tests on:"
echo $VERSION
echo ""

#######################################################################
# remove and recreate logging directory:
#
rm -rf $LOGDIR
mkdir $LOGDIR

#######################################################################
# First, start the TCP server
#
#./runserv.pl $HOSTIP $HOSTPORT &

#if [ $? != "0" ]; then
#  echo "failed starting the TCP server"
#  exit
#fi

#sleep 1 # give it a second to start

#######################################################################
# The main test-loop
#

for NUMBER in $TESTCASES; do

  singletest $NUMBER

  # loop for next test
done