]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add a regression test for IPv6 console connections 13906/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 12 Mar 2024 14:16:19 +0000 (15:16 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 14 Mar 2024 08:48:12 +0000 (09:48 +0100)
regression-tests.dnsdist/dnsdisttests.py
regression-tests.dnsdist/test_Console.py

index c829e398cd4e742f64c3add8ba74652464f8554e..3f53bd451a53378e6a84c36a36a40ab6aad80cc3 100644 (file)
@@ -816,15 +816,15 @@ class DNSDistTest(AssertEqualDNSMessageMixin, unittest.TestCase):
         return result.decode('UTF-8')
 
     @classmethod
-    def sendConsoleCommand(cls, command, timeout=5.0):
+    def sendConsoleCommand(cls, command, timeout=5.0, IPv6=False):
         ourNonce = libnacl.utils.rand_nonce()
         theirNonce = None
-        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        sock = socket.socket(socket.AF_INET if not IPv6 else socket.AF_INET6, socket.SOCK_STREAM)
         sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
         if timeout:
             sock.settimeout(timeout)
 
-        sock.connect(("127.0.0.1", cls._consolePort))
+        sock.connect(("::1", cls._consolePort, 0, 0) if IPv6 else ("127.0.0.1", cls._consolePort))
         sock.send(ourNonce)
         theirNonce = sock.recv(len(ourNonce))
         if len(theirNonce) != len(ourNonce):
index ee3796125127a66ce73453f1df2585dac66fcda4..ff55c36f666f6a9e75425cc097ba4e1ad9a82995 100644 (file)
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 import base64
 import dns
+import os
 import socket
 import time
 from dnsdisttests import DNSDistTest
@@ -24,6 +25,27 @@ class TestConsoleAllowed(DNSDistTest):
         version = self.sendConsoleCommand('showVersion()')
         self.assertTrue(version.startswith('dnsdist '))
 
+class TestConsoleAllowedV6(DNSDistTest):
+
+    _consoleKey = DNSDistTest.generateConsoleKey()
+    _consoleKeyB64 = base64.b64encode(_consoleKey).decode('ascii')
+
+    _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort']
+    _config_template = """
+    setKey("%s")
+    controlSocket("[::1]:%s")
+    newServer{address="127.0.0.1:%d"}
+    """
+
+    def testConsoleAllowed(self):
+        """
+        Console: Allowed IPv6
+        """
+        if 'SKIP_IPV6_TESTS' in os.environ:
+            raise unittest.SkipTest('IPv6 tests are disabled')
+        version = self.sendConsoleCommand('showVersion()', IPv6=True)
+        self.assertTrue(version.startswith('dnsdist '))
+
 class TestConsoleNotAllowed(DNSDistTest):
 
     _consoleKey = DNSDistTest.generateConsoleKey()