Added TCP high-water system tests
Note: ans6/ans6.py is a helper script that allows tests.sh to open/close TCP connections to some BIND instance.
This commit is contained in:
committed by
Ondřej Surý
parent
66fe8627de
commit
29be224a04
@@ -14,6 +14,7 @@ SYSTEMTESTTOP=..
|
||||
|
||||
DIGOPTS="-p ${PORT}"
|
||||
RNDCCMD="$RNDC -p ${CONTROLPORT} -c ../common/rndc.conf"
|
||||
SEND="$PERL $SYSTEMTESTTOP/send.pl 10.53.0.6 ${CONTROLPORT}"
|
||||
|
||||
status=0
|
||||
|
||||
@@ -55,5 +56,94 @@ if [ "$ntcp21" -ge "$ntcp22" ];then ret=1; fi
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
# -------- TCP high-water tests ----------
|
||||
n=0
|
||||
|
||||
refresh_tcp_stats() {
|
||||
$RNDCCMD -s 10.53.0.5 status > rndc.out.$n || ret=1
|
||||
TCP_CUR="$(sed -n "s/^tcp clients: \([0-9][0-9]*\).*/\1/p" rndc.out.$n)"
|
||||
TCP_LIMIT="$(sed -n "s/^tcp clients: .*\/\([0-9][0-9]*\)/\1/p" rndc.out.$n)"
|
||||
TCP_HIGH="$(sed -n "s/^TCP high-water: \([0-9][0-9]*\)/\1/p" rndc.out.$n)"
|
||||
}
|
||||
|
||||
wait_for_log() {
|
||||
msg=$1
|
||||
file=$2
|
||||
for i in 1 2 3 4 5 6 7 8 9 10; do
|
||||
nextpart "$file" | grep "$msg" > /dev/null && return
|
||||
sleep 1
|
||||
done
|
||||
echo_i "exceeded time limit waiting for '$msg' in $file"
|
||||
ret=1
|
||||
}
|
||||
|
||||
# Send a command to the tool script listening on 10.53.0.6.
|
||||
send_command() {
|
||||
nextpart ans6/ans.run > /dev/null
|
||||
echo "$*" | $SEND
|
||||
wait_for_log "result=OK" ans6/ans.run
|
||||
}
|
||||
|
||||
# Instructs ans6 to open $1 TCP connections to 10.53.0.5.
|
||||
open_connections() {
|
||||
send_command "open" "${1}" 10.53.0.5 "${PORT}"
|
||||
}
|
||||
|
||||
# Instructs ans6 to close $1 TCP connections to 10.53.0.5.
|
||||
close_connections() {
|
||||
send_command "close" "${1}"
|
||||
}
|
||||
|
||||
# Check TCP statistics after server startup before using them as a baseline for
|
||||
# subsequent checks.
|
||||
n=$((n + 1))
|
||||
echo_i "TCP high-water: check initial statistics ($n)"
|
||||
ret=0
|
||||
refresh_tcp_stats
|
||||
assert_int_equal "${TCP_CUR}" 1 "current TCP clients count"
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
# Ensure the TCP high-water statistic gets updated after some TCP connections
|
||||
# are established.
|
||||
n=$((n + 1))
|
||||
echo_i "TCP high-water: check value after some TCP connections are established ($n)"
|
||||
ret=0
|
||||
OLD_TCP_CUR="${TCP_CUR}"
|
||||
TCP_ADDED=9
|
||||
open_connections "${TCP_ADDED}"
|
||||
refresh_tcp_stats
|
||||
assert_int_equal "${TCP_CUR}" $((OLD_TCP_CUR + TCP_ADDED)) "current TCP clients count"
|
||||
assert_int_equal "${TCP_HIGH}" $((OLD_TCP_CUR + TCP_ADDED)) "TCP high-water value"
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
# Ensure the TCP high-water statistic remains unchanged after some TCP
|
||||
# connections are closed.
|
||||
n=$((n + 1))
|
||||
echo_i "TCP high-water: check value after some TCP connections are closed ($n)"
|
||||
ret=0
|
||||
OLD_TCP_CUR="${TCP_CUR}"
|
||||
OLD_TCP_HIGH="${TCP_HIGH}"
|
||||
TCP_REMOVED=5
|
||||
close_connections "${TCP_REMOVED}"
|
||||
refresh_tcp_stats
|
||||
assert_int_equal "${TCP_CUR}" $((OLD_TCP_CUR - TCP_REMOVED)) "current TCP clients count"
|
||||
assert_int_equal "${TCP_HIGH}" "${OLD_TCP_HIGH}" "TCP high-water value"
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
# Ensure the TCP high-water statistic never exceeds the configured TCP clients
|
||||
# limit.
|
||||
n=$((n + 1))
|
||||
echo_i "TCP high-water: ensure tcp-clients is an upper bound ($n)"
|
||||
ret=0
|
||||
open_connections $((TCP_LIMIT + 1))
|
||||
refresh_tcp_stats
|
||||
assert_int_equal "${TCP_CUR}" "${TCP_LIMIT}" "current TCP clients count"
|
||||
assert_int_equal "${TCP_HIGH}" "${TCP_LIMIT}" "TCP high-water value"
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo_i "exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
||||
Reference in New Issue
Block a user