``list``.
"""
if isinstance(nameservers, list):
+ for nameserver in nameservers:
+ if not dns.inet.is_address(nameserver):
+ try:
+ if urlparse(nameserver).scheme != 'https':
+ raise NotImplementedError
+ except Exception:
+ raise ValueError(f'nameserver {nameserver} is not an '
+ 'IP address or valid https URL')
self._nameservers = nameservers
else:
raise ValueError('nameservers must be a list'
source_port=source_port,
raise_on_truncation=True)
else:
- protocol = urlparse(nameserver).scheme
- if protocol != 'https':
- raise NotImplementedError
response = dns.query.https(request, nameserver,
timeout=timeout)
except Exception as ex:
return await dns.asyncresolver.canonical_name(name)
self.assertEqual(self.async_run(run), cname)
- def testResolverBadScheme(self):
- res = dns.asyncresolver.Resolver(configure=False)
- res.nameservers = ['bogus://dns.google/dns-query']
- async def run():
- answer = await res.resolve('dns.google', 'A')
- def bad():
- self.async_run(run)
- self.assertRaises(dns.resolver.NoNameservers, bad)
def testZoneForName1(self):
async def run():
self.assertTrue('8.8.8.8' in seen)
self.assertTrue('8.8.4.4' in seen)
- def test_resolver_bad_scheme(self):
- res = dns.resolver.Resolver(configure=False)
- res.nameservers = ['bogus://dns.google/dns-query']
- def bad():
- answer = res.resolve('dns.google', 'A')
- self.assertRaises(dns.resolver.NoNameservers, bad)
if __name__ == '__main__':
unittest.main()
cname = dns.name.from_text('dangling-target.dnspython.org')
self.assertEqual(dns.resolver.canonical_name(name), cname)
+ def testNameserverSetting(self):
+ res = dns.resolver.Resolver(configure=False)
+ ns = ['1.2.3.4', '::1', 'https://ns.example']
+ res.nameservers = ns[:]
+ self.assertEqual(res.nameservers, ns)
+ for ns in ['999.999.999.999', 'ns.example.', 'bogus://ns.example']:
+ with self.assertRaises(ValueError):
+ res.nameservers = [ns]
+
+
class PollingMonkeyPatchMixin(object):
def setUp(self):
self.__native_selector_class = dns.query._selector_class