diff options
Diffstat (limited to 'testdata/common.sh')
-rwxr-xr-x | testdata/common.sh | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/testdata/common.sh b/testdata/common.sh new file mode 100755 index 000000000000..8e3b2293ec67 --- /dev/null +++ b/testdata/common.sh @@ -0,0 +1,256 @@ +# common.sh - an include file for commonly used functions for test code. +# BSD licensed (see LICENSE file). +# +# Version 3 +# 2011-02-23: get_pcat for PCAT, PCAT_DIFF and PCAT_PRINT defines. +# 2011-02-18: ports check on BSD,Solaris. wait_nsd_up. +# 2011-02-11: first version. +# +# include this file from a tpkg script with +# . ../common.sh +# +# overview of functions available: +# error x : print error and exit +# info x : print info +# test_tool_avail x : see if program in path and complain, exit if not. +# get_ldns_testns : set LDNS_TESTNS to executable ldns-testns +# get_make : set MAKE to gmake or make tool. +# get_gcc : set cc or gcc in CC +# get_pcat : set PCAT, PCAT_DIFF and PCAT_PRINT executables. +# set_doxygen_path : set doxygen path +# skip_if_in_list : set SKIP=1 if name in list and tool not available. +# get_random_port x : get RND_PORT a sequence of free random port numbers. +# wait_server_up : wait on logfile to see when server comes up. +# wait_ldns_testns_up : wait for ldns-testns to come up. +# wait_unbound_up : wait for unbound to come up. +# wait_petal_up : wait for petal to come up. +# wait_nsd_up : wait for nsd to come up. +# wait_server_up_or_fail: wait for server to come up or print a failure string +# kill_pid : kill a server, make sure and wait for it to go down. + + +# print error and exit +# $0: name of program +# $1: error to printout. +error () { + echo "$0: error: $1" >&2 + exit 1 +} + +# print info +# $0: name of program +# $1: to printout. +info () { + echo "$0: info: $1" +} + +# test if 'tool' is available in path and complain otherwise. +# $1: tool +test_tool_avail () { + if test ! -x "`which $1 2>&1`"; then + echo No "$1" in path + exit 1 + fi +} + +# get ldns-testns tool in LDNS_TESTNS variable. +get_ldns_testns () { + if test -x "`which ldns-testns 2>&1`"; then + LDNS_TESTNS=ldns-testns + else + LDNS_TESTNS=/home/wouter/bin/ldns-testns + fi +} + +# get make tool in MAKE variable, gmake is used if present. +get_make () { + if test -x "`which gmake 2>&1`"; then + MAKE=gmake + else + MAKE=make + fi +} + +# get cc tool in CC variable, gcc is used if present. +get_gcc () { + if test -x "`which gcc 2>&1`"; then + CC=gcc + else + CC=cc + fi +} + +# get pcat, pcat-print and pcat-diff +get_pcat () { + PCAT=`which pcat` + PCAT_PRINT=`which pcat-print` + PCAT_DIFF=`which pcat-diff` +} + +# set SKIP=1 if the name is in list and tool is not available. +# $1: name of package to check. +# $2: list of packages that need the tool. +# #3: name of the tool required. +skip_if_in_list () { + if echo $2 | grep $1 >/dev/null; then + if test ! -x "`which $3 2>&1`"; then + SKIP=1; + fi + fi +} + +# function to get a number of random port numbers. +# $1: number of random ports. +# RND_PORT is returned as the starting port number +get_random_port () { + local plist + local cont + local collisions + local i + local MAXCOLLISION=1000 + cont=1 + collisions=0 + while test "$cont" = 1; do + #netstat -n -A ip -A ip6 -a | sed -e "s/^.*:\([0-9]*\) .*$/\1/" + RND_PORT=$(( $RANDOM + 5354 )) + # depending on uname try to check for collisions in port numbers + case "`uname`" in + linux|Linux) + plist=`netstat -n -A ip -A ip6 -a | sed -e 's/^.*:\([0-9]*\) .*$/\1/'` + ;; + FreeBSD|freebsd|NetBSD|netbsd|OpenBSD|openbsd) + plist=`netstat -n -a | grep "^[ut][dc]p[46] " | sed -e 's/^.*\.\([0-9]*\) .*$/\1/'` + ;; + Solaris|SunOS) + plist=`netstat -n -a | sed -e 's/^.*\.\([0-9]*\) .*$/\1/' | grep '^[0-9]*$'` + ;; + *) + plist="" + ;; + esac + cont=0 + for (( i=0 ; i < $1 ; i++ )); do + if echo "$plist" | grep '^'`expr $i + $RND_PORT`'$' >/dev/null 2>&1; then + cont=1; + collisions=`expr $collisions + 1` + fi + done + if test $collisions = $MAXCOLLISION; then + error "too many collisions getting random port number" + fi + done +} + +# wait for server to go up, pass <logfilename> <string to watch> +# $1 : logfilename +# $2 : string to watch for. +# exits with failure if it does not come up +wait_server_up () { + local MAX_UP_TRY=120 + local WAIT_THRES=30 + local try + for (( try=0 ; try <= $MAX_UP_TRY ; try++ )) ; do + if test -f $1 && fgrep "$2" $1 >/dev/null; then + #echo "done on try $try" + break; + fi + if test $try -eq $MAX_UP_TRY; then + echo "Server in $1 did not go up!" + cat $1 + exit 1; + fi + if test $try -ge $WAIT_THRES; then + sleep 1 + fi + done +} + +# wait for ldns-testns to come up +# $1 : logfilename that is watched. +wait_ldns_testns_up () { + wait_server_up "$1" "Listening on port" +} + +# wait for unbound to come up +# string 'Start of service' in log. +# $1 : logfilename that is watched. +wait_unbound_up () { + wait_server_up "$1" "start of service" +} + +# wait for petal to come up +# string 'petal start' in log. +# $1 : logfilename that is watched. +wait_petal_up () { + wait_server_up "$1" "petal start" +} + +# wait for nsd to come up +# string nsd start in log. +# $1 : logfilename that is watched. +wait_nsd_up () { + wait_server_up "$1" " started (NSD " +} + +# wait for server to go up, pass <logfilename> <string to watch> <badstr> +# $1 : logfile +# $2 : success string +# $3 : failure string +wait_server_up_or_fail () { + local MAX_UP_TRY=120 + local WAIT_THRES=30 + local try + for (( try=0 ; try <= $MAX_UP_TRY ; try++ )) ; do + if test -f $1 && fgrep "$2" $1 >/dev/null; then + echo "done on try $try" + break; + fi + if test -f $1 && fgrep "$3" $1 >/dev/null; then + echo "failed on try $try" + break; + fi + if test $try -eq $MAX_UP_TRY; then + echo "Server in $1 did not go up!" + cat $1 + exit 1; + fi + if test $try -ge $WAIT_THRES; then + sleep 1 + fi + done +} + +# kill a pid, make sure and wait for it to go down. +# $1 : pid to kill +kill_pid () { + local MAX_DOWN_TRY=120 + local WAIT_THRES=30 + local try + kill $1 + for (( try=0 ; try <= $MAX_DOWN_TRY ; try++ )) ; do + if kill -0 $1 >/dev/null 2>&1; then + : + else + #echo "done on try $try" + break; + fi + if test $try -eq $MAX_DOWN_TRY; then + echo "Server in $1 did not go down! Send SIGKILL" + kill -9 $1 >/dev/null 2>&1 + fi + if test $try -ge $WAIT_THRES; then + sleep 1 + fi + # re-send the signal + kill $1 >/dev/null 2>&1 + done + return 0 +} + +# set doxygen path, so that make doc can find doxygen +set_doxygen_path () { + if test -x '/home/wouter/bin/doxygen'; then + export PATH="/home/wouter/bin:$PATH" + fi +} + |