]> granicus.if.org Git - pdns/commitdiff
bind-add-zone: Add stress-test for bind-add-zone
authorPavel Boldin <boldin.pavel@gmail.com>
Sun, 18 Aug 2013 23:48:40 +0000 (03:48 +0400)
committerPavel Boldin <boldin.pavel@gmail.com>
Tue, 10 Sep 2013 20:19:16 +0000 (00:19 +0400)
Uses dnsperf. See README for details.

regression-tests/add-zone/stress/README [new file with mode: 0644]
regression-tests/add-zone/stress/addzones.sh [new file with mode: 0755]
regression-tests/add-zone/stress/createzones.sh [new file with mode: 0755]
regression-tests/add-zone/stress/dnsperf.sh [new file with mode: 0755]
regression-tests/add-zone/stress/run.sh [new file with mode: 0755]

diff --git a/regression-tests/add-zone/stress/README b/regression-tests/add-zone/stress/README
new file mode 100644 (file)
index 0000000..1dee58b
--- /dev/null
@@ -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 (executable)
index 0000000..4160c51
--- /dev/null
@@ -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 (executable)
index 0000000..ec5bf52
--- /dev/null
@@ -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 (executable)
index 0000000..03b4dd1
--- /dev/null
@@ -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 (executable)
index 0000000..7c6140d
--- /dev/null
@@ -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