]> granicus.if.org Git - pdns/commitdiff
Add test for EDNS handling
authorAki Tuomi <cmouse@cmouse.fi>
Mon, 17 Aug 2015 18:52:17 +0000 (21:52 +0300)
committerAki Tuomi <cmouse@cmouse.fi>
Tue, 25 Aug 2015 15:01:09 +0000 (18:01 +0300)
regression-tests.nobackend/edns1/command [new file with mode: 0755]
regression-tests.nobackend/edns1/description [new file with mode: 0644]
regression-tests.nobackend/edns1/expected_result [new file with mode: 0644]
regression-tests.nobackend/edns1/test-edns.py [new file with mode: 0755]

diff --git a/regression-tests.nobackend/edns1/command b/regression-tests.nobackend/edns1/command
new file mode 100755 (executable)
index 0000000..32785eb
--- /dev/null
@@ -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 (file)
index 0000000..c8aa0ac
--- /dev/null
@@ -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 (file)
index 0000000..b0c76da
--- /dev/null
@@ -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 (executable)
index 0000000..d7ab3eb
--- /dev/null
@@ -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"