def test_resolverUsesOnlyParameterizedReactor(self): """ If a reactor instance is supplied to L{client.Resolver} L{client.Resolver._connectedProtocol} should pass that reactor to L{twisted.names.dns.DNSDatagramProtocol}. """ reactor = MemoryReactor() resolver = client.Resolver(resolv=self.mktemp(), reactor=reactor) proto = resolver._connectedProtocol() self.assertIs(proto._reactor, reactor)
def _queryTest(self, filter): """ Invoke L{Resolver._query} and verify that it sends the correct DNS query. Deliver a canned response to the query and return whatever the L{Deferred} returned by L{Resolver._query} fires with. @param filter: The value to pass for the C{filter} parameter to L{Resolver._query}. """ reactor = MemoryReactor() resolver = Resolver([], reactor=reactor) d = resolver._query( Query(b"foo.example.com", A, IN), [("1.1.2.3", 1053)], (30,), filter ) # A UDP port should have been started. portNumber, transport = reactor.udpPorts.popitem() # And a DNS packet sent. [(packet, address)] = transport._sentPackets message = Message() message.fromStr(packet) # It should be a query with the parameters used above. self.assertEqual(message.queries, [Query(b"foo.example.com", A, IN)]) self.assertEqual(message.answers, []) self.assertEqual(message.authority, []) self.assertEqual(message.additional, []) response = [] d.addCallback(response.append) self.assertEqual(response, []) # Once a reply is received, the Deferred should fire. del message.queries[:] message.answer = 1 message.answers.append( RRHeader(b"foo.example.com", payload=Record_A("5.8.13.21")) ) transport._protocol.datagramReceived(message.toStr(), ("1.1.2.3", 1053)) return response[0]