예제 #1
0
 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)
예제 #2
0
    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]