]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - regression-tests.dnsdist/test_TCPFastOpen.py
Merge pull request #13612 from omoerbeek/rec-13588-followup
[thirdparty/pdns.git] / regression-tests.dnsdist / test_TCPFastOpen.py
index 5e050902aea02623c5664c95ea2c04a4d70f8546..c061ba935b4f93746b4987bc3cab2ec03acbe8bd 100644 (file)
@@ -5,7 +5,7 @@ import dns
 import requests
 import socket
 import struct
-from dnsdisttests import DNSDistTest
+from dnsdisttests import DNSDistTest, pickAvailablePort
 
 class TestBrokenTCPFastOpen(DNSDistTest):
 
@@ -13,13 +13,15 @@ class TestBrokenTCPFastOpen(DNSDistTest):
     # because, contrary to the other ones, its
     # TCP responder will accept a connection, read the
     # query then just close the connection right away
-    _testServerPort = 5410
+    _testServerPort = pickAvailablePort()
     _testServerRetries = 5
     _webTimeout = 2.0
-    _webServerPort = 8083
+    _webServerPort = pickAvailablePort()
     _webServerBasicAuthPassword = 'secret'
+    _webServerBasicAuthPasswordHashed = '$scrypt$ln=10,p=1,r=8$6DKLnvUYEeXWh3JNOd3iwg==$kSrhdHaRbZ7R74q3lGBqO1xetgxRxhmWzYJ2Qvfm7JM='
     _webServerAPIKey = 'apisecret'
-    _config_params = ['_testServerPort', '_testServerRetries', '_webServerPort', '_webServerBasicAuthPassword', '_webServerAPIKey']
+    _webServerAPIKeyHashed = '$scrypt$ln=10,p=1,r=8$9v8JxDfzQVyTpBkTbkUqYg==$bDQzAOHeK1G9UvTPypNhrX48w974ZXbFPtRKS34+aso='
+    _config_params = ['_testServerPort', '_testServerRetries', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed']
     _config_template = """
     newServer{address="127.0.0.1:%s", useClientSubnet=true, tcpFastOpen=true, retries=%d }
     webserver("127.0.0.1:%s")
@@ -28,6 +30,7 @@ class TestBrokenTCPFastOpen(DNSDistTest):
 
     @classmethod
     def BrokenTCPResponder(cls, port):
+        cls._backgroundThreads[threading.get_native_id()] = True
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
         sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
@@ -38,8 +41,17 @@ class TestBrokenTCPFastOpen(DNSDistTest):
             sys.exit(1)
 
         sock.listen(100)
+        sock.settimeout(1.0)
         while True:
-            (conn, _) = sock.accept()
+            try:
+                (conn, _) = sock.accept()
+            except socket.timeout:
+                if cls._backgroundThreads.get(threading.get_native_id(), False) == False:
+                    del cls._backgroundThreads[threading.get_native_id()]
+                    break
+                else:
+                    continue
+
             conn.settimeout(5.0)
             data = conn.recv(2)
             if not data:
@@ -59,12 +71,12 @@ class TestBrokenTCPFastOpen(DNSDistTest):
 
         # Normal responder
         cls._UDPResponder = threading.Thread(name='UDP Responder', target=cls.UDPResponder, args=[cls._testServerPort, cls._toResponderQueue, cls._fromResponderQueue])
-        cls._UDPResponder.setDaemon(True)
+        cls._UDPResponder.daemon = True
         cls._UDPResponder.start()
 
         # Close the connection right after reading the query
         cls._TCPResponder = threading.Thread(name='Broken TCP Responder', target=cls.BrokenTCPResponder, args=[cls._testServerPort])
-        cls._TCPResponder.setDaemon(True)
+        cls._TCPResponder.daemon = True
         cls._TCPResponder.start()
 
     def testTCOFastOpenOnCloseAfterRead(self):