本文整理汇总了Python中twisted.names.client.Resolver方法的典型用法代码示例。如果您正苦于以下问题:Python client.Resolver方法的具体用法?Python client.Resolver怎么用?Python client.Resolver使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类twisted.names.client
的用法示例。
在下文中一共展示了client.Resolver方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _getResolver
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def _getResolver(self, serverResponses, maximumQueries=10):
"""
Create and return a new L{root.Resolver} modified to resolve queries
against the record data represented by C{servers}.
@param serverResponses: A mapping from dns server addresses to
mappings. The inner mappings are from query two-tuples (name,
type) to dictionaries suitable for use as **arguments to
L{_respond}. See that method for details.
"""
roots = ['1.1.2.3']
resolver = Resolver(roots, maximumQueries)
def query(query, serverAddresses, timeout, filter):
msg("Query for QNAME %s at %r" % (query.name, serverAddresses))
for addr in serverAddresses:
try:
server = serverResponses[addr]
except KeyError:
continue
records = server[query.name.name, query.type]
return succeed(self._respond(**records))
resolver._query = query
return resolver
示例2: test_lookupAddress
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_lookupAddress(self):
"""
L{root.Resolver.lookupAddress} looks up the I{A} records for the
specified hostname by first querying one of the root servers the
resolver was created with and then following the authority delegations
until a result is received.
"""
servers = {
('1.1.2.3', 53): {
(b'foo.example.com', A): {
'authority': [(b'foo.example.com', Record_NS(b'ns1.example.com'))],
'additional': [(b'ns1.example.com', Record_A('34.55.89.144'))],
},
},
('34.55.89.144', 53): {
(b'foo.example.com', A): {
'answers': [(b'foo.example.com', Record_A('10.0.0.1'))],
}
},
}
resolver = self._getResolver(servers)
d = resolver.lookupAddress(b'foo.example.com')
d.addCallback(getOneAddress)
d.addCallback(self.assertEqual, '10.0.0.1')
return d
示例3: test_delegationLookupEmpty
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_delegationLookupEmpty(self):
"""
If there are no records in the response to a lookup of a delegation
nameserver, the L{Deferred} returned by L{Resolver.lookupAddress} fires
with L{ResolverError}.
"""
servers = {
('1.1.2.3', 53): {
(b'example.com', A): {
'authority': [(b'example.com', Record_NS(b'ns1.example.com'))],
},
(b'ns1.example.com', A): {
},
},
}
resolver = self._getResolver(servers)
d = resolver.lookupAddress(b'example.com')
return self.assertFailure(d, ResolverError)
示例4: test_lookupNameservers
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_lookupNameservers(self):
"""
L{Resolver.lookupNameservers} is like L{Resolver.lookupAddress}, except
it queries for I{NS} records instead of I{A} records.
"""
servers = {
('1.1.2.3', 53): {
(b'example.com', A): {
'rCode': ENAME,
},
(b'example.com', NS): {
'answers': [(b'example.com', Record_NS(b'ns1.example.com'))],
},
},
}
resolver = self._getResolver(servers)
d = resolver.lookupNameservers(b'example.com')
def getOneName(results):
ans, auth, add = results
return ans[0].payload.name
d.addCallback(getOneName)
d.addCallback(self.assertEqual, Name(b'ns1.example.com'))
return d
示例5: test_continuesWhenSomeRootHintsFail
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_continuesWhenSomeRootHintsFail(self):
"""
The L{root.Resolver} is eventually created, even if some of the root
hint lookups fail. Only the working root hint IP addresses are supplied
to the L{root.Resolver}.
"""
stubResolver = StubResolver()
deferredResolver = root.bootstrap(stubResolver)
results = iter(stubResolver.pendingResults)
d1 = next(results)
for d in results:
d.callback('192.0.2.101')
d1.errback(TimeoutError())
def checkHints(res):
self.assertEqual(deferredResolver.hints, ['192.0.2.101'] * 12)
d1.addBoth(checkHints)
示例6: test_continuesWhenAllRootHintsFail
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_continuesWhenAllRootHintsFail(self):
"""
The L{root.Resolver} is eventually created, even if all of the root hint
lookups fail. Pending and new lookups will then fail with
AttributeError.
"""
stubResolver = StubResolver()
deferredResolver = root.bootstrap(stubResolver)
results = iter(stubResolver.pendingResults)
d1 = next(results)
for d in results:
d.errback(TimeoutError())
d1.errback(TimeoutError())
def checkHints(res):
self.assertEqual(deferredResolver.hints, [])
d1.addBoth(checkHints)
self.addCleanup(self.flushLoggedErrors, TimeoutError)
示例7: test_multipleSequentialRequests
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_multipleSequentialRequests(self):
"""
After a response is received to a query issued with
L{client.Resolver.query}, another query with the same parameters
results in a new network request.
"""
protocol = StubDNSDatagramProtocol()
resolver = client.Resolver(servers=[('example.com', 53)])
resolver._connectedProtocol = lambda: protocol
queries = protocol.queries
query = dns.Query(b'foo.example.com', dns.A)
# The first query should be passed to the underlying protocol.
resolver.query(query)
self.assertEqual(len(queries), 1)
# Deliver the response.
queries.pop()[-1].callback(dns.Message())
# Repeating the first query should touch the protocol again.
resolver.query(query)
self.assertEqual(len(queries), 1)
示例8: test_connectedProtocol
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_connectedProtocol(self):
"""
L{client.Resolver._connectedProtocol} returns a new
L{DNSDatagramProtocol} connected to a new address with a
cryptographically secure random port number.
"""
resolver = client.Resolver(servers=[('example.com', 53)])
firstProto = resolver._connectedProtocol()
secondProto = resolver._connectedProtocol()
self.assertIsNotNone(firstProto.transport)
self.assertIsNotNone(secondProto.transport)
self.assertNotEqual(
firstProto.transport.getHost().port,
secondProto.transport.getHost().port)
return defer.gatherResults([
defer.maybeDeferred(firstProto.transport.stopListening),
defer.maybeDeferred(secondProto.transport.stopListening)])
示例9: test_differentProtocol
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_differentProtocol(self):
"""
L{client.Resolver._connectedProtocol} is called once each time a UDP
request needs to be issued and the resulting protocol instance is used
for that request.
"""
resolver = client.Resolver(servers=[('example.com', 53)])
protocols = []
class FakeProtocol(object):
def __init__(self):
self.transport = StubPort()
def query(self, address, query, timeout=10, id=None):
protocols.append(self)
return defer.succeed(dns.Message())
resolver._connectedProtocol = FakeProtocol
resolver.query(dns.Query(b'foo.example.com'))
resolver.query(dns.Query(b'bar.example.com'))
self.assertEqual(len(set(protocols)), 2)
示例10: test_disallowedPort
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_disallowedPort(self):
"""
If a port number is initially selected which cannot be bound, the
L{CannotListenError} is handled and another port number is attempted.
"""
ports = []
class FakeReactor(object):
def listenUDP(self, port, *args, **kwargs):
ports.append(port)
if len(ports) == 1:
raise CannotListenError(None, port, None)
resolver = client.Resolver(servers=[('example.com', 53)])
resolver._reactor = FakeReactor()
resolver._connectedProtocol()
self.assertEqual(len(set(ports)), 2)
示例11: test_protocolShutDown
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_protocolShutDown(self):
"""
After the L{Deferred} returned by L{DNSDatagramProtocol.query} is
called back, the L{DNSDatagramProtocol} is disconnected from its
transport.
"""
resolver = client.Resolver(servers=[('example.com', 53)])
protocols = []
result = defer.Deferred()
class FakeProtocol(object):
def __init__(self):
self.transport = StubPort()
def query(self, address, query, timeout=10, id=None):
protocols.append(self)
return result
resolver._connectedProtocol = FakeProtocol
resolver.query(dns.Query(b'foo.example.com'))
self.assertFalse(protocols[0].transport.disconnected)
result.callback(dns.Message())
self.assertTrue(protocols[0].transport.disconnected)
示例12: test_singleTCPQueryErrbackOnConnectionFailure
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_singleTCPQueryErrbackOnConnectionFailure(self):
"""
The deferred returned by L{client.Resolver.queryTCP} will
errback when the TCP connection attempt fails. The reason for
the connection failure is passed as the argument to errback.
"""
reactor = proto_helpers.MemoryReactor()
resolver = client.Resolver(
servers=[('192.0.2.100', 53)],
reactor=reactor)
d = resolver.queryTCP(dns.Query('example.com'))
host, port, factory, timeout, bindAddress = reactor.tcpClients[0]
class SentinelException(Exception):
pass
factory.clientConnectionFailed(
reactor.connectors[0], failure.Failure(SentinelException()))
self.failureResultOf(d, SentinelException)
示例13: test_delegationLookupError
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_delegationLookupError(self):
"""
If there is an error resolving the nameserver in a delegation response,
the L{Deferred} returned by L{Resolver.lookupAddress} fires with that
error.
"""
servers = {
('1.1.2.3', 53): {
(b'example.com', A): {
'authority': [(b'example.com', Record_NS(b'ns1.example.com'))],
},
(b'ns1.example.com', A): {
'rCode': ENAME,
},
},
}
resolver = self._getResolver(servers)
d = resolver.lookupAddress(b'example.com')
return self.assertFailure(d, DNSNameError)
示例14: test_resolverFactoryOnlyExpectedArguments
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def test_resolverFactoryOnlyExpectedArguments(self):
"""
L{root.Resolver._resolverFactory} is supplied with C{reactor} and
C{servers} keyword arguments.
"""
dummyReactor = object()
r = Resolver(hints=['192.0.2.101'],
resolverFactory=raisingResolverFactory,
reactor=dummyReactor)
e = self.assertRaises(ResolverFactoryArguments,
r.lookupAddress, 'example.com')
self.assertEqual(
((), {'reactor': dummyReactor, 'servers': [('192.0.2.101', 53)]}),
(e.args, e.kwargs)
)
示例15: setUpDNS
# 需要导入模块: from twisted.names import client [as 别名]
# 或者: from twisted.names.client import Resolver [as 别名]
def setUpDNS(self):
self.auth = TestAuthority()
factory = server.DNSServerFactory([self.auth])
protocol = dns.DNSDatagramProtocol(factory)
while 1:
self.port = reactor.listenTCP(0, factory, interface='127.0.0.1')
portNumber = self.port.getHost().port
try:
self.udpPort = reactor.listenUDP(portNumber, protocol, interface='127.0.0.1')
except CannotListenError:
self.port.stopListening()
else:
break
self.resolver = client.Resolver(servers=[('127.0.0.1', portNumber)])