def test_followCanonicalName(self):
     """
     If no record of the requested type is included in a response, but a
     I{CNAME} record for the query name is included, queries are made to
     resolve the value of the I{CNAME}.
     """
     servers = {
         ("1.1.2.3", 53): {
             (b"example.com", A): {
                 "answers":
                 [(b"example.com", Record_CNAME(b"example.net"))],
             },
             (b"example.net", A): {
                 "answers": [(b"example.net", Record_A("10.0.0.5"))],
             },
         },
     }
     resolver = self._getResolver(servers)
     d = resolver.lookupAddress(b"example.com")
     d.addCallback(lambda results: results[0])  # Get the answer section
     d.addCallback(
         self.assertEqual,
         [
             RRHeader(b"example.com",
                      CNAME,
                      payload=Record_CNAME(b"example.net")),
             RRHeader(b"example.net", A, payload=Record_A("10.0.0.5")),
         ],
     )
     return d
 def test_returnCanonicalName(self):
     """
     If a I{CNAME} record is encountered as the answer to a query for
     another record type, that record is returned as the answer.
     """
     servers = {
         ("1.1.2.3", 53): {
             (b"example.com", A): {
                 "answers": [
                     (b"example.com", Record_CNAME(b"example.net")),
                     (b"example.net", Record_A("10.0.0.7")),
                 ],
             },
         },
     }
     resolver = self._getResolver(servers)
     d = resolver.lookupAddress(b"example.com")
     d.addCallback(lambda results: results[0])  # Get the answer section
     d.addCallback(
         self.assertEqual,
         [
             RRHeader(b"example.com",
                      CNAME,
                      payload=Record_CNAME(b"example.net")),
             RRHeader(b"example.net", A, payload=Record_A("10.0.0.7")),
         ],
     )
     return d
 def test_followCanonicalName(self):
     """
     If no record of the requested type is included in a response, but a
     I{CNAME} record for the query name is included, queries are made to
     resolve the value of the I{CNAME}.
     """
     servers = {
         ('1.1.2.3', 53): {
             ('example.com', A): {
                 'answers': [('example.com', Record_CNAME('example.net'))],
             },
             ('example.net', A): {
                 'answers': [('example.net', Record_A('10.0.0.5'))],
             },
         },
     }
     resolver = self._getResolver(servers)
     d = resolver.lookupAddress('example.com')
     d.addCallback(lambda (ans, auth, add): ans)
     d.addCallback(self.assertEquals, [
         RRHeader('example.com', CNAME,
                  payload=Record_CNAME('example.net')),
         RRHeader('example.net', A, payload=Record_A('10.0.0.5'))
     ])
     return d
Example #4
0
 def test_detectCanonicalNameLoop(self):
     """
     If there is a cycle between I{CNAME} records in a response, this is
     detected and the L{Deferred} returned by the lookup method fails
     with L{ResolverError}.
     """
     servers = {
         ('1.1.2.3', 53): {
             ('example.com', A): {
                 'answers': [('example.com', Record_CNAME('example.net')),
                             ('example.net', Record_CNAME('example.com'))],
             },
         },
     }
     resolver = self._getResolver(servers)
     d = resolver.lookupAddress('example.com')
     return self.assertFailure(d, ResolverError)
 def test_returnCanonicalName(self):
     """
     If a I{CNAME} record is encountered as the answer to a query for
     another record type, that record is returned as the answer.
     """
     servers = {
         ('1.1.2.3', 53): {
             ('example.com', A): {
                 'answers': [('example.com', Record_CNAME('example.net')),
                             ('example.net', Record_A('10.0.0.7'))],
             },
         },
     }
     resolver = self._getResolver(servers)
     d = resolver.lookupAddress('example.com')
     d.addCallback(lambda (ans, auth, add): ans)
     d.addCallback(self.assertEquals, [
         RRHeader('example.com', CNAME,
                  payload=Record_CNAME('example.net')),
         RRHeader('example.net', A, payload=Record_A('10.0.0.7'))
     ])
     return d