]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add a regression test for PDNSException raised from C++ while parsing a...
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 16 Jul 2026 12:51:55 +0000 (14:51 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 16 Jul 2026 12:51:55 +0000 (14:51 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
regression-tests.dnsdist/test_Yaml.py

index fa0ca08424c799cddfff523a7a14b7f04c1ed5b6..69b85538442bbdb58a0e51348b66128a52213c54 100644 (file)
@@ -657,6 +657,59 @@ pools:
             cls.killProcess(cls._dnsdist)
 
 
+class TestYamlInvalidComboAddress(DNSDistTest):
+    _yaml_config_template = """---
+logging:
+  structured:
+    enabled: false
+
+binds:
+  - listen_address: "127.0.0.1:%d"
+    protocol: Do53
+
+backends:
+  - address: "127.0.0.1:%d"
+    protocol: Do53
+
+query_rules:
+  - name: "A to (invalid) Tee Action"
+    selector:
+      type: "QType"
+      qtype: "A"
+    action:
+      type: "Tee"
+      rca: "a:"
+      lca: "127.0.0.1"
+"""
+    _yaml_config_params = ["_dnsDistPort", "_testServerPort"]
+    _config_params = []
+    _enableStructuredLoggingOnCL = False
+
+    def testFailToStart(self):
+        """
+        YAML: Fails to start with an invalid ComboAddress raising a PDNSException from C++ via the Rust library
+        """
+        pass
+
+    @classmethod
+    def setUpClass(cls):
+        failed = False
+        try:
+            cls.startDNSDist()
+        except AssertionError as err:
+            failed = True
+            expected = "dnsdist --check-config failed (1): b\"Error while parsing YAML file configs/dnsdist_TestYamlInvalidComboAddress.yml: Unable to convert presentation address 'a:'\\n\""
+            if str(err) != expected:
+                raise AssertionError("DNSdist should not start with an invalid ComboAddress in listen_address: %s" % (err))
+        if not failed:
+            raise AssertionError("DNSdist should not start with an invalid ComboAddress in listen_address")
+
+    @classmethod
+    def tearDownClass(cls):
+        if cls._dnsdist:
+            cls.killProcess(cls._dnsdist)
+
+
 class TestYamlLuaCodeUsingObjects(DNSDistTest):
     _yaml_config_template = """---
 binds: