From ef011d9f68eefe9c16d0526be043071123ae9a3d Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Mon, 17 Aug 2015 21:52:17 +0300 Subject: [PATCH] Add test for EDNS handling --- regression-tests.nobackend/edns1/command | 35 +++++++++++++++++++ regression-tests.nobackend/edns1/description | 1 + .../edns1/expected_result | 1 + regression-tests.nobackend/edns1/test-edns.py | 19 ++++++++++ 4 files changed, 56 insertions(+) create mode 100755 regression-tests.nobackend/edns1/command create mode 100644 regression-tests.nobackend/edns1/description create mode 100644 regression-tests.nobackend/edns1/expected_result create mode 100755 regression-tests.nobackend/edns1/test-edns.py diff --git a/regression-tests.nobackend/edns1/command b/regression-tests.nobackend/edns1/command new file mode 100755 index 000000000..32785eb9f --- /dev/null +++ b/regression-tests.nobackend/edns1/command @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +# run PowerDNS using random backend + +port=5501 +rm -f pdns*.pid + +bindwait () +{ + configname=$1 + domcount=1 + loopcount=0 + while [ $loopcount -lt 20 ]; do + sleep 1 + 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 +} + +$RUNWRAPPER ../pdns/pdns_server --daemon=no --local-port=$port --socket-dir=./ \ + --no-shuffle --launch=bind --bind-config=edns-packet-cache/named.conf \ + --send-root-referral --cache-ttl=60 --no-config --module-dir=../regression-tests/modules & +bindwait + +timeout 5 ./edns1/test-edns.py + +kill $(cat pdns*.pid) +rm pdns*.pid diff --git a/regression-tests.nobackend/edns1/description b/regression-tests.nobackend/edns1/description new file mode 100644 index 000000000..c8aa0ac44 --- /dev/null +++ b/regression-tests.nobackend/edns1/description @@ -0,0 +1 @@ +Make sure PowerDNS replies correctly to unknown EDNS version diff --git a/regression-tests.nobackend/edns1/expected_result b/regression-tests.nobackend/edns1/expected_result new file mode 100644 index 000000000..b0c76da97 --- /dev/null +++ b/regression-tests.nobackend/edns1/expected_result @@ -0,0 +1 @@ +EDNS response OK diff --git a/regression-tests.nobackend/edns1/test-edns.py b/regression-tests.nobackend/edns1/test-edns.py new file mode 100755 index 000000000..d7ab3eb09 --- /dev/null +++ b/regression-tests.nobackend/edns1/test-edns.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +import socket + +MESSAGE="\xaf\x03\x00\x20\x00\x01\x00\x00\x00\x00\x00\x01\x04\x75\x6e\x69\x74\x04\x74\x65\x73\x74\x00\x00\x06\x00\x01\x00\x00\x29\x10\x00\x00\x64\x00\x00\x00\x10\x00\x0a\x00\x08\x39\x70\xad\xaf\xca\xa8\x96\xca\x00\x64\x00\x00" +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + +sock.bind(("127.0.0.1",5502)) +sock.sendto(MESSAGE, ("127.0.0.1", 5501)) + +data, addr = sock.recvfrom(512) + +# make sure data is correct +EXPECT="\xaf\x03\x84\x00\x00\x01\x00\x00\x00\x00\x00\x01\x04\x75\x6e\x69\x74\x04\x74\x65\x73\x74\x00\x00\x06\x00\x01\x00\x00\x29\x06\x90\x01\x00\x00\x00\x00\x00" + +if (data != EXPECT): + print "Invalid EDNS response, expected extended RCODE=BADVERS, no SOA, and OPT version 0" +else: + print "EDNS response OK" -- 2.40.0