]> granicus.if.org Git - pdns/commitdiff
Add tests for getFakeAAAARecords
authorPieter Lexis <pieter.lexis@powerdns.com>
Fri, 11 Jan 2019 14:23:11 +0000 (15:23 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Fri, 11 Jan 2019 15:28:24 +0000 (16:28 +0100)
regression-tests.recursor-dnssec/recursortests.py
regression-tests.recursor-dnssec/test_Lua.py

index ec1b0fce46acfc95cc37e0043779dd7e9a5183d6..74374943f26ea24a1edc0ddac81bcfac13ba1968 100644 (file)
@@ -794,3 +794,16 @@ distributor-threads=1""".format(confdir=confdir,
 
         if not found:
             raise AssertionError("No SOA record found in the authority section:\n%s" % msg.to_text())
+
+    def assertResponseMatches(self, query, expectedRRs, response):
+        expectedResponse = dns.message.make_response(query)
+
+        if query.flags & dns.flags.RD:
+            expectedResponse.flags |= dns.flags.RA
+        if query.flags & dns.flags.CD:
+            expectedResponse.flags |= dns.flags.CD
+
+        expectedResponse.answer = expectedRRs
+        print(expectedResponse)
+        print(response)
+        self.assertEquals(response, expectedResponse)
index 64f0b34d9256a851999c3d445ffc00d790511c67..2fe21b129b99ed929a618ed0af172bba9bedefe8 100644 (file)
@@ -122,19 +122,6 @@ class GettagRecursorTest(RecursorTest):
     def tearDownClass(cls):
         cls.tearDownRecursor()
 
-    def assertResponseMatches(self, query, expectedRRs, response):
-        expectedResponse = dns.message.make_response(query)
-
-        if query.flags & dns.flags.RD:
-            expectedResponse.flags |= dns.flags.RA
-        if query.flags & dns.flags.CD:
-            expectedResponse.flags |= dns.flags.CD
-
-        expectedResponse.answer = expectedRRs
-        print(expectedResponse)
-        print(response)
-        self.assertEquals(response, expectedResponse)
-
     def testA(self):
         name = 'gettag.lua.'
         expected = [
@@ -377,3 +364,57 @@ quiet=no
         query = dns.message.make_query('preout.luahooks.example.', 'AAAA', 'IN')
         res = self.sendUDPQuery(query)
         self.assertRcodeEqual(res, dns.rcode.NOERROR)
+
+
+class DNS64Test(RecursorTest):
+    """Tests the dq.followupAction("getFakeAAAARecords")"""
+
+    _confdir = 'dns64'
+    _config_template = """
+    """
+    _lua_dns_script_file = """
+    prefix = "2001:DB8:64::"
+
+    function nodata (dq)
+      if dq.qtype ~= pdns.AAAA then
+        return false
+      end  --  only AAAA records
+
+      -- don't fake AAAA records if DNSSEC validation failed
+      if dq.validationState == pdns.validationstates.Bogus then
+         return false
+      end
+
+      dq.followupFunction = "getFakeAAAARecords"
+      dq.followupPrefix = prefix
+      dq.followupName = dq.qname
+      return true
+    end
+    """
+
+    def testAtoAAAA(self):
+        expected = [
+            dns.rrset.from_text('ns.secure.example.', 15, dns.rdataclass.IN, 'AAAA', '2001:db8:64::7f00:9')
+        ]
+        query = dns.message.make_query('ns.secure.example', 'AAAA')
+
+        res = self.sendUDPQuery(query)
+
+        self.assertRcodeEqual(res, dns.rcode.NOERROR)
+        self.assertEqual(len(res.answer), 1)
+        self.assertEqual(len(res.authority), 0)
+        self.assertResponseMatches(query, expected, res)
+
+    def testAtoCNAMEtoAAAA(self):
+        expected = [
+            dns.rrset.from_text('cname-to-insecure.secure.example.', 3600, dns.rdataclass.IN, 'CNAME', 'node1.insecure.example.'),
+            dns.rrset.from_text('node1.insecure.example.', 3600, dns.rdataclass.IN, 'AAAA', '2001:db8:64::c000:206')
+        ]
+        query = dns.message.make_query('cname-to-insecure.secure.example.', 'AAAA')
+
+        res = self.sendUDPQuery(query)
+
+        self.assertRcodeEqual(res, dns.rcode.NOERROR)
+        self.assertEqual(len(res.answer), 2)
+        self.assertEqual(len(res.authority), 0)
+        self.assertResponseMatches(query, expected, res)