]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add a regression test for YAML/Lua mix
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 13 Feb 2025 13:54:17 +0000 (14:54 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 13 Feb 2025 16:13:15 +0000 (17:13 +0100)
regression-tests.dnsdist/dnsdisttests.py
regression-tests.dnsdist/test_Yaml.py

index 5797d4bb2c1f3b53672bb62365d47b9470e03273..fbf757454d322bdfa0441c26ce669eba120a8bf9 100644 (file)
@@ -144,17 +144,22 @@ class DNSDistTest(AssertEqualDNSMessageMixin, unittest.TestCase):
             confFile = os.path.join('configs', 'dnsdist_%s.yml' % (cls.__name__))
             with open(confFile, 'w') as conf:
                 conf.write(cls._yaml_config_template % params)
+                conf.write("\nsecurity_polling:\n  suffix: ''\n")
 
         params = tuple([getattr(cls, param) for param in cls._config_params])
         print(params)
         extension = 'lua' if cls._yaml_config_template else 'conf'
-        confFile = os.path.join('configs', 'dnsdist_%s.%s' % (cls.__name__, extension))
-        with open(confFile, 'w') as conf:
+        luaConfFile = os.path.join('configs', 'dnsdist_%s.%s' % (cls.__name__, extension))
+        if not cls._yaml_config_template:
+          confFile = luaConfFile
+
+        with open(luaConfFile, 'w') as conf:
             conf.write("-- Autogenerated by dnsdisttests.py\n")
             conf.write(f"-- dnsdist will listen on {cls._dnsDistPort}\n")
             conf.write(cls._config_template % params)
-            conf.write("\n")
-            conf.write("setSecurityPollSuffix('')")
+            if not cls._yaml_config_template:
+                conf.write("\n")
+                conf.write("setSecurityPollSuffix('')")
 
         if cls._skipListeningOnCL:
           dnsdistcmd = [os.environ['DNSDISTBIN'], '--supervised', '-C', confFile ]
index 597a11b21086ddd3d0708a462b2bdcd5be3cdeb3..1abed07c2f87bf0d6661e08d7d0c38a35458929f 100644 (file)
@@ -194,3 +194,66 @@ response_rules:
             receivedQuery.id = query.id
             self.assertEqual(receivedQuery, query)
             self.assertEqual(receivedResponse, response)
+
+class TestMixingYamlWithLua(DNSDistTest):
+
+    _yaml_config_template = """---
+binds:
+  - listen_address: "127.0.0.1:%d"
+    reuseport: true
+    protocol: Do53
+    threads: 2
+
+backends:
+  - address: "127.0.0.1:%d"
+    protocol: Do53
+    pools:
+      - "tcp-pool"
+      - "inline"
+query_rules:
+  - name: "refused"
+    selector:
+      type: "QNameSet"
+      qnames:
+        - "refused.yaml-lua-mix.test.powerdns.com."
+    action:
+      type: "RCode"
+      rcode: 5
+
+"""
+    _dnsDistPort = pickAvailablePort()
+    _testServerPort = pickAvailablePort()
+    _yaml_config_params = ['_dnsDistPort', '_testServerPort']
+    _config_params = []
+    _config_template = """
+enableLuaConfiguration()
+addAction(QNameRule("notimp-lua.yaml-lua-mix.test.powerdns.com."), RCodeAction(DNSRCode.NOTIMP))
+"""
+
+    def testRefusedFromYAML(self):
+        """
+        Yaml / Lua mix: Refused from YAML
+        """
+        name = 'refused.yaml-lua-mix.test.powerdns.com.'
+        query = dns.message.make_query(name, 'A', 'IN')
+        query.flags &= ~dns.flags.RD
+        expectedResponse = dns.message.make_response(query)
+        expectedResponse.set_rcode(dns.rcode.REFUSED)
+        for method in ["sendUDPQuery", "sendTCPQuery"]:
+            sender = getattr(self, method)
+            (_, receivedResponse) = sender(query, response=None, useQueue=False)
+            self.assertEqual(receivedResponse, expectedResponse)
+
+    def testNotImpFromLua(self):
+        """
+        Yaml / Lua mix: Not imp from Lua
+        """
+        name = 'notimp-lua.yaml-lua-mix.test.powerdns.com.'
+        query = dns.message.make_query(name, 'A', 'IN')
+        query.flags &= ~dns.flags.RD
+        expectedResponse = dns.message.make_response(query)
+        expectedResponse.set_rcode(dns.rcode.NOTIMP)
+        for method in ["sendUDPQuery", "sendTCPQuery"]:
+            sender = getattr(self, method)
+            (_, receivedResponse) = sender(query, response=None, useQueue=False)
+            self.assertEqual(receivedResponse, expectedResponse)