Commit Diff


commit - 98b92e112a38981dcb9e3fef87ca87dd94466e63
commit + cabd09d9aee9882a3cf287bf48f88123b32b472d
blob - 31048ca2dcc61ee7b082ac51e793005afdbb1ad6
blob + e3c38ce0b7aef9b55e8d0ca77aaf5d22e55b65f7
--- src/testsuite/Makefile.am
+++ src/testsuite/Makefile.am
@@ -9,7 +9,7 @@
 # Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
 # der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
 #
-# $Id: Makefile.am,v 1.9 2002/11/10 14:28:06 alex Exp $
+# $Id: Makefile.am,v 1.9.6.1 2004/09/04 20:49:36 alex Exp $
 #
 
 AUTOMAKE_OPTIONS = ../portab/ansi2knr
@@ -17,12 +17,15 @@ AUTOMAKE_OPTIONS = ../portab/ansi2knr
 INCLUDES = -I$(srcdir)/../portab
 
 EXTRA_DIST = \
-	getpid.sh \
+	README getpid.sh \
 	start-server.sh stop-server.sh tests.sh stress-server.sh \
+	test-loop.sh wait-tests.sh \
 	connect-test.e channel-test.e mode-test.e \
 	stress-A.e stress-B.e check-idle.e \
 	ngircd-test.conf
 
+all: ngircd-TEST-Binary ${TESTS}
+
 clean-local:
 	rm -rf logs tests *-test ngircd-test.log ngircd-test.motd \
 	 T-ngircd procs.tmp 
