summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2020-07-26 13:22:33 -0700
committerBob Halley <halley@dnspython.org>2020-07-26 13:22:33 -0700
commit12ef3c47fa39e3bb0b5a8a2dbcd6c657d0afb16b (patch)
tree887acaeac47aefc6005b9cf8c9dddf6a7625e12d /tests
parente73550dc1cbc3e01f09a87b013c9f3c0518f3ba3 (diff)
downloaddnspython-12ef3c47fa39e3bb0b5a8a2dbcd6c657d0afb16b.tar.gz
more resolver override testing
Diffstat (limited to 'tests')
-rw-r--r--tests/test_resolver.py7
-rw-r--r--tests/test_resolver_override.py74
2 files changed, 80 insertions, 1 deletions
diff --git a/tests/test_resolver.py b/tests/test_resolver.py
index 6270fd3..d61e8c9 100644
--- a/tests/test_resolver.py
+++ b/tests/test_resolver.py
@@ -633,7 +633,12 @@ class LiveResolverTests(unittest.TestCase):
qtype = dns.rdatatype.from_text('A')
def bad():
answer = dns.resolver.resolve(qname, qtype)
- self.assertRaises(dns.resolver.NXDOMAIN, bad)
+ try:
+ dns.resolver.resolve(qname, qtype)
+ self.assertTrue(False) # should not happen!
+ except dns.resolver.NXDOMAIN as nx:
+ self.assertIn(qname, nx.qnames())
+ self.assertGreaterEqual(len(nx.responses()), 1)
def testResolveCacheHit(self):
res = dns.resolver.Resolver(configure=False)
diff --git a/tests/test_resolver_override.py b/tests/test_resolver_override.py
index acb8f87..c7d5a01 100644
--- a/tests/test_resolver_override.py
+++ b/tests/test_resolver_override.py
@@ -17,6 +17,7 @@ try:
except socket.gaierror:
_network_available = False
+
@unittest.skipIf(not _network_available, "Internet not reachable")
class OverrideSystemResolverTestCase(unittest.TestCase):
@@ -118,6 +119,30 @@ class OverrideSystemResolverTestCase(unittest.TestCase):
except socket.gaierror as e:
self.assertEqual(e.errno, socket.EAI_NONAME)
+ def test_getaddrinfo_only_service(self):
+ infos = socket.getaddrinfo(service=53, family=socket.AF_INET,
+ socktype=socket.SOCK_DGRAM,
+ proto=socket.IPPROTO_UDP)
+ self.assertEqual(len(infos), 1)
+ info = infos[0]
+ self.assertEqual(info[0], socket.AF_INET)
+ self.assertEqual(info[1], socket.SOCK_DGRAM)
+ self.assertEqual(info[2], socket.IPPROTO_UDP)
+ self.assertEqual(info[4], ('127.0.0.1', 53))
+
+ def test_unknown_service_fails(self):
+ with self.assertRaises(socket.gaierror):
+ socket.getaddrinfo('dns.google.', 'bogus-service')
+
+ def test_getnameinfo_tcp(self):
+ info = socket.getnameinfo(('8.8.8.8', 53))
+ self.assertEqual(info, ('dns.google', 'domain'))
+
+ def test_getnameinfo_udp(self):
+ info = socket.getnameinfo(('8.8.8.8', 53), socket.NI_DGRAM)
+ self.assertEqual(info, ('dns.google', 'domain'))
+
+
# Give up on testing this for now as all of the names I've considered
# using for testing are part of CDNs and there is deep magic in
# gethostbyaddr() that python's getfqdn() is using. At any rate,
@@ -145,3 +170,52 @@ class OverrideSystemResolverTestCase(unittest.TestCase):
b = socket.gethostbyaddr('2001:4860:4860::8888')
self.assertEqual(a[0], b[0])
self.assertEqual(a[2], b[2])
+
+
+class FakeResolver:
+ def resolve(self, *args, **kwargs):
+ raise dns.exception.Timeout
+
+
+class OverrideSystemResolverUsingFakeResolverTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.res = FakeResolver()
+ dns.resolver.override_system_resolver(self.res)
+
+ def tearDown(self):
+ dns.resolver.restore_system_resolver()
+ self.res = None
+
+ def test_temporary_failure(self):
+ with self.assertRaises(socket.gaierror):
+ socket.getaddrinfo('dns.google')
+
+ # We don't need the fake resolver for the following tests, but we
+ # don't need the live network either, so we're testing here.
+
+ def test_no_host_or_service_fails(self):
+ with self.assertRaises(socket.gaierror):
+ socket.getaddrinfo()
+
+ def test_AI_ADDRCONFIG_fails(self):
+ with self.assertRaises(socket.gaierror):
+ socket.getaddrinfo('dns.google', flags=socket.AI_ADDRCONFIG)
+
+ def test_gethostbyaddr_of_name_fails(self):
+ with self.assertRaises(socket.gaierror):
+ socket.gethostbyaddr('bogus')
+
+
+class OverrideSystemResolverUsingDefaultResolverTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.res = FakeResolver()
+ dns.resolver.override_system_resolver()
+
+ def tearDown(self):
+ dns.resolver.restore_system_resolver()
+ self.res = None
+
+ def test_override(self):
+ self.assertEqual(dns.resolver._resolver, dns.resolver.default_resolver)