mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-30 21:42:59 +00:00 
			
		
		
		
	Updated "test suite". From HEAD.
This commit is contained in:
		| @@ -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  | ||||
|   | ||||
							
								
								
									
										72
									
								
								src/testsuite/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/testsuite/README
									
									
									
									
									
										Normal file
									
								
							| @@ -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 $ | ||||
| @@ -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" | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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- | ||||
|   | ||||
| @@ -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- | ||||
|   | ||||
| @@ -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- | ||||
|   | ||||
							
								
								
									
										37
									
								
								src/testsuite/test-loop.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								src/testsuite/test-loop.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -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- | ||||
| @@ -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- | ||||
|   | ||||
							
								
								
									
										41
									
								
								src/testsuite/wait-tests.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										41
									
								
								src/testsuite/wait-tests.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -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- | ||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton