From 5997355e22860c9ea35c91bd7a9ae1f74dada789 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 6 Dec 2023 11:58:14 +0100 Subject: [PATCH] - Fix to sync the tests script file common.sh. --- doc/Changelog | 3 ++ testdata/common.sh | 120 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 117 insertions(+), 6 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index f6aa9ab6c..a53bfec43 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +6 December 2023: Wouter + - Fix to sync the tests script file common.sh. + 5 December 2023: Wouter - Merge #971: fix 'WARNING: Message has 41 extra bytes at end'. - Fix #969: [FR] distinguish Do53, DoT and DoH in the logs. diff --git a/testdata/common.sh b/testdata/common.sh index 8c0ba0d8d..9cee6bfb8 100644 --- a/testdata/common.sh +++ b/testdata/common.sh @@ -1,7 +1,11 @@ # common.sh - an include file for commonly used functions for test code. # BSD licensed (see LICENSE file). # -# Version 3 +# Version 5 +# 2023-12-06: get_ldns_notify, skip_test and teststep, and previous changes +# also included are wait_logfile, cpu_count, process_cpu_list, and +# kill_from_pidfile, and use HOME variable for HOME/bin. +# 2011-04-06: tpk wait_logfile to wait (with timeout) for a logfile line to appear # 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. @@ -21,6 +25,7 @@ # 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_logfile : wait on logfile to see entry. # 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. @@ -29,6 +34,9 @@ # wait_server_up_or_fail: wait for server to come up or print a failure string # skip_test x : print message and skip test (must be called in .pre) # kill_pid : kill a server, make sure and wait for it to go down. +# cpu_count : get number of cpus in system +# process_cpu_list : get cpu affinity list for process +# kill_from_pidfile : kill the pid in the given pid file # teststep : print the current test step in the output @@ -61,7 +69,7 @@ get_ldns_testns () { if test -x "`which ldns-testns 2>&1`"; then LDNS_TESTNS=ldns-testns else - LDNS_TESTNS=/home/wouter/bin/ldns-testns + LDNS_TESTNS=$HOME/bin/ldns-testns fi } @@ -70,7 +78,7 @@ get_ldns_notify () { if test -x "`which ldns-notify 2>&1`"; then LDNS_NOTIFY=ldns-notify else - LDNS_NOTIFY=/home/wouter/bin/ldns-notify + LDNS_NOTIFY=$HOME/bin/ldns-notify fi } @@ -160,13 +168,39 @@ get_random_port () { done } +# wait for a logfile line to appear, with a timeout. +# pass +# $1 : logfilename +# $2 : string to watch for. +# $3 : timeout in seconds. +# exits with failure if it times out +wait_logfile () { + local WAIT_THRES=30 + local MAX_UP_TRY=`expr $3 + $WAIT_THRES` + local try + for (( try=0 ; try <= $MAX_UP_TRY ; try++ )) ; do + if test -f $1 && grep -F "$2" $1 >/dev/null; then + #echo "done on try $try" + break; + fi + if test $try -eq $MAX_UP_TRY; then + echo "Logfile in $1 did not get $2!" + cat $1 + exit 1; + fi + if test $try -ge $WAIT_THRES; then + sleep 1 + fi + done +} + # wait for server to go up, pass # $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 MAX_UP_TRY=120 local try for (( try=0 ; try <= $MAX_UP_TRY ; try++ )) ; do if test -f $1 && grep -F "$2" $1 >/dev/null; then @@ -239,6 +273,33 @@ wait_server_up_or_fail () { done } +# $1: zone +# $2: serial to be expected +# $3: server to query +# $4: port +# $5: # times to try (# seconds dig is ran) +wait_for_soa_serial () { + TS_START=`date +%s` + for i in `seq 1 $5` + do + SERIAL=`dig -p $4 @$3 $1 SOA +short | awk '{ print $3 }'` + if test "$?" != "0" + then + echo "** \"dig -p $4 @$3 $1 SOA +short\" failed!" + return 1 + fi + if test "$SERIAL" = "$2" + then + TS_END=`date +%s` + echo "*** Serial $2 was seen in $i tries (`expr $TS_END - $TS_START`) seconds" + return 0 + fi + sleep 1 + done + echo "** Serial $2 was not seen in $5 tries (did see: $SERIAL)" + return 1 +} + # kill a pid, make sure and wait for it to go down. # $1 : pid to kill kill_pid () { @@ -268,11 +329,58 @@ kill_pid () { # 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" + if test -x '$HOME/bin/doxygen'; then + export PATH="$HOME/bin:$PATH" fi } +# get number of cpus in system +cpu_count() +{ + local sys=$(uname -s) + if [ "${sys}" = "Linux" ]; then + nproc + elif [ "${sys}" = "FreeBSD" ]; then + sysctl -n hw.ncpu + fi +} + +# get cpu affinity list for process +# $1 : pid +process_cpu_list() { + local pid=${1} + local sys=$(uname -s) + + if [ "${sys}" = "Linux" ]; then + local defl=$(taskset -pc ${pid} | sed -n -e 's/^.*: //p' | head -n 1) + elif [ "${sys}" = "FreeBSD" ]; then + local defl=$(cpuset -g -p ${pid} | sed -n -e 's/^.*: //p' | head -n 1) + fi + + if [ -n "${defl}" ]; then + local infl + defl=$(echo "${defl}" | sed -e 's/,/ /g') + for i in ${defl}; do + rng=$(echo "${i}-${i}" | sed -e 's/^\([0-9]*\)-\([0-9]*\).*$/\1 \2/') + infl="${infl} $(seq -s ' ' ${rng})" + done + infl=$(echo ${infl} | sed -e 's/ */ /' -e 's/^ *//') + echo "${infl}" + fi +} + +# +# +kill_from_pidfile() { + local pidfile="$1" + if test -f "$pidfile"; then + local pid=`head -n 1 "$pidfile"` + if test ! -z "$pid"; then + kill_pid "$pid" + fi + fi +} + # Print the current test step in the output teststep () { echo