blob - /dev/null
blob + bcc3e01f7f557ad8345e807968901a16aa60c983 (mode 644)
--- /dev/null
+++ src/testsuite/README
@@ -0,0 +1,72 @@
+
+                     ngIRCd - Next Generation IRC Server
+
+                      (c)2001-2004 by Alexander Barton,
+                    alex@barton.de, http://www.barton.de/
+
+               ngIRCd is free software and published under the
+                   terms of the GNU General Public License.
+
+		       -- README for the Test Suite --
+
+
+I. Overview
+~~~~~~~~~~~
+
+The purpose of the "test suite" contained in this directory is to detect
+bugs and incompatibilities in ngIRCd introduced during coding and after
+building ngIRCd on a specific platform.
+
+To run the "standard" tests call "make check". It will build ngIRCd (if
+required) and run some tests on it. These tests should be portable and run
+on all supported platforms without errors.
+
+Please note: most tests of this suite depend on the external tools expect(1)
+and telnet(1), so make sure you have them installed. If not, the tests will
+not fail but simply be skipped.
+
+
+II. Shell Scripts
+~~~~~~~~~~~~~~~~
+
+getpid.sh <name>
+
+	This script is used to detect the PID of the running process with
+	the given name in a portable manner. The result is echoed on the
+	console. It is a helper script for some other scripts of this suite.
+
+start-server.sh
+
+	start-server.sh starts up the test binary, "T-ngircd". It makes sure
+	that getpid.sh is available and working, and that no other instance
+	of the test binary is already running.
+	The exit code is 0 if the test binary could be started.
+
+stop-server.sh
+
+	This script uses getpid.sh to detect a running test binary "T-ngircd"
+	and then shuts it down using the TERM signal.
+	The exit code is 0 if the test binary could be stopped.
+
+stress-server.sh
+
+	...
+
+tests.sh
+
+	...
+
+
+III. Scripts for expect(1)
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+channel-test.e
+check-idle.e
+connect-test.e
+mode-test.e
+stress-A.e
+stress-B.e
+
+
+-- 
+$Id: README,v 1.1.2.1 2004/09/04 20:49:36 alex Exp $
blob - 08d79cab59c01d1ea1b6d09df0754938b5964931
blob + 551ecbbee26d112adfd3a2e6d354eeae34613c8b
--- src/testsuite/check-idle.e
+++ src/testsuite/check-idle.e
@@ -1,4 +1,4 @@
-# $Id: check-idle.e,v 1.1 2002/09/09 22:56:07 alex Exp $
+# $Id: check-idle.e,v 1.1.8.1 2004/09/04 20:49:36 alex Exp $
 
 spawn telnet localhost 6789
 expect {
@@ -10,6 +10,7 @@ send "nick IdleTest\r"
 send "user idle . . :Idle-Test\r"
 expect {
 	timeout { exit 1 }
+	"433 * IdleTest :Nickname already in use" { exit 99 }
 	"376"
 }
 
blob - 3bbbe44547b728b5ed84946152da7ee22bdacdfa
blob + a2c7c824120adb5b4672944cd1314c0c4eb8dab4
--- src/testsuite/start-server.sh
+++ src/testsuite/start-server.sh
@@ -1,10 +1,10 @@
 #!/bin/sh
 # ngIRCd Test Suite
-# $Id: start-server.sh,v 1.11 2003/08/22 11:31:18 alex Exp $
+# $Id: start-server.sh,v 1.11.2.1 2004/09/04 20:49:36 alex Exp $
 
 [ -z "$srcdir" ] && srcdir=`dirname $0`
 
-echo "      starting server ..."
+echo -n "      starting server ..."
 
 # remove old logfiles
 rm -rf logs *.log
@@ -13,14 +13,14 @@ rm -rf logs *.log
 # test-server, because we won't be able to kill it at the end of the test.
 ./getpid.sh sh > /dev/null 2>&1
 if [ $? -ne 0 ]; then
-  echo "      error: getpid.sh FAILED!"
+  echo " getpid.sh failed!"
   exit 1
 fi
 
 # check if there is a test-server already running
 ./getpid.sh T-ngircd > /dev/null 2>&1
 if [ $? -eq 0 ]; then
-  echo "      error: test-server already running!"
+  echo " failure: test-server already running!"
   exit 1
 fi
 
@@ -28,11 +28,14 @@ fi
 echo "This is an ngIRCd Test Server" > ngircd-test.motd
 
 # starting up test-server ...
-./T-ngircd -np -f ${srcdir}/ngircd-test.conf > ngircd-test.log 2>&1 &
+./T-ngircd -np -f ${srcdir}/ngircd-test.conf $* > ngircd-test.log 2>&1 &
 sleep 1
 
 # validate running test-server
 pid=`./getpid.sh T-ngircd`
-[ -n "$pid" ] && kill -0 $pid > /dev/null 2>&1 || exit 1
+[ -n "$pid" ] && kill -0 $pid > /dev/null 2>&1; r=$?
 
+[ $r -eq 0 ] && echo " ok." || echo " failure!"
+exit 
+
 # -eof-
blob - d76871b88175e63755189a1ce3f9dbf31ccb3a22
blob + 66ecdf044c50f6079f8528852e1bf2b3a84f0f0c
--- src/testsuite/stop-server.sh
+++ src/testsuite/stop-server.sh
@@ -1,25 +1,29 @@
 #!/bin/sh
 # ngIRCd Test Suite
-# $Id: stop-server.sh,v 1.10 2003/08/22 11:31:18 alex Exp $
+# $Id: stop-server.sh,v 1.10.2.1 2004/09/04 20:49:36 alex Exp $
 
 [ -z "$srcdir" ] && srcdir=`dirname $0`
 
-echo "      stopping server ..."
+echo -n "      stopping server ..."
 
 # stop test-server ...
 pid=`./getpid.sh T-ngircd`
 if [ -z "$pid" ]; then
-  echo "      no running server found!?"
+  echo " failure: no running server found!?"
   exit 1
 fi
 kill $pid > /dev/null 2>&1 || exit 1
 
 # waiting ...
 for i in 1 2 3 4 5; do
-  kill -0 $pid > /dev/null 2>&1 || exit 0
+  kill -0 $pid > /dev/null 2>&1; r=$?
+  if [ $r -eq 0 ]; then
+    echo " ok".
+    exit 0
+  fi
   sleep 1
 done
-echo "      server still running!?"
+echo " failure: server still running!?"
 exit 1
 
 # -eof-
blob - df0969b4d9353978feb602ad92f3a590344f8b22
blob + b07f5314260e8e52e55fd7fb0bffa3d51ec7e811
--- src/testsuite/stress-server.sh
+++ src/testsuite/stress-server.sh
@@ -1,15 +1,31 @@
 #!/bin/sh
+#
 # ngIRCd Test Suite
-# $Id: stress-server.sh,v 1.8 2003/08/22 11:31:18 alex Exp $
+# Copyright (c)2002-2004 by Alexander Barton (alex@barton.de)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# Please read the file COPYING, README and AUTHORS for more information.
+#
+# $Id: stress-server.sh,v 1.8.2.1 2004/09/04 20:49:36 alex Exp $
+#
 
+# detect source directory
 [ -z "$srcdir" ] && srcdir=`dirname $0`
 
+# parse command line
 [ "$1" -gt 0 ] 2> /dev/null && CLIENTS="$1" || CLIENTS=5
+[ "$2" -gt 0 ] 2> /dev/null && MAX="$2" || MAX=-1
 
+# get our name
 name=`basename $0`
-test=`echo ${name} | cut -d '.' -f 1`
+
+# create directories
 mkdir -p logs tests
 
+# test for required external tools
 type expect > /dev/null 2>&1
 if [ $? -ne 0 ]; then
   echo "      ${name}: \"expect\" not found.";  exit 77
@@ -19,7 +35,10 @@ if [ $? -ne 0 ]; then
   echo "      ${name}: \"telnet\" not found.";  exit 77
 fi
 
-echo "      stressing server with $CLIENTS clients (be patient!) ..."
+# hello world! :-)
+echo "      stressing server with $CLIENTS clients (be patient!):"
+
+# create scripts for expect(1)
 no=0
 while [ ${no} -lt $CLIENTS ]; do
   cat ${srcdir}/stress-A.e > tests/${no}.e
@@ -27,20 +46,31 @@ while [ ${no} -lt $CLIENTS ]; do
   cat ${srcdir}/stress-B.e >> tests/${no}.e
   no=`expr ${no} + 1`
 done
+
 no=0
 while [ ${no} -lt $CLIENTS ]; do
   expect tests/${no}.e > logs/stress-${no}.log 2> /dev/null &
+
   no=`expr ${no} + 1`
+  echo "      started client $no/$CLIENTS."
+
+  [ $MAX -gt 0 ] && $srcdir/wait-tests.sh $MAX
 done
 
+echo -n "      waiting for clients to complete: ."
 touch logs/check-idle.log
 while true; do
-  expect ${srcdir}/check-idle.e >> logs/check-idle.log
-  res=$?
-  [ $res -eq 0 ] && exit 0
-  [ $res -eq 1 ] && exit 1
-  sleep 1
+  expect ${srcdir}/check-idle.e >> logs/check-idle.log; res=$?
   echo "====================" >> logs/check-idle.log
+  [ $res -ne 99 ] && break
+
+  # there are still clients connected. Wait ...
+  sleep 3
+  echo -n "."
 done
 
+[ $res -eq 0 ] && echo " ok." || echo " failure!"
+
+exit $res
+
 # -eof-
blob - 401a55da8b057cd975acab61c73a2dbe99cfeae3
blob + 6a50ccb035cb9c204386e22b46aa0629d2bddce8
--- src/testsuite/tests.sh
+++ src/testsuite/tests.sh
@@ -1,11 +1,19 @@
 #!/bin/sh
 # ngIRCd Test Suite
-# $Id: tests.sh,v 1.4 2003/08/22 11:31:18 alex Exp $
+# $Id: tests.sh,v 1.4.2.1 2004/09/04 20:49:36 alex Exp $
 
+# detect source directory
+[ -z "$srcdir" ] && srcdir=`dirname $0`
+
 name=`basename $0`
 test=`echo ${name} | cut -d '.' -f 1`
 mkdir -p logs
 
+if [ ! -r "$test" ]; then
+  echo "      ${name}: test \"$test\" not found!";  exit 77
+  exit 1
+fi
+
 type expect > /dev/null 2>&1
 if [ $? -ne 0 ]; then
   echo "      ${name}: \"expect\" not found.";  exit 77
@@ -15,7 +23,10 @@ if [ $? -ne 0 ]; then
   echo "      ${name}: \"telnet\" not found.";  exit 77
 fi
 
-echo "      doing ${test} ..."
-expect ${srcdir}/${test}.e > logs/${test}.log
+echo -n "      running ${test} ..."
+expect ${srcdir}/${test}.e > logs/${test}.log 2>&1; r=$?
+[ $r -eq 0 ] && echo " ok." || echo " failure!"
 
+exit $r
+
 # -eof-
blob - /dev/null
blob + a5f4035c6f56a48226c2da963aae4dc31d611edc (mode 755)
--- /dev/null
+++ src/testsuite/test-loop.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# ngIRCd Test Suite
+# Copyright (c)2002-2004 by Alexander Barton (alex@barton.de)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# Please read the file COPYING, README and AUTHORS for more information.
+#
+# $Id: test-loop.sh,v 1.2.2.1 2004/09/04 20:49:36 alex Exp $
+#
+
+# detect source directory
+[ -z "$srcdir" ] && srcdir=`dirname $0`
+
+# parse command line
+[ "$1" -gt 0 ] 2> /dev/null && LOOPS="$1" || LOOPS=5
+[ "$2" -gt 0 ] 2> /dev/null && WAIT="$2" || WAIT=5
+
+loop=0
+while [ ${loop} -lt $LOOPS ]; do
+  loop=`expr ${loop} + 1`
+  echo "      loop $loop/$LOOPS starting:"
+  for s in $srcdir/*-test; do
+    sh $s; r=$?
+    [ $r -ne 0 ] && exit $r
+    sleep 1
+  done
+  if [ ${loop} -lt $LOOPS ]; then
+    echo "      waiting $WAIT seconds ..."
+    sleep $WAIT
+  fi
+done
+
+# -eof-
blob - /dev/null
blob + a8b64c7f1e72935b61aec4e57320a780aaadb5b1 (mode 755)
--- /dev/null
+++ src/testsuite/wait-tests.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# ngIRCd Test Suite
+# Copyright (c)2002-2004 by Alexander Barton (alex@barton.de)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# Please read the file COPYING, README and AUTHORS for more information.
+#
+# $Id: wait-tests.sh,v 1.3.2.1 2004/09/04 20:49:36 alex Exp $
+#
+
+[ "$1" -gt 0 ] 2> /dev/null && MAX="$1" || MAX=5
+
+PS_FLAGS="-f"
+ps $PS_FLAGS >/dev/null 2>&1
+[ $? -ne 0 ] && PS_FLAGS="a"
+
+msg=0
+while true; do
+  count=`ps $PS_FLAGS | grep "expect " | wc -l`
+  count=`expr $count - 1`
+
+  [ $count -le $MAX ] && break
+
+  if [ $msg -lt 1 ]; then
+    echo -n "      waiting for processes to settle: "
+    msg=1
+  fi
+
+  # there are still clients connected. Wait ...
+  echo -n "$count>$MAX "
+  sleep 1
+done
+
+[ $msg -gt 0 ] && echo "done: $count"
+exit 0
+
+# -eof-