#!/bin/sh
# $Id: t-ssar-0.sh,v 1.4 2007/10/10 02:36:52 ca Exp $
#
# ----------------------------------------
# test killing smar to cause an smtps error
# ----------------------------------------
#
test -s stop && exit 1
#

if test X"${MTA_NO_SLOW_TEST}" != "X"
then
  echo "SKIPPED: $0: MTA_NO_SLOW_TEST is set"
  exit 0
fi

if test X"`uname`" = "XLinux"
then
  echo "SKIPPED: $0: on Linux, needs POSIX conformant pthread implementation"
  exit 0
fi

SD=`dirname $0`
if test "${SD}" = "."
then
   SD=../chkmts
fi

ERRS=0
OUT="t-ssar-0.out"
OUT1="t-ssar-0-1.out"
# debug flags
D="-d 7"

if test X"`uname`" != "XOSF1"
then
while getopts s:V FLAG
do
  case "${FLAG}" in
    s) SKIP="${SKIP} ${OPTARG}";;
    V) VERBOSE=true;;
  esac
done
shift `expr ${OPTIND} - 1`
fi

# cd to working directory
cd ../qmgr || exit 1
rm -f ${MTMAP}
# setup/initialize system
. ${SD}/mta-setup.sh
SRCPRG=${STE}/smtpc2

rm -f ${QMGRCONFMAP} ${ALIMAP} ${ACCMAP} ${OUT} ${OUT1}

killit()
{
if test -s ${PIDS}
then
  # stop MTA components
  for i in `${CAT} ${PIDS}`
  do
    kill ${i}
  done
fi
# ----------------
# thanks kids for not following the POSIX standard...
if test X"`uname`" = "XLinux"
then
  killall qmgr smar
fi
if test X"${SRVPID}" != "X"
then
  kill -TERM ${SRVPID}
fi
exit 1
}

# version of output files
V=0
# path to programs
P=..
export P
rm -f ${PIDS}
trap killit 2 15

${P}/smar/smar ${D} > a${V}.log 2>&1 &
echo $! >> ${PIDS}
SMARPID=$!
${P}/qmgr/qmgr -D 20 -w ${W4S} -W ${W4C} ${D} > q${V}.log 2>&1 &
QMGRPID=$!
echo $! >> ${PIDS}
${P}/smtpc/smtpc -v 12 -w ${W4S} -P ${SNKPORT} > c${V}.log 2>&1 &
echo $! >> ${PIDS}
${P}/smtps/smtps -w ${W4S} ${D} -b localhost:${SRVPORT} > s${V}.log 2>&1 &
SMTPSPID=$!
echo $! >> ${PIDS}

# start SMTP sink
${STE}/smtps2 -b ${H}:${SNKPORT} > ${SRVL} 2>&1 &
status=$?
SRVPID=$!
echo $! >> ${PIDS}
if test "x${status}" != "x0"
then
  echo "$0: FAIL: cannot start server ${status}"
  exit ${status}
fi
sleep 1

# check that the MTA is running
${CHKD}/mta-running.sh ${SRVPORT} || killit

# ----------------------------------------
# test: send a message, stop smar, send more messages

TEST=1
if echo " ${SKIP} X" | ${GREP} -v " ${TEST} " > /dev/null
then
ERR=false

  if ${SRCPRG} -r ${H}:${SRVPORT} -f"s1@b.c" -R"r1@y.z" > ${CLTL} 2>&1
  then
    sleep 2

    kill -STOP ${SMARPID}
    sleep 2

    MSGS=1000
    if ${SRCPRG} -r ${H}:${SRVPORT} -m ${MSGS} -s ${MSGS} -Fb.c -Yy.z >> ${CLTL} 2>&1
    then
      if ${GREP} 'sev=ERROR, .*, status=forcing_shutdown' s${V}.log >/dev/null
      then
        :
      else
        echo "$0: test ${TEST}: missing forcing_shutdown in s${V}.log"
        ERR=true
      fi
    else
      ${CAT} ${CLTL}
      ERR=true
    fi
    # XREF TMO_W4A2S=20; need to wait until smtps times out waiting for smar
    sleep 22

    if kill -USR1 ${SMTPSPID}
    then
      echo "$0: test ${TEST}: smtps did not terminate"
      ERR=true
      if ${VERBOSE}
      then
        ps -p ${SMTPSPID}
      fi
    fi

  else
    ${CAT} ${CLTL}
    ERR=true
  fi
  kill -CONT ${SMARPID}

if ${ERR}
then
   echo "$0: test ${TEST} failed"
   ERRS=`expr ${ERRS} + 1 `
fi
fi

# ----------------------------------------
# stop system
if test -s ${PIDS}
then
  # stop MTA components
  for i in `${CAT} ${PIDS}`
  do
    kill ${i}
  done
fi
# ----------------
# thanks kids for not following the POSIX standard...
if test X"`uname`" = "XLinux"
then
  killall qmgr smar
fi
rm -f ${PIDS}

# ----------------------------------------
# end
if test "${ERRS}" = "0"
then
  exit 0
else
  echo "${ERRS} error(s)"
  exit 1
fi


syntax highlighted by Code2HTML, v. 0.9.1