mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 14:02: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 | # Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste | ||||||
| # der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. | # 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 | AUTOMAKE_OPTIONS = ../portab/ansi2knr | ||||||
| @@ -17,12 +17,15 @@ AUTOMAKE_OPTIONS = ../portab/ansi2knr | |||||||
| INCLUDES = -I$(srcdir)/../portab | INCLUDES = -I$(srcdir)/../portab | ||||||
|  |  | ||||||
| EXTRA_DIST = \ | EXTRA_DIST = \ | ||||||
| 	getpid.sh \ | 	README getpid.sh \ | ||||||
| 	start-server.sh stop-server.sh tests.sh stress-server.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 \ | 	connect-test.e channel-test.e mode-test.e \ | ||||||
| 	stress-A.e stress-B.e check-idle.e \ | 	stress-A.e stress-B.e check-idle.e \ | ||||||
| 	ngircd-test.conf | 	ngircd-test.conf | ||||||
|  |  | ||||||
|  | all: ngircd-TEST-Binary ${TESTS} | ||||||
|  |  | ||||||
| clean-local: | clean-local: | ||||||
| 	rm -rf logs tests *-test ngircd-test.log ngircd-test.motd \ | 	rm -rf logs tests *-test ngircd-test.log ngircd-test.motd \ | ||||||
| 	 T-ngircd procs.tmp  | 	 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 | spawn telnet localhost 6789 | ||||||
| expect { | expect { | ||||||
| @@ -10,6 +10,7 @@ send "nick IdleTest\r" | |||||||
| send "user idle . . :Idle-Test\r" | send "user idle . . :Idle-Test\r" | ||||||
| expect { | expect { | ||||||
| 	timeout { exit 1 } | 	timeout { exit 1 } | ||||||
|  | 	"433 * IdleTest :Nickname already in use" { exit 99 } | ||||||
| 	"376" | 	"376" | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # ngIRCd Test Suite | # 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` | [ -z "$srcdir" ] && srcdir=`dirname $0` | ||||||
|  |  | ||||||
| echo "      starting server ..." | echo -n "      starting server ..." | ||||||
|  |  | ||||||
| # remove old logfiles | # remove old logfiles | ||||||
| rm -rf logs *.log | 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. | # test-server, because we won't be able to kill it at the end of the test. | ||||||
| ./getpid.sh sh > /dev/null 2>&1 | ./getpid.sh sh > /dev/null 2>&1 | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
|   echo "      error: getpid.sh FAILED!" |   echo " getpid.sh failed!" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
|  |  | ||||||
| # check if there is a test-server already running | # check if there is a test-server already running | ||||||
| ./getpid.sh T-ngircd > /dev/null 2>&1 | ./getpid.sh T-ngircd > /dev/null 2>&1 | ||||||
| if [ $? -eq 0 ]; then | if [ $? -eq 0 ]; then | ||||||
|   echo "      error: test-server already running!" |   echo " failure: test-server already running!" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
|  |  | ||||||
| @@ -28,11 +28,14 @@ fi | |||||||
| echo "This is an ngIRCd Test Server" > ngircd-test.motd | echo "This is an ngIRCd Test Server" > ngircd-test.motd | ||||||
|  |  | ||||||
| # starting up test-server ... | # 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 | sleep 1 | ||||||
|  |  | ||||||
| # validate running test-server | # validate running test-server | ||||||
| pid=`./getpid.sh T-ngircd` | 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- | # -eof- | ||||||
|   | |||||||
| @@ -1,25 +1,29 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # ngIRCd Test Suite | # 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` | [ -z "$srcdir" ] && srcdir=`dirname $0` | ||||||
|  |  | ||||||
| echo "      stopping server ..." | echo -n "      stopping server ..." | ||||||
|  |  | ||||||
| # stop test-server ... | # stop test-server ... | ||||||
| pid=`./getpid.sh T-ngircd` | pid=`./getpid.sh T-ngircd` | ||||||
| if [ -z "$pid" ]; then | if [ -z "$pid" ]; then | ||||||
|   echo "      no running server found!?" |   echo " failure: no running server found!?" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| kill $pid > /dev/null 2>&1 || exit 1 | kill $pid > /dev/null 2>&1 || exit 1 | ||||||
|  |  | ||||||
| # waiting ... | # waiting ... | ||||||
| for i in 1 2 3 4 5; do | 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 |   sleep 1 | ||||||
| done | done | ||||||
| echo "      server still running!?" | echo " failure: server still running!?" | ||||||
| exit 1 | exit 1 | ||||||
|  |  | ||||||
| # -eof- | # -eof- | ||||||
|   | |||||||
| @@ -1,15 +1,31 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  | # | ||||||
| # ngIRCd Test Suite | # 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` | [ -z "$srcdir" ] && srcdir=`dirname $0` | ||||||
|  |  | ||||||
|  | # parse command line | ||||||
| [ "$1" -gt 0 ] 2> /dev/null && CLIENTS="$1" || CLIENTS=5 | [ "$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` | name=`basename $0` | ||||||
| test=`echo ${name} | cut -d '.' -f 1` |  | ||||||
|  | # create directories | ||||||
| mkdir -p logs tests | mkdir -p logs tests | ||||||
|  |  | ||||||
|  | # test for required external tools | ||||||
| type expect > /dev/null 2>&1 | type expect > /dev/null 2>&1 | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
|   echo "      ${name}: \"expect\" not found.";  exit 77 |   echo "      ${name}: \"expect\" not found.";  exit 77 | ||||||
| @@ -19,7 +35,10 @@ if [ $? -ne 0 ]; then | |||||||
|   echo "      ${name}: \"telnet\" not found.";  exit 77 |   echo "      ${name}: \"telnet\" not found.";  exit 77 | ||||||
| fi | 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 | no=0 | ||||||
| while [ ${no} -lt $CLIENTS ]; do | while [ ${no} -lt $CLIENTS ]; do | ||||||
|   cat ${srcdir}/stress-A.e > tests/${no}.e |   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 |   cat ${srcdir}/stress-B.e >> tests/${no}.e | ||||||
|   no=`expr ${no} + 1` |   no=`expr ${no} + 1` | ||||||
| done | done | ||||||
|  |  | ||||||
| no=0 | no=0 | ||||||
| while [ ${no} -lt $CLIENTS ]; do | while [ ${no} -lt $CLIENTS ]; do | ||||||
|   expect tests/${no}.e > logs/stress-${no}.log 2> /dev/null & |   expect tests/${no}.e > logs/stress-${no}.log 2> /dev/null & | ||||||
|  |  | ||||||
|   no=`expr ${no} + 1` |   no=`expr ${no} + 1` | ||||||
|  |   echo "      started client $no/$CLIENTS." | ||||||
|  |  | ||||||
|  |   [ $MAX -gt 0 ] && $srcdir/wait-tests.sh $MAX | ||||||
| done | done | ||||||
|  |  | ||||||
|  | echo -n "      waiting for clients to complete: ." | ||||||
| touch logs/check-idle.log | touch logs/check-idle.log | ||||||
| while true; do | while true; do | ||||||
|   expect ${srcdir}/check-idle.e >> logs/check-idle.log |   expect ${srcdir}/check-idle.e >> logs/check-idle.log; res=$? | ||||||
|   res=$? |  | ||||||
|   [ $res -eq 0 ] && exit 0 |  | ||||||
|   [ $res -eq 1 ] && exit 1 |  | ||||||
|   sleep 1 |  | ||||||
|   echo "====================" >> logs/check-idle.log |   echo "====================" >> logs/check-idle.log | ||||||
|  |   [ $res -ne 99 ] && break | ||||||
|  |  | ||||||
|  |   # there are still clients connected. Wait ... | ||||||
|  |   sleep 3 | ||||||
|  |   echo -n "." | ||||||
| done | done | ||||||
|  |  | ||||||
|  | [ $res -eq 0 ] && echo " ok." || echo " failure!" | ||||||
|  |  | ||||||
|  | exit $res | ||||||
|  |  | ||||||
| # -eof- | # -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 | #!/bin/sh | ||||||
| # ngIRCd Test Suite | # 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` | name=`basename $0` | ||||||
| test=`echo ${name} | cut -d '.' -f 1` | test=`echo ${name} | cut -d '.' -f 1` | ||||||
| mkdir -p logs | mkdir -p logs | ||||||
|  |  | ||||||
|  | if [ ! -r "$test" ]; then | ||||||
|  |   echo "      ${name}: test \"$test\" not found!";  exit 77 | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
| type expect > /dev/null 2>&1 | type expect > /dev/null 2>&1 | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
|   echo "      ${name}: \"expect\" not found.";  exit 77 |   echo "      ${name}: \"expect\" not found.";  exit 77 | ||||||
| @@ -15,7 +23,10 @@ if [ $? -ne 0 ]; then | |||||||
|   echo "      ${name}: \"telnet\" not found.";  exit 77 |   echo "      ${name}: \"telnet\" not found.";  exit 77 | ||||||
| fi | fi | ||||||
|  |  | ||||||
| echo "      doing ${test} ..." | echo -n "      running ${test} ..." | ||||||
| expect ${srcdir}/${test}.e > logs/${test}.log | expect ${srcdir}/${test}.e > logs/${test}.log 2>&1; r=$? | ||||||
|  | [ $r -eq 0 ] && echo " ok." || echo " failure!" | ||||||
|  |  | ||||||
|  | exit $r | ||||||
|  |  | ||||||
| # -eof- | # -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