From: Remi Gacogne Date: Tue, 13 Jan 2026 13:58:46 +0000 (+0100) Subject: dnsdist: Fix exception handling for DoQ/DoH3 tests X-Git-Tag: rec-5.4.0-beta1~43^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36d2ab11ecf47e1fefdb7f410fa024e3638779bf;p=thirdparty%2Fpdns.git dnsdist: Fix exception handling for DoQ/DoH3 tests Signed-off-by: Remi Gacogne --- diff --git a/regression-tests.dnsdist/quictests.py b/regression-tests.dnsdist/quictests.py index 8b5e0ecc37..ac5aa5c340 100644 --- a/regression-tests.dnsdist/quictests.py +++ b/regression-tests.dnsdist/quictests.py @@ -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); diff --git a/regression-tests.dnsdist/test_Async.py b/regression-tests.dnsdist/test_Async.py index 342ec680e6..454bfa03de 100644 --- a/regression-tests.dnsdist/test_Async.py +++ b/regression-tests.dnsdist/test_Async.py @@ -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) diff --git a/regression-tests.dnsdist/test_DOH3.py b/regression-tests.dnsdist/test_DOH3.py index 8ee9ed85d4..35aa9b0cc9 100644 --- a/regression-tests.dnsdist/test_DOH3.py +++ b/regression-tests.dnsdist/test_DOH3.py @@ -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) diff --git a/regression-tests.dnsdist/test_DOQ.py b/regression-tests.dnsdist/test_DOQ.py index 1401899ecc..7804b91bb8 100644 --- a/regression-tests.dnsdist/test_DOQ.py +++ b/regression-tests.dnsdist/test_DOQ.py @@ -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)