]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - regression-tests.auth-py/test_LuaRecords.py
Merge pull request #8497 from mind04/pdns-api2
[thirdparty/pdns.git] / regression-tests.auth-py / test_LuaRecords.py
index f812b479e8f66c9f7e920274f4eec4d374914f69..6ebf4427b361674252bf782b691712fc12eef87d 100644 (file)
@@ -30,6 +30,13 @@ class FakeHTTPServer(BaseHTTPRequestHandler):
         self._set_headers()
 
 class TestLuaRecords(AuthTest):
+    _config_template = """
+geoip-database-files=../modules/geoipbackend/regression-tests/GeoLiteCity.mmdb
+edns-subnet-processing=yes
+launch=bind geoip
+any-to-tcp=no
+"""
+
     _zones = {
         'example.org': """
 example.org.                 3600 IN SOA  {soa}
@@ -45,6 +52,7 @@ web3.example.org.            3600 IN A    {prefix}.103
 all.ifportup                 3600 IN LUA  A     "ifportup(8080, {{'{prefix}.101', '{prefix}.102'}})"
 some.ifportup                3600 IN LUA  A     "ifportup(8080, {{'192.168.42.21', '{prefix}.102'}})"
 none.ifportup                3600 IN LUA  A     "ifportup(8080, {{'192.168.42.21', '192.168.21.42'}})"
+all.noneup.ifportup          3600 IN LUA  A     "ifportup(8080, {{'192.168.42.21', '192.168.21.42'}}, {{ backupSelector='all' }})"
 
 whashed.example.org.         3600 IN LUA  A     "pickwhashed({{ {{15, '1.2.3.4'}}, {{42, '4.3.2.1'}} }})"
 rand.example.org.            3600 IN LUA  A     "pickrandom({{'{prefix}.101', '{prefix}.102'}})"
@@ -103,6 +111,10 @@ none.view        IN    LUA    A          ("view({{
                                           " }})                                          " )
 *.magic          IN    LUA    A     "closestMagic()"
 www-balanced     IN           CNAME 1-1-1-3.17-1-2-4.1-2-3-5.magic.example.org.
+
+any              IN    LUA    A   "'192.0.2.1'"
+any              IN           TXT "hello there"
+
         """,
     }
     _web_rrsets = []
@@ -253,6 +265,22 @@ www-balanced     IN           CNAME 1-1-1-3.17-1-2-4.1-2-3-5.magic.example.org.
         self.assertRcodeEqual(res, dns.rcode.NOERROR)
         self.assertAnyRRsetInAnswer(res, expected)
 
+    def testIfportupWithAllDownAndAllBackupSelector(self):
+        """
+        Basic ifportup() test with all ports DOWN, fallback to 'all' backup selector
+        """
+        name = 'all.noneup.ifportup.example.org.'
+        query = dns.message.make_query(name, dns.rdatatype.A)
+        expected = [dns.rrset.from_text(name, 0, dns.rdataclass.IN, dns.rdatatype.A, '192.168.42.21', '192.168.21.42')]
+
+        res = self.sendUDPQuery(query)
+        self.assertRcodeEqual(res, dns.rcode.NOERROR)
+
+        time.sleep(1)
+        res = self.sendUDPQuery(query)
+        self.assertRcodeEqual(res, dns.rcode.NOERROR)
+        self.assertEqual(res.answer, expected)
+
     def testIfurlup(self):
         """
         Basic ifurlup() test
@@ -337,6 +365,16 @@ www-balanced     IN           CNAME 1-1-1-3.17-1-2-4.1-2-3-5.magic.example.org.
         self.assertRcodeEqual(res, dns.rcode.NOERROR)
         self.assertRRsetInAnswer(res, expected)
 
+    def testWildcardError(self):
+        """
+        Ensure errors coming from LUA wildcards are reported
+        """
+        query = dns.message.make_query('failure.magic.example.org', 'A')
+
+        res = self.sendUDPQuery(query)
+        self.assertRcodeEqual(res, dns.rcode.SERVFAIL)
+        self.assertAnswerEmpty(res)
+
     def testClosestMagic(self):
         """
         Basic closestMagic() test
@@ -348,7 +386,7 @@ www-balanced     IN           CNAME 1-1-1-3.17-1-2-4.1-2-3-5.magic.example.org.
             ('1.2.3.0', 24,  '1.2.3.5'),
             ('17.1.0.0', 16, '17.1.2.4')
         ]
-                
+
         for (subnet, mask, ip) in queries:
             ecso = clientsubnetoption.ClientSubnetOption(subnet, mask)
             query = dns.message.make_query(name, 'A', 'IN', use_edns=True, payload=4096, options=[ecso])
@@ -488,8 +526,6 @@ www-balanced     IN           CNAME 1-1-1-3.17-1-2-4.1-2-3-5.magic.example.org.
         """
         view() test where no netmask match
         """
-        expected = dns.rrset.from_text('none.view.example.org.', 0,
-                                       dns.rdataclass.IN, 'A')
         query = dns.message.make_query('none.view.example.org', 'A')
 
         res = self.sendUDPQuery(query)
@@ -522,6 +558,41 @@ www-balanced     IN           CNAME 1-1-1-3.17-1-2-4.1-2-3-5.magic.example.org.
         first = self.sendUDPQuery(query)
         self.assertRcodeEqual(first, dns.rcode.SERVFAIL)
 
+
+    def testA(self):
+        """
+        Test A query against `any`
+        """
+        name = 'any.example.org.'
+
+        query = dns.message.make_query(name, 'A')
+
+        response = dns.message.make_response(query)
+
+        response.answer.append(dns.rrset.from_text(name, 0, dns.rdataclass.IN, dns.rdatatype.A, '192.0.2.1'))
+
+        res = self.sendUDPQuery(query)
+        self.assertRcodeEqual(res, dns.rcode.NOERROR)
+        self.assertEqual(res.answer, response.answer)
+
+    def testANY(self):
+        """
+        Test ANY query against `any`
+        """
+
+        name = 'any.example.org.'
+
+        query = dns.message.make_query(name, 'ANY')
+
+        response = dns.message.make_response(query)
+
+        response.answer.append(dns.rrset.from_text(name, 0, dns.rdataclass.IN, dns.rdatatype.A, '192.0.2.1'))
+        response.answer.append(dns.rrset.from_text(name, 0, dns.rdataclass.IN, 'TXT', '"hello there"'))
+
+        res = self.sendUDPQuery(query)
+        self.assertRcodeEqual(res, dns.rcode.NOERROR)
+        self.assertEqual(self.sortRRsets(res.answer), self.sortRRsets(response.answer))
+
 if __name__ == '__main__':
     unittest.main()
     exit(0)