From: Pavel Boldin Date: Sun, 18 Aug 2013 23:48:40 +0000 (+0400) Subject: bind-add-zone: Add stress-test for bind-add-zone X-Git-Tag: rec-3.6.0-rc1~440^2~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=056bee248dc5c2688bc319fd46ea74159a94f662;p=pdns bind-add-zone: Add stress-test for bind-add-zone Uses dnsperf. See README for details. --- diff --git a/regression-tests/add-zone/stress/README b/regression-tests/add-zone/stress/README new file mode 100644 index 000000000..1dee58b56 --- /dev/null +++ b/regression-tests/add-zone/stress/README @@ -0,0 +1,5 @@ +Requires: dnsperf, pdns_server, pdns_control + +Stress test for bind-add-zone command. Uses dnsperf. + +Start from regression-tests folder having pdns build. diff --git a/regression-tests/add-zone/stress/addzones.sh b/regression-tests/add-zone/stress/addzones.sh new file mode 100755 index 000000000..4160c5162 --- /dev/null +++ b/regression-tests/add-zone/stress/addzones.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +for f in $(seq 1 $AMOUNT); do + f=addzone$f.com + dig ns1.$f @localhost -p $port > /dev/null 2>&1 + ../pdns/pdns_control --config-dir=. bind-add-zone $f $TMP/$f + ../pdns/pdns_control --config-dir=. purge $f + sleep 0.5; + dig ns1.$f @localhost -p $port > /dev/null 2>&1 + + RESULT=$(dig ns1.$f @localhost -p $port | grep -v '^ns1') + if [ -z "$RESULT" ]; then + echo "FAILED TO LOAD $f"; + exit 1; + fi +done diff --git a/regression-tests/add-zone/stress/createzones.sh b/regression-tests/add-zone/stress/createzones.sh new file mode 100755 index 000000000..ec5bf5283 --- /dev/null +++ b/regression-tests/add-zone/stress/createzones.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +for f in $(seq 1 $AMOUNT); do + f=addzone$f.com + sed -e "s/addzone.com/$f/g" addzone.com > $TMP/$f +done diff --git a/regression-tests/add-zone/stress/dnsperf.sh b/regression-tests/add-zone/stress/dnsperf.sh new file mode 100755 index 000000000..03b4dd14f --- /dev/null +++ b/regression-tests/add-zone/stress/dnsperf.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +$DNSPERF -p $port -s localhost -d ./add-zone/stress/tmp/list -c 10 -n 100 -S 10 diff --git a/regression-tests/add-zone/stress/run.sh b/regression-tests/add-zone/stress/run.sh new file mode 100755 index 000000000..7c6140d30 --- /dev/null +++ b/regression-tests/add-zone/stress/run.sh @@ -0,0 +1,97 @@ +#!/bin/bash -ex + +PDNS=../pdns/pdns_server +AMOUNT=${1:-1000} +DNSPERF=${DNSPERF} +[ -z "$DNSPERF" ] && DNSPERF=$(which dnsperf) + +ROOT=./add-zone/stress/tmp + +if [ ! -x $PDNS ]; then + echo "Could not find PDNS, run from ./regression-test" + exit 1; +fi +if [ -z "$DNSPERF" -o ! -x "$DNSPERF" ]; then + echo "Could not find DNSPERF" + exit 1; +fi + + +bindwait () +{ + check_process + configname=$1 + domcount=$(grep -c zone named.conf) + if [ ! -x ../pdns/pdns_control ]; then + echo "No pdns_control found" + exit 1 + fi + loopcount=0 + + while [ $loopcount -lt 20 ]; do + sleep 10 + done=$( (../pdns/pdns_control --config-name=$configname --socket-dir=. --no-config bind-domain-status || true) | grep -c 'parsed into memory' || true ) + if [ $done = $domcount ]; then + return + fi + let loopcount=loopcount+1 + done + + if [ $done != $domcount ]; then + echo "Domain parsing failed" >> failed_tests + fi +} + +check_process () +{ + set +e + loopcount=0 + while [ $loopcount -lt 5 ]; do + sleep 1 + pids=$(cat pdns*.pid 2>/dev/null) + if [ ! -z "$pids" ]; then + kill -0 $pids >/dev/null 2>&1 + if [ $? -eq 0 ]; then + set -e + return + fi + fi + let loopcount=loopcount+1 + done + echo "PowerDNS did not start" + exit 1 +} + +port=$1 +[ -z "$port" ] && port=5300 + +mkdir $ROOT || : +TMP=$(mktemp -d --tmpdir=${ROOT}) + +onexit() +{ + rm -fr $TMP + rm -f $ROOT/list + kill $(cat pdns.pid) +} +trap 'onexit' SIGINT SIGKILL + +AMOUNT=$AMOUNT TMP=$TMP ./add-zone/stress/createzones.sh + +grep '^host' example.com | grep -e 'IN\s*A' | \ + sed -e 's/\t.*/.example.com A/g' | shuf > $ROOT/list + +#cat $ROOT/list +#exit + +$PDNS --daemon=no --local-port=$port --socket-dir=./ \ + --no-shuffle --launch=bind --bind-config=./named.conf \ + --fancy-records --send-root-referral \ + --cache-ttl=0 --no-config & +bindwait + +DNSPERF=$DNSPERF port=$port ./add-zone/stress/dnsperf.sh & + +AMOUNT=$AMOUNT TMP=$TMP port=$port ./add-zone/stress/addzones.sh + +onexit