summaryrefslogtreecommitdiff
path: root/tests/test_query.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_query.py')
-rw-r--r--tests/test_query.py443
1 files changed, 249 insertions, 194 deletions
diff --git a/tests/test_query.py b/tests/test_query.py
index 2d954e3..e8a5390 100644
--- a/tests/test_query.py
+++ b/tests/test_query.py
@@ -22,6 +22,7 @@ import unittest
try:
import ssl
+
have_ssl = True
except Exception:
have_ssl = False
@@ -40,7 +41,7 @@ import dns.zone
# skip those if it's not there.
_network_available = True
try:
- socket.gethostbyname('dnspython.org')
+ socket.gethostbyname("dnspython.org")
except socket.gaierror:
_network_available = False
@@ -49,16 +50,21 @@ except socket.gaierror:
# those tests.
try:
from .nanonameserver import Server
+
_nanonameserver_available = True
except ImportError:
_nanonameserver_available = False
+
class Server(object):
pass
+
# Probe for IPv4 and IPv6
query_addresses = []
-for (af, address) in ((socket.AF_INET, '8.8.8.8'),
- (socket.AF_INET6, '2001:4860:4860::8888')):
+for (af, address) in (
+ (socket.AF_INET, "8.8.8.8"),
+ (socket.AF_INET6, "2001:4860:4860::8888"),
+):
try:
with socket.socket(af, socket.SOCK_DGRAM) as s:
# Connecting a UDP socket is supposed to return ENETUNREACH if
@@ -68,85 +74,93 @@ for (af, address) in ((socket.AF_INET, '8.8.8.8'),
except Exception:
pass
-keyring = dns.tsigkeyring.from_text({'name': 'tDz6cfXXGtNivRpQ98hr6A=='})
+keyring = dns.tsigkeyring.from_text({"name": "tDz6cfXXGtNivRpQ98hr6A=="})
+
@unittest.skipIf(not _network_available, "Internet not reachable")
class QueryTests(unittest.TestCase):
-
def testQueryUDP(self):
for address in query_addresses:
- qname = dns.name.from_text('dns.google.')
+ qname = dns.name.from_text("dns.google.")
q = dns.message.make_query(qname, dns.rdatatype.A)
response = dns.query.udp(q, address, timeout=2)
- rrs = response.get_rrset(response.answer, qname,
- dns.rdataclass.IN, dns.rdatatype.A)
+ rrs = response.get_rrset(
+ response.answer, qname, dns.rdataclass.IN, dns.rdatatype.A
+ )
self.assertTrue(rrs is not None)
seen = set([rdata.address for rdata in rrs])
- self.assertTrue('8.8.8.8' in seen)
- self.assertTrue('8.8.4.4' in seen)
+ self.assertTrue("8.8.8.8" in seen)
+ self.assertTrue("8.8.4.4" in seen)
def testQueryUDPWithSocket(self):
for address in query_addresses:
- with socket.socket(dns.inet.af_for_address(address),
- socket.SOCK_DGRAM) as s:
+ with socket.socket(
+ dns.inet.af_for_address(address), socket.SOCK_DGRAM
+ ) as s:
s.setblocking(0)
- qname = dns.name.from_text('dns.google.')
+ qname = dns.name.from_text("dns.google.")
q = dns.message.make_query(qname, dns.rdatatype.A)
response = dns.query.udp(q, address, sock=s, timeout=2)
- rrs = response.get_rrset(response.answer, qname,
- dns.rdataclass.IN, dns.rdatatype.A)
+ rrs = response.get_rrset(
+ response.answer, qname, dns.rdataclass.IN, dns.rdatatype.A
+ )
self.assertTrue(rrs is not None)
seen = set([rdata.address for rdata in rrs])
- self.assertTrue('8.8.8.8' in seen)
- self.assertTrue('8.8.4.4' in seen)
+ self.assertTrue("8.8.8.8" in seen)
+ self.assertTrue("8.8.4.4" in seen)
def testQueryTCP(self):
for address in query_addresses:
- qname = dns.name.from_text('dns.google.')
+ qname = dns.name.from_text("dns.google.")
q = dns.message.make_query(qname, dns.rdatatype.A)
response = dns.query.tcp(q, address, timeout=2)
- rrs = response.get_rrset(response.answer, qname,
- dns.rdataclass.IN, dns.rdatatype.A)
+ rrs = response.get_rrset(
+ response.answer, qname, dns.rdataclass.IN, dns.rdatatype.A
+ )
self.assertTrue(rrs is not None)
seen = set([rdata.address for rdata in rrs])
- self.assertTrue('8.8.8.8' in seen)
- self.assertTrue('8.8.4.4' in seen)
+ self.assertTrue("8.8.8.8" in seen)
+ self.assertTrue("8.8.4.4" in seen)
def testQueryTCPWithSocket(self):
for address in query_addresses:
- with socket.socket(dns.inet.af_for_address(address),
- socket.SOCK_STREAM) as s:
+ with socket.socket(
+ dns.inet.af_for_address(address), socket.SOCK_STREAM
+ ) as s:
ll = dns.inet.low_level_address_tuple((address, 53))
s.settimeout(2)
s.connect(ll)
s.setblocking(0)
- qname = dns.name.from_text('dns.google.')
+ qname = dns.name.from_text("dns.google.")
q = dns.message.make_query(qname, dns.rdatatype.A)
response = dns.query.tcp(q, None, sock=s, timeout=2)
- rrs = response.get_rrset(response.answer, qname,
- dns.rdataclass.IN, dns.rdatatype.A)
+ rrs = response.get_rrset(
+ response.answer, qname, dns.rdataclass.IN, dns.rdatatype.A
+ )
self.assertTrue(rrs is not None)
seen = set([rdata.address for rdata in rrs])
- self.assertTrue('8.8.8.8' in seen)
- self.assertTrue('8.8.4.4' in seen)
+ self.assertTrue("8.8.8.8" in seen)
+ self.assertTrue("8.8.4.4" in seen)
def testQueryTLS(self):
for address in query_addresses:
- qname = dns.name.from_text('dns.google.')
+ qname = dns.name.from_text("dns.google.")
q = dns.message.make_query(qname, dns.rdatatype.A)
response = dns.query.tls(q, address, timeout=2)
- rrs = response.get_rrset(response.answer, qname,
- dns.rdataclass.IN, dns.rdatatype.A)
+ rrs = response.get_rrset(
+ response.answer, qname, dns.rdataclass.IN, dns.rdatatype.A
+ )
self.assertTrue(rrs is not None)
seen = set([rdata.address for rdata in rrs])
- self.assertTrue('8.8.8.8' in seen)
- self.assertTrue('8.8.4.4' in seen)
+ self.assertTrue("8.8.8.8" in seen)
+ self.assertTrue("8.8.4.4" in seen)
@unittest.skipUnless(have_ssl, "No SSL support")
def testQueryTLSWithSocket(self):
for address in query_addresses:
- with socket.socket(dns.inet.af_for_address(address),
- socket.SOCK_STREAM) as base_s:
+ with socket.socket(
+ dns.inet.af_for_address(address), socket.SOCK_STREAM
+ ) as base_s:
ll = dns.inet.low_level_address_tuple((address, 853))
base_s.settimeout(2)
base_s.connect(ll)
@@ -155,21 +169,24 @@ class QueryTests(unittest.TestCase):
ctx.minimum_version = ssl.TLSVersion.TLSv1_2
else:
ctx.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1
- with ctx.wrap_socket(base_s, server_hostname='dns.google') as s: # lgtm[py/insecure-protocol]
+ with ctx.wrap_socket(
+ base_s, server_hostname="dns.google"
+ ) as s: # lgtm[py/insecure-protocol]
s.setblocking(0)
- qname = dns.name.from_text('dns.google.')
+ qname = dns.name.from_text("dns.google.")
q = dns.message.make_query(qname, dns.rdatatype.A)
response = dns.query.tls(q, None, sock=s, timeout=2)
- rrs = response.get_rrset(response.answer, qname,
- dns.rdataclass.IN, dns.rdatatype.A)
+ rrs = response.get_rrset(
+ response.answer, qname, dns.rdataclass.IN, dns.rdatatype.A
+ )
self.assertTrue(rrs is not None)
seen = set([rdata.address for rdata in rrs])
- self.assertTrue('8.8.8.8' in seen)
- self.assertTrue('8.8.4.4' in seen)
+ self.assertTrue("8.8.8.8" in seen)
+ self.assertTrue("8.8.4.4" in seen)
def testQueryUDPFallback(self):
for address in query_addresses:
- qname = dns.name.from_text('.')
+ qname = dns.name.from_text(".")
q = dns.message.make_query(qname, dns.rdatatype.DNSKEY)
(_, tcp) = dns.query.udp_with_fallback(q, address, timeout=2)
self.assertTrue(tcp)
@@ -184,116 +201,120 @@ class QueryTests(unittest.TestCase):
tcp_s.settimeout(2)
tcp_s.connect(ll)
tcp_s.setblocking(0)
- qname = dns.name.from_text('.')
+ qname = dns.name.from_text(".")
q = dns.message.make_query(qname, dns.rdatatype.DNSKEY)
- (_, tcp) = dns.query.udp_with_fallback(q, address,
- udp_sock=udp_s,
- tcp_sock=tcp_s,
- timeout=2)
+ (_, tcp) = dns.query.udp_with_fallback(
+ q, address, udp_sock=udp_s, tcp_sock=tcp_s, timeout=2
+ )
self.assertTrue(tcp)
def testQueryUDPFallbackNoFallback(self):
for address in query_addresses:
- qname = dns.name.from_text('dns.google.')
+ qname = dns.name.from_text("dns.google.")
q = dns.message.make_query(qname, dns.rdatatype.A)
(_, tcp) = dns.query.udp_with_fallback(q, address, timeout=2)
self.assertFalse(tcp)
def testUDPReceiveQuery(self):
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as listener:
- listener.bind(('127.0.0.1', 0))
+ listener.bind(("127.0.0.1", 0))
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sender:
- sender.bind(('127.0.0.1', 0))
- q = dns.message.make_query('dns.google', dns.rdatatype.A)
+ sender.bind(("127.0.0.1", 0))
+ q = dns.message.make_query("dns.google", dns.rdatatype.A)
dns.query.send_udp(sender, q, listener.getsockname())
expiration = time.time() + 2
- (q, _, addr) = dns.query.receive_udp(listener,
- expiration=expiration)
+ (q, _, addr) = dns.query.receive_udp(listener, expiration=expiration)
self.assertEqual(addr, sender.getsockname())
# for brevity
_d_and_s = dns.query._destination_and_source
-class DestinationAndSourceTests(unittest.TestCase):
+class DestinationAndSourceTests(unittest.TestCase):
def test_af_inferred_from_where(self):
- (af, d, s) = _d_and_s('1.2.3.4', 53, None, 0)
+ (af, d, s) = _d_and_s("1.2.3.4", 53, None, 0)
self.assertEqual(af, socket.AF_INET)
def test_af_inferred_from_where(self):
- (af, d, s) = _d_and_s('1::2', 53, None, 0)
+ (af, d, s) = _d_and_s("1::2", 53, None, 0)
self.assertEqual(af, socket.AF_INET6)
def test_af_inferred_from_source(self):
- (af, d, s) = _d_and_s('https://example/dns-query', 443,
- '1.2.3.4', 0, False)
+ (af, d, s) = _d_and_s("https://example/dns-query", 443, "1.2.3.4", 0, False)
self.assertEqual(af, socket.AF_INET)
def test_af_mismatch(self):
def bad():
- (af, d, s) = _d_and_s('1::2', 53, '1.2.3.4', 0)
+ (af, d, s) = _d_and_s("1::2", 53, "1.2.3.4", 0)
+
self.assertRaises(ValueError, bad)
def test_source_port_but_no_af_inferred(self):
def bad():
- (af, d, s) = _d_and_s('https://example/dns-query', 443,
- None, 12345, False)
+ (af, d, s) = _d_and_s("https://example/dns-query", 443, None, 12345, False)
+
self.assertRaises(ValueError, bad)
def test_where_must_be_an_address(self):
def bad():
- (af, d, s) = _d_and_s('not a valid address', 53, '1.2.3.4', 0)
+ (af, d, s) = _d_and_s("not a valid address", 53, "1.2.3.4", 0)
+
self.assertRaises(ValueError, bad)
def test_destination_is_none_of_where_url(self):
- (af, d, s) = _d_and_s('https://example/dns-query', 443, None, 0, False)
+ (af, d, s) = _d_and_s("https://example/dns-query", 443, None, 0, False)
self.assertEqual(d, None)
def test_v4_wildcard_source_set(self):
- (af, d, s) = _d_and_s('1.2.3.4', 53, None, 12345)
- self.assertEqual(s, ('0.0.0.0', 12345))
+ (af, d, s) = _d_and_s("1.2.3.4", 53, None, 12345)
+ self.assertEqual(s, ("0.0.0.0", 12345))
def test_v6_wildcard_source_set(self):
- (af, d, s) = _d_and_s('1::2', 53, None, 12345)
- self.assertEqual(s, ('::', 12345, 0, 0))
+ (af, d, s) = _d_and_s("1::2", 53, None, 12345)
+ self.assertEqual(s, ("::", 12345, 0, 0))
class AddressesEqualTestCase(unittest.TestCase):
-
def test_v4(self):
- self.assertTrue(dns.query._addresses_equal(socket.AF_INET,
- ('10.0.0.1', 53),
- ('10.0.0.1', 53)))
- self.assertFalse(dns.query._addresses_equal(socket.AF_INET,
- ('10.0.0.1', 53),
- ('10.0.0.2', 53)))
+ self.assertTrue(
+ dns.query._addresses_equal(
+ socket.AF_INET, ("10.0.0.1", 53), ("10.0.0.1", 53)
+ )
+ )
+ self.assertFalse(
+ dns.query._addresses_equal(
+ socket.AF_INET, ("10.0.0.1", 53), ("10.0.0.2", 53)
+ )
+ )
def test_v6(self):
- self.assertTrue(dns.query._addresses_equal(socket.AF_INET6,
- ('1::1', 53),
- ('0001:0000::1', 53)))
- self.assertFalse(dns.query._addresses_equal(socket.AF_INET6,
- ('::1', 53),
- ('::2', 53)))
+ self.assertTrue(
+ dns.query._addresses_equal(
+ socket.AF_INET6, ("1::1", 53), ("0001:0000::1", 53)
+ )
+ )
+ self.assertFalse(
+ dns.query._addresses_equal(socket.AF_INET6, ("::1", 53), ("::2", 53))
+ )
def test_mixed(self):
- self.assertFalse(dns.query._addresses_equal(socket.AF_INET,
- ('10.0.0.1', 53),
- ('::2', 53)))
+ self.assertFalse(
+ dns.query._addresses_equal(socket.AF_INET, ("10.0.0.1", 53), ("::2", 53))
+ )
-axfr_zone = '''
+axfr_zone = """
$TTL 300
@ SOA ns1 root 1 7200 900 1209600 86400
@ NS ns1
@ NS ns2
ns1 A 10.0.0.1
ns2 A 10.0.0.1
-'''
+"""
-class AXFRNanoNameserver(Server):
+class AXFRNanoNameserver(Server):
def handle(self, request):
self.zone = dns.zone.from_text(axfr_zone, origin=self.origin)
self.origin = self.zone.origin
@@ -307,11 +328,11 @@ class AXFRNanoNameserver(Server):
response.question = []
response.flags |= dns.flags.AA
for (name, rdataset) in self.zone.iterate_rdatasets():
- if rdataset.rdtype == dns.rdatatype.SOA and \
- name == dns.name.empty:
+ if rdataset.rdtype == dns.rdatatype.SOA and name == dns.name.empty:
continue
- rrset = dns.rrset.RRset(name, rdataset.rdclass, rdataset.rdtype,
- rdataset.covers)
+ rrset = dns.rrset.RRset(
+ name, rdataset.rdclass, rdataset.rdtype, rdataset.covers
+ )
rrset.update(rdataset)
response.answer.append(rrset)
items.append(response)
@@ -322,7 +343,8 @@ class AXFRNanoNameserver(Server):
items.append(response)
return items
-ixfr_message = '''id 12345
+
+ixfr_message = """id 12345
opcode QUERY
rcode NOERROR
flags AA
@@ -340,11 +362,11 @@ example. 300 SOA ns1.example. root.example. 3 7200 900 1209600 86400
example. 300 IN SOA ns1.example. root.example. 4 7200 900 1209600 86400
added2.example. 300 IN A 10.0.0.5
example. 300 IN SOA ns1.example. root.example. 4 7200 900 1209600 86400
-'''
+"""
-ixfr_trailing_junk = ixfr_message + 'junk.example. 300 IN A 10.0.0.6'
+ixfr_trailing_junk = ixfr_message + "junk.example. 300 IN A 10.0.0.6"
-ixfr_up_to_date_message = '''id 12345
+ixfr_up_to_date_message = """id 12345
opcode QUERY
rcode NOERROR
flags AA
@@ -352,9 +374,9 @@ flags AA
example. IN IXFR
;ANSWER
example. 300 IN SOA ns1.example. root.example. 2 7200 900 1209600 86400
-'''
+"""
-axfr_trailing_junk = '''id 12345
+axfr_trailing_junk = """id 12345
opcode QUERY
rcode NOERROR
flags AA
@@ -367,10 +389,10 @@ added2.example. 300 IN A 10.0.0.5
changed.example. 300 IN A 10.0.0.4
example. 300 IN SOA ns1.example. root.example. 3 7200 900 1209600 86400
junk.example. 300 IN A 10.0.0.6
-'''
+"""
-class IXFRNanoNameserver(Server):
+class IXFRNanoNameserver(Server):
def __init__(self, response_text):
super().__init__()
self.response_text = response_text
@@ -383,137 +405,167 @@ class IXFRNanoNameserver(Server):
except Exception:
pass
+
@unittest.skipIf(not _nanonameserver_available, "nanonameserver required")
class XfrTests(unittest.TestCase):
-
def test_axfr(self):
- expected = dns.zone.from_text(axfr_zone, origin='example')
- with AXFRNanoNameserver(origin='example') as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], 'example',
- port=ns.tcp_address[1])
+ expected = dns.zone.from_text(axfr_zone, origin="example")
+ with AXFRNanoNameserver(origin="example") as ns:
+ xfr = dns.query.xfr(ns.tcp_address[0], "example", port=ns.tcp_address[1])
zone = dns.zone.from_xfr(xfr)
self.assertEqual(zone, expected)
def test_axfr_tsig(self):
- expected = dns.zone.from_text(axfr_zone, origin='example')
- with AXFRNanoNameserver(origin='example', keyring=keyring) as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], 'example',
- port=ns.tcp_address[1],
- keyring=keyring, keyname='name')
+ expected = dns.zone.from_text(axfr_zone, origin="example")
+ with AXFRNanoNameserver(origin="example", keyring=keyring) as ns:
+ xfr = dns.query.xfr(
+ ns.tcp_address[0],
+ "example",
+ port=ns.tcp_address[1],
+ keyring=keyring,
+ keyname="name",
+ )
zone = dns.zone.from_xfr(xfr)
self.assertEqual(zone, expected)
def test_axfr_root_tsig(self):
- expected = dns.zone.from_text(axfr_zone, origin='.')
- with AXFRNanoNameserver(origin='.', keyring=keyring) as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], '.',
- port=ns.tcp_address[1],
- keyring=keyring, keyname='name')
+ expected = dns.zone.from_text(axfr_zone, origin=".")
+ with AXFRNanoNameserver(origin=".", keyring=keyring) as ns:
+ xfr = dns.query.xfr(
+ ns.tcp_address[0],
+ ".",
+ port=ns.tcp_address[1],
+ keyring=keyring,
+ keyname="name",
+ )
zone = dns.zone.from_xfr(xfr)
self.assertEqual(zone, expected)
def test_axfr_udp(self):
def bad():
- with AXFRNanoNameserver(origin='example') as ns:
- xfr = dns.query.xfr(ns.udp_address[0], 'example',
- port=ns.udp_address[1], use_udp=True)
+ with AXFRNanoNameserver(origin="example") as ns:
+ xfr = dns.query.xfr(
+ ns.udp_address[0], "example", port=ns.udp_address[1], use_udp=True
+ )
l = list(xfr)
+
self.assertRaises(ValueError, bad)
def test_axfr_bad_rcode(self):
def bad():
# We just use Server here as by default it will refuse.
with Server() as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], 'example',
- port=ns.tcp_address[1])
+ xfr = dns.query.xfr(
+ ns.tcp_address[0], "example", port=ns.tcp_address[1]
+ )
l = list(xfr)
+
self.assertRaises(dns.query.TransferError, bad)
def test_axfr_trailing_junk(self):
# we use the IXFR server here as it returns messages
def bad():
with IXFRNanoNameserver(axfr_trailing_junk) as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], 'example',
- dns.rdatatype.AXFR,
- port=ns.tcp_address[1])
+ xfr = dns.query.xfr(
+ ns.tcp_address[0],
+ "example",
+ dns.rdatatype.AXFR,
+ port=ns.tcp_address[1],
+ )
l = list(xfr)
+
self.assertRaises(dns.exception.FormError, bad)
def test_ixfr_tcp(self):
with IXFRNanoNameserver(ixfr_message) as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], 'example',
- dns.rdatatype.IXFR,
- port=ns.tcp_address[1],
- serial=2,
- relativize=False)
+ xfr = dns.query.xfr(
+ ns.tcp_address[0],
+ "example",
+ dns.rdatatype.IXFR,
+ port=ns.tcp_address[1],
+ serial=2,
+ relativize=False,
+ )
l = list(xfr)
self.assertEqual(len(l), 1)
- expected = dns.message.from_text(ixfr_message,
- one_rr_per_rrset=True)
+ expected = dns.message.from_text(ixfr_message, one_rr_per_rrset=True)
expected.id = l[0].id
self.assertEqual(l[0], expected)
def test_ixfr_udp(self):
with IXFRNanoNameserver(ixfr_message) as ns:
- xfr = dns.query.xfr(ns.udp_address[0], 'example',
- dns.rdatatype.IXFR,
- port=ns.udp_address[1],
- serial=2,
- relativize=False, use_udp=True)
+ xfr = dns.query.xfr(
+ ns.udp_address[0],
+ "example",
+ dns.rdatatype.IXFR,
+ port=ns.udp_address[1],
+ serial=2,
+ relativize=False,
+ use_udp=True,
+ )
l = list(xfr)
self.assertEqual(len(l), 1)
- expected = dns.message.from_text(ixfr_message,
- one_rr_per_rrset=True)
+ expected = dns.message.from_text(ixfr_message, one_rr_per_rrset=True)
expected.id = l[0].id
self.assertEqual(l[0], expected)
def test_ixfr_up_to_date(self):
with IXFRNanoNameserver(ixfr_up_to_date_message) as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], 'example',
- dns.rdatatype.IXFR,
- port=ns.tcp_address[1],
- serial=2,
- relativize=False)
+ xfr = dns.query.xfr(
+ ns.tcp_address[0],
+ "example",
+ dns.rdatatype.IXFR,
+ port=ns.tcp_address[1],
+ serial=2,
+ relativize=False,
+ )
l = list(xfr)
self.assertEqual(len(l), 1)
- expected = dns.message.from_text(ixfr_up_to_date_message,
- one_rr_per_rrset=True)
+ expected = dns.message.from_text(
+ ixfr_up_to_date_message, one_rr_per_rrset=True
+ )
expected.id = l[0].id
self.assertEqual(l[0], expected)
def test_ixfr_trailing_junk(self):
def bad():
with IXFRNanoNameserver(ixfr_trailing_junk) as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], 'example',
- dns.rdatatype.IXFR,
- port=ns.tcp_address[1],
- serial=2,
- relativize=False)
+ xfr = dns.query.xfr(
+ ns.tcp_address[0],
+ "example",
+ dns.rdatatype.IXFR,
+ port=ns.tcp_address[1],
+ serial=2,
+ relativize=False,
+ )
l = list(xfr)
+
self.assertRaises(dns.exception.FormError, bad)
def test_ixfr_base_serial_mismatch(self):
def bad():
with IXFRNanoNameserver(ixfr_message) as ns:
- xfr = dns.query.xfr(ns.tcp_address[0], 'example',
- dns.rdatatype.IXFR,
- port=ns.tcp_address[1],
- serial=1,
- relativize=False)
+ xfr = dns.query.xfr(
+ ns.tcp_address[0],
+ "example",
+ dns.rdatatype.IXFR,
+ port=ns.tcp_address[1],
+ serial=1,
+ relativize=False,
+ )
l = list(xfr)
+
self.assertRaises(dns.exception.FormError, bad)
-class TSIGNanoNameserver(Server):
+class TSIGNanoNameserver(Server):
def handle(self, request):
response = dns.message.make_response(request.message)
response.set_rcode(dns.rcode.REFUSED)
response.flags |= dns.flags.RA
try:
- if request.qtype == dns.rdatatype.A and \
- request.qclass == dns.rdataclass.IN:
- rrs = dns.rrset.from_text(request.qname, 300,
- 'IN', 'A', '1.2.3.4')
+ if request.qtype == dns.rdatatype.A and request.qclass == dns.rdataclass.IN:
+ rrs = dns.rrset.from_text(request.qname, 300, "IN", "A", "1.2.3.4")
response.answer.append(rrs)
response.set_rcode(dns.rcode.NOERROR)
response.flags |= dns.flags.AA
@@ -521,27 +573,26 @@ class TSIGNanoNameserver(Server):
pass
return response
+
@unittest.skipIf(not _nanonameserver_available, "nanonameserver required")
class TsigTests(unittest.TestCase):
-
def test_tsig(self):
with TSIGNanoNameserver(keyring=keyring) as ns:
- qname = dns.name.from_text('example.com')
- q = dns.message.make_query(qname, 'A')
- q.use_tsig(keyring=keyring, keyname='name')
- response = dns.query.udp(q, ns.udp_address[0],
- port=ns.udp_address[1])
+ qname = dns.name.from_text("example.com")
+ q = dns.message.make_query(qname, "A")
+ q.use_tsig(keyring=keyring, keyname="name")
+ response = dns.query.udp(q, ns.udp_address[0], port=ns.udp_address[1])
self.assertTrue(response.had_tsig)
- rrs = response.get_rrset(response.answer, qname,
- dns.rdataclass.IN, dns.rdatatype.A)
+ rrs = response.get_rrset(
+ response.answer, qname, dns.rdataclass.IN, dns.rdatatype.A
+ )
self.assertTrue(rrs is not None)
seen = set([rdata.address for rdata in rrs])
- self.assertTrue('1.2.3.4' in seen)
+ self.assertTrue("1.2.3.4" in seen)
-@unittest.skipIf(sys.platform == 'win32',
- 'low level tests do not work on win32')
-class LowLevelWaitTests(unittest.TestCase):
+@unittest.skipIf(sys.platform == "win32", "low level tests do not work on win32")
+class LowLevelWaitTests(unittest.TestCase):
def test_wait_for(self):
try:
(l, r) = socket.socketpair()
@@ -560,28 +611,32 @@ class LowLevelWaitTests(unittest.TestCase):
class MiscTests(unittest.TestCase):
def test_matches_destination(self):
- self.assertTrue(dns.query._matches_destination(socket.AF_INET,
- ('10.0.0.1', 1234),
- ('10.0.0.1', 1234),
- True))
- self.assertTrue(dns.query._matches_destination(socket.AF_INET6,
- ('1::2', 1234),
- ('0001::2', 1234),
- True))
- self.assertTrue(dns.query._matches_destination(socket.AF_INET,
- ('10.0.0.1', 1234),
- None,
- True))
- self.assertFalse(dns.query._matches_destination(socket.AF_INET,
- ('10.0.0.1', 1234),
- ('10.0.0.2', 1234),
- True))
- self.assertFalse(dns.query._matches_destination(socket.AF_INET,
- ('10.0.0.1', 1234),
- ('10.0.0.1', 1235),
- True))
+ self.assertTrue(
+ dns.query._matches_destination(
+ socket.AF_INET, ("10.0.0.1", 1234), ("10.0.0.1", 1234), True
+ )
+ )
+ self.assertTrue(
+ dns.query._matches_destination(
+ socket.AF_INET6, ("1::2", 1234), ("0001::2", 1234), True
+ )
+ )
+ self.assertTrue(
+ dns.query._matches_destination(
+ socket.AF_INET, ("10.0.0.1", 1234), None, True
+ )
+ )
+ self.assertFalse(
+ dns.query._matches_destination(
+ socket.AF_INET, ("10.0.0.1", 1234), ("10.0.0.2", 1234), True
+ )
+ )
+ self.assertFalse(
+ dns.query._matches_destination(
+ socket.AF_INET, ("10.0.0.1", 1234), ("10.0.0.1", 1235), True
+ )
+ )
with self.assertRaises(dns.query.UnexpectedSource):
- dns.query._matches_destination(socket.AF_INET,
- ('10.0.0.1', 1234),
- ('10.0.0.1', 1235),
- False)
+ dns.query._matches_destination(
+ socket.AF_INET, ("10.0.0.1", 1234), ("10.0.0.1", 1235), False
+ )