summaryrefslogtreecommitdiffstats
path: root/bin/tests/system/dispatch
diff options
context:
space:
mode:
Diffstat (limited to 'bin/tests/system/dispatch')
-rw-r--r--bin/tests/system/dispatch/ans3/ans.py99
-rw-r--r--bin/tests/system/dispatch/clean.sh16
-rw-r--r--bin/tests/system/dispatch/ns1/named.conf.in45
-rw-r--r--bin/tests/system/dispatch/ns1/root.db16
-rw-r--r--bin/tests/system/dispatch/ns2/example.db17
-rw-r--r--bin/tests/system/dispatch/ns2/named.conf.in50
-rw-r--r--bin/tests/system/dispatch/setup.sh17
-rw-r--r--bin/tests/system/dispatch/tests_connreset.py27
8 files changed, 287 insertions, 0 deletions
diff --git a/bin/tests/system/dispatch/ans3/ans.py b/bin/tests/system/dispatch/ans3/ans.py
new file mode 100644
index 0000000..4e4ebac
--- /dev/null
+++ b/bin/tests/system/dispatch/ans3/ans.py
@@ -0,0 +1,99 @@
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+import os
+import select
+import signal
+import socket
+import sys
+import time
+
+import dns.flags
+import dns.message
+
+
+def port():
+ env_port = os.getenv("PORT")
+ if env_port is None:
+ env_port = 5300
+ else:
+ env_port = int(env_port)
+
+ return env_port
+
+
+def udp_listen(port):
+ udp = socket.socket(type=socket.SOCK_DGRAM)
+ udp.bind(("10.53.0.3", port))
+
+ return udp
+
+
+def tcp_listen(port):
+ tcp = socket.socket(type=socket.SOCK_STREAM)
+ tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ tcp.bind(("10.53.0.3", port))
+ tcp.listen(100)
+
+ return tcp
+
+
+def udp_tc_once(udp):
+ qrybytes, clientaddr = udp.recvfrom(65535)
+ qry = dns.message.from_wire(qrybytes)
+ answ = dns.message.make_response(qry)
+ answ.flags |= dns.flags.TC
+ answbytes = answ.to_wire()
+ udp.sendto(answbytes, clientaddr)
+
+
+def tcp_once(tcp):
+ csock, _clientaddr = tcp.accept()
+ time.sleep(5)
+ csock.close()
+
+
+def sigterm(signum, frame):
+ os.remove("ans.pid")
+ sys.exit(0)
+
+
+def write_pid():
+ with open("ans.pid", "w") as f:
+ pid = os.getpid()
+ f.write("{}".format(pid))
+
+
+signal.signal(signal.SIGTERM, sigterm)
+write_pid()
+
+udp = udp_listen(port())
+tcp = tcp_listen(port())
+
+input = [udp, tcp]
+
+while True:
+ try:
+ inputready, outputready, exceptready = select.select(input, [], [])
+ except select.error:
+ break
+ except socket.error:
+ break
+ except KeyboardInterrupt:
+ break
+
+ for s in inputready:
+ if s == udp:
+ udp_tc_once(udp)
+ if s == tcp:
+ tcp_once(tcp)
+
+sigterm(signal.SIGTERM, 0)
diff --git a/bin/tests/system/dispatch/clean.sh b/bin/tests/system/dispatch/clean.sh
new file mode 100644
index 0000000..608ec5c
--- /dev/null
+++ b/bin/tests/system/dispatch/clean.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+rm -f ns*/named.run ns*/named.conf ns*/named.pid ns*/managed-keys.bind*
+rm -f ans*/ans.run ans*/ans.pid
+rm -f ns*/named.memstats
diff --git a/bin/tests/system/dispatch/ns1/named.conf.in b/bin/tests/system/dispatch/ns1/named.conf.in
new file mode 100644
index 0000000..d3337a5
--- /dev/null
+++ b/bin/tests/system/dispatch/ns1/named.conf.in
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+key rndc_key {
+ secret "1234abcd8765";
+ algorithm @DEFAULT_HMAC@;
+};
+
+controls {
+ inet 10.53.0.1 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
+};
+
+options {
+ port @PORT@;
+ pid-file "named.pid";
+
+ listen-on { 10.53.0.1; };
+ query-source address 10.53.0.1;
+ notify-source 10.53.0.1;
+ transfer-source 10.53.0.1;
+
+ listen-on-v6 { fd92:7065:b8e:ffff::1; };
+ query-source-v6 address fd92:7065:b8e:ffff::1;
+ notify-source-v6 fd92:7065:b8e:ffff::1;
+ transfer-source-v6 fd92:7065:b8e:ffff::1;
+
+ recursion no;
+ servfail-ttl 0;
+ dnssec-validation no;
+};
+
+zone "." {
+ type primary;
+ file "root.db";
+};
diff --git a/bin/tests/system/dispatch/ns1/root.db b/bin/tests/system/dispatch/ns1/root.db
new file mode 100644
index 0000000..b6b7367
--- /dev/null
+++ b/bin/tests/system/dispatch/ns1/root.db
@@ -0,0 +1,16 @@
+; Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+;
+; SPDX-License-Identifier: MPL-2.0
+;
+; This Source Code Form is subject to the terms of the Mozilla Public
+; License, v. 2.0. If a copy of the MPL was not distributed with this
+; file, you can obtain one at https://mozilla.org/MPL/2.0/.
+;
+; See the COPYRIGHT file distributed with this work for additional
+; information regarding copyright ownership.
+
+. 300 SOA . . 0 0 0 0 0
+. 300 NS ns.nil.
+ns.nil. 300 A 10.53.0.1
+example. 300 NS ns.example.
+ns.example. 300 A 10.53.0.2
diff --git a/bin/tests/system/dispatch/ns2/example.db b/bin/tests/system/dispatch/ns2/example.db
new file mode 100644
index 0000000..f60a47e
--- /dev/null
+++ b/bin/tests/system/dispatch/ns2/example.db
@@ -0,0 +1,17 @@
+; Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+;
+; SPDX-License-Identifier: MPL-2.0
+;
+; This Source Code Form is subject to the terms of the Mozilla Public
+; License, v. 2.0. If a copy of the MPL was not distributed with this
+; file, you can obtain one at https://mozilla.org/MPL/2.0/.
+;
+; See the COPYRIGHT file distributed with this work for additional
+; information regarding copyright ownership.
+
+example. 86400 IN SOA ns.example. root.example. 43 10800 900 604800 86400
+example. 86400 IN NS ns.example.
+ns.example. A 10.53.0.2
+
+ns.sub.example. A 10.53.0.3
+sub.example. NS ns.sub.example.
diff --git a/bin/tests/system/dispatch/ns2/named.conf.in b/bin/tests/system/dispatch/ns2/named.conf.in
new file mode 100644
index 0000000..50f2c34
--- /dev/null
+++ b/bin/tests/system/dispatch/ns2/named.conf.in
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+key rndc_key {
+ secret "1234abcd8765";
+ algorithm @DEFAULT_HMAC@;
+};
+
+controls {
+ inet 10.53.0.2 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
+};
+
+options {
+ port @PORT@;
+ pid-file "named.pid";
+
+ listen-on { 10.53.0.2; };
+ query-source address 10.53.0.2;
+ notify-source 10.53.0.2;
+ transfer-source 10.53.0.2;
+
+ listen-on-v6 { fd92:7065:b8e:ffff::2; };
+ query-source-v6 address fd92:7065:b8e:ffff::2;
+ notify-source-v6 fd92:7065:b8e:ffff::2;
+ transfer-source-v6 fd92:7065:b8e:ffff::2;
+
+ recursion yes;
+ servfail-ttl 0;
+ dnssec-validation no;
+};
+
+zone "." {
+ type hint;
+ file "../../common/root.hint";
+};
+
+zone "example" {
+ type primary;
+ file "example.db";
+};
diff --git a/bin/tests/system/dispatch/setup.sh b/bin/tests/system/dispatch/setup.sh
new file mode 100644
index 0000000..6929ec5
--- /dev/null
+++ b/bin/tests/system/dispatch/setup.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+. ../conf.sh
+
+copy_setports ns1/named.conf.in ns1/named.conf
+copy_setports ns2/named.conf.in ns2/named.conf
diff --git a/bin/tests/system/dispatch/tests_connreset.py b/bin/tests/system/dispatch/tests_connreset.py
new file mode 100644
index 0000000..f74bfd7
--- /dev/null
+++ b/bin/tests/system/dispatch/tests_connreset.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python3
+
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+import pytest
+
+pytest.importorskip("dns")
+import dns.message
+import dns.query
+import dns.rcode
+
+
+def test_connreset(named_port):
+ msg = dns.message.make_query(
+ "sub.example.", "A", want_dnssec=True, use_edns=0, payload=1232
+ )
+ ans = dns.query.udp(msg, "10.53.0.2", timeout=10, port=named_port)
+ assert ans.rcode() == dns.rcode.SERVFAIL