]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fix exception handling for DoQ/DoH3 tests
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 13 Jan 2026 13:58:46 +0000 (14:58 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 13 Jan 2026 14:53:21 +0000 (15:53 +0100)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
regression-tests.dnsdist/quictests.py
regression-tests.dnsdist/test_Async.py
regression-tests.dnsdist/test_DOH3.py
regression-tests.dnsdist/test_DOQ.py

index 8b5e0ecc375d4e3d69d78f94e576a8ca97bc7547..ac5aa5c34053e12314dad079c93030c09af0279a 100644 (file)
@@ -66,7 +66,7 @@ class QUICTests(object):
         name = 'drop.doq.tests.powerdns.com.'
         query = dns.message.make_query(name, 'A', 'IN')
         try:
-            (_, receivedResponse) = self.sendQUICQuery(query, response=None, useQueue=False)
+            (_, receivedResponse) = self.sendQUICQuery(query, response=None, useQueue=False, passExceptions=True)
             self.fail()
         except StreamResetError as e:
             self.assertEqual(e.error, 5);
@@ -111,7 +111,7 @@ class QUICTests(object):
         name = 'no-backend.doq.tests.powerdns.com.'
         query = dns.message.make_query(name, 'A', 'IN', use_edns=False)
         try:
-            (_, receivedResponse) = self.sendQUICQuery(query, response=None, useQueue=False)
+            (_, receivedResponse) = self.sendQUICQuery(query, response=None, useQueue=False, passExceptions=True)
             self.fail()
         except StreamResetError as e :
             self.assertEqual(e.error, 5);
@@ -126,7 +126,7 @@ class QUICACLTests(object):
         query = dns.message.make_query(name, 'A', 'IN')
         dropped = False
         try:
-            (_, receivedResponse) = self.sendQUICQuery(query, response=None, useQueue=False)
+            (_, receivedResponse) = self.sendQUICQuery(query, response=None, useQueue=False, passExceptions=True)
             self.fail()
         except StreamResetError as e:
             self.assertEqual(e.error, 5);
index 342ec680e6d0bba394db8c434d0704db09dd286a..454bfa03deace493781f1e18745a23432bc35b8d 100644 (file)
@@ -285,7 +285,10 @@ class AsyncTests(object):
             for method in ("sendUDPQuery", "sendTCPQuery", "sendDOTQueryWrapper", "sendDOHWithNGHTTP2QueryWrapper", "sendDOHWithH2OQueryWrapper", "sendDOQQueryWrapper"):
                 sender = getattr(self, method)
                 try:
-                    (receivedQuery, receivedResponse) = sender(query, response)
+                    if method in ['sendDOQQueryWrapper']:
+                        (receivedQuery, receivedResponse) = sender(query, response, passExceptions=True)
+                    else:
+                        (receivedQuery, receivedResponse) = sender(query, response)
                 except doqclient.StreamResetError:
                     if not self._fromResponderQueue.empty():
                         receivedQuery = self._fromResponderQueue.get(True, 1.0)
index 8ee9ed85d4d9a4bfab9123835098a008f8b948b9..35aa9b0cc92608bec3015589309026ba008978d3 100644 (file)
@@ -5,7 +5,14 @@ from dnsdisttests import DNSDistTest
 from dnsdisttests import pickAvailablePort
 from quictests import QUICTests, QUICACLTests, QUICGetLocalAddressOnAnyBindTests, QUICXFRTests
 
-class TestDOH3(QUICTests, DNSDistTest):
+class DOH3Common(object):
+    def getQUICConnection(self):
+        return self.getDOQConnection(self._doqServerPort, self._caCert)
+
+    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None, passExceptions=False):
+        return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection, passExceptions=passExceptions)
+
+class TestDOH3(DOH3Common, QUICTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -49,12 +56,6 @@ class TestDOH3(QUICTests, DNSDistTest):
     _config_params = ['_testServerPort',  '_serverName', '_doqServerPort', '_doqServerPort','_serverCert', '_serverKey']
     _verboseMode = True
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
     def testHeaderRule(self):
         """
         DOH3: HeaderRule
@@ -222,7 +223,7 @@ class TestDOH3(QUICTests, DNSDistTest):
         self.assertIn(b'content-type', receivedHeaders)
         self.assertEqual(receivedHeaders[b'content-type'], b'text/plain')
 
-class TestDOH3Yaml(QUICTests, DNSDistTest):
+class TestDOH3Yaml(DOH3Common, QUICTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -275,13 +276,7 @@ query_rules:
     """
     _yaml_config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
-class TestDOH3ACL(QUICACLTests, DNSDistTest):
+class TestDOH3ACL(DOH3Common, QUICACLTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -297,13 +292,7 @@ class TestDOH3ACL(QUICACLTests, DNSDistTest):
     _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
     _verboseMode = True
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
-class TestDOH3Specifics(DNSDistTest):
+class TestDOH3Specifics(DOH3Common, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -341,7 +330,7 @@ class TestDOH3Specifics(DNSDistTest):
         self.assertEqual(expectedQuery, receivedQuery)
         self.assertEqual(receivedResponse, response)
 
-class TestDOH3GetLocalAddressOnAnyBind(QUICGetLocalAddressOnAnyBindTests, DNSDistTest):
+class TestDOH3GetLocalAddressOnAnyBind(DOH3Common, QUICGetLocalAddressOnAnyBindTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -365,13 +354,7 @@ class TestDOH3GetLocalAddressOnAnyBind(QUICGetLocalAddressOnAnyBindTests, DNSDis
     _acl = ['127.0.0.1/32', '::1/128']
     _skipListeningOnCL = True
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
-class TestDOH3XFR(QUICXFRTests, DNSDistTest):
+class TestDOH3XFR(DOH3Common, QUICXFRTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -385,9 +368,3 @@ class TestDOH3XFR(QUICXFRTests, DNSDistTest):
     """
     _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
     _verboseMode = True
-
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
index 1401899eccf370e39bb346b5aead66c5e99018aa..7804b91bb882031311441da57c879b4d3b80ebb8 100644 (file)
@@ -36,7 +36,14 @@ class TestDOQBogus(DNSDistTest):
         except doqclient.StreamResetError as e :
             self.assertEqual(e.error, 2);
 
-class TestDOQ(QUICTests, DNSDistTest):
+class DOQCommon(object):
+    def getQUICConnection(self):
+        return self.getDOQConnection(self._doqServerPort, self._caCert)
+
+    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None, passExceptions=False):
+        return self.sendDOQQuery(self._doqServerPort, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection, passExceptions=passExceptions)
+
+class TestDOQ(DOQCommon, QUICTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -54,13 +61,7 @@ class TestDOQ(QUICTests, DNSDistTest):
     """
     _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOQQuery(self._doqServerPort, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
-class TestDOQYaml(QUICTests, DNSDistTest):
+class TestDOQYaml(DOQCommon, QUICTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -112,13 +113,7 @@ query_rules:
     """
     _yaml_config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOQQuery(self._doqServerPort, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
-class TestDOQWithCache(QUICWithCacheTests, DNSDistTest):
+class TestDOQWithCache(DOQCommon, QUICWithCacheTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -134,13 +129,7 @@ class TestDOQWithCache(QUICWithCacheTests, DNSDistTest):
     """
     _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOQQuery(self._doqServerPort, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
-class TestDOQWithACL(QUICACLTests, DNSDistTest):
+class TestDOQWithACL(DOQCommon, QUICACLTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -154,13 +143,7 @@ class TestDOQWithACL(QUICACLTests, DNSDistTest):
     """
     _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOQQuery(self._doqServerPort, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
-class TestDOQXFR(QUICXFRTests, DNSDistTest):
+class TestDOQXFR(DOQCommon, QUICXFRTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -174,12 +157,6 @@ class TestDOQXFR(QUICXFRTests, DNSDistTest):
     _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
     _verboseMode = True
 
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOQQuery(self._doqServerPort, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
-
 class TestDOQCertificateReloading(DNSDistTest):
     _consoleKey = DNSDistTest.generateConsoleKey()
     _consoleKeyB64 = base64.b64encode(_consoleKey).decode('ascii')
@@ -218,7 +195,7 @@ class TestDOQCertificateReloading(DNSDistTest):
         # check that the serial is different
         self.assertNotEqual(serial, secondSerial)
 
-class TestDOQGetLocalAddressOnAnyBind(QUICGetLocalAddressOnAnyBindTests, DNSDistTest):
+class TestDOQGetLocalAddressOnAnyBind(DOQCommon, QUICGetLocalAddressOnAnyBindTests, DNSDistTest):
     _serverKey = 'server.key'
     _serverCert = 'server.chain'
     _serverName = 'tls.tests.dnsdist.org'
@@ -240,9 +217,3 @@ class TestDOQGetLocalAddressOnAnyBind(QUICGetLocalAddressOnAnyBindTests, DNSDist
     _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey', '_doqServerPort','_serverCert', '_serverKey']
     _acl = ['127.0.0.1/32', '::1/128']
     _skipListeningOnCL = True
-
-    def getQUICConnection(self):
-        return self.getDOQConnection(self._doqServerPort, self._caCert)
-
-    def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
-        return self.sendDOQQuery(self._doqServerPort, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)