]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Add test to also test changing forwarder. Needs ENABLE_SUDO_TESTS
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Fri, 15 Mar 2024 15:32:49 +0000 (16:32 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 25 Mar 2024 09:22:07 +0000 (10:22 +0100)
Todo: modify tasks.py to add ENABLE_SUDO_TESTS to test run, like dnsdist does

regression-tests.recursor-dnssec/test_NamedForward.py

index 7bd805a723995c8b6f050744c8025b0836b9b0c3..018990b71b654dc8d43ec88b57a3f285edecbf14 100644 (file)
@@ -1,6 +1,8 @@
 import dns
 import os
+import unittest
 import subprocess
+import time
 from recursortests import RecursorTest
 
 class testNamedForward(RecursorTest):
@@ -37,3 +39,42 @@ system-resolver-ttl=10
         self.assertMessageIsAuthenticated(res)
         self.assertRRsetInAnswer(res, expected)
         self.assertMatchingRRSIGInAnswer(res, expected)
+
+@unittest.skipUnless('ENABLE_SUDO_TESTS' in os.environ, "sudo is not available")
+class testNamedForwardWithChange(RecursorTest):
+    """
+    This is forwarding test using a name as target and a changing resolve
+    """
+
+    _confdir = 'NamedForwardWithChange'
+    _config_template = """
+dnssec=off
+forward-zones-recurse=.=namedforwardtest
+devonly-regression-test-mode
+system-resolver-ttl=1
+    """
+
+    @classmethod
+    def generateRecursorConfig(cls, confdir):
+        subprocess.run(['sudo', 'sed', '-i', '-e', '/namedforwardtest/d', '/etc/hosts'])
+        subprocess.run(['sudo', 'sh', '-c', 'echo ' + cls._PREFIX + '.10 namedforwardtest >> /etc/hosts'])
+        super(testNamedForwardWithChange, cls).generateRecursorConfig(confdir)
+
+    def testExampleNSQuery(self):
+        query = dns.message.make_query('example', 'NS', want_dnssec=False)
+
+        expectedNS = dns.rrset.from_text('example.', 0, 'IN', 'NS', 'ns1.example.', 'ns2.example.')
+
+        res = self.sendUDPQuery(query)
+
+        self.assertRcodeEqual(res, dns.rcode.NOERROR)
+        self.assertRRsetInAnswer(res, expectedNS)
+
+        subprocess.run(['sudo', 'sed', '-i', '-e', '/namedforwardtest/d', '/etc/hosts'])
+        subprocess.run(['sudo', 'sh', '-c', 'echo ' + self._PREFIX + '.12 namedforwardtest >> /etc/hosts'])
+
+        # the change should get picked up by the systemn resolver update thread and the reload flushes the caches
+        time.sleep(2)
+        res = self.sendUDPQuery(query)
+        subprocess.run(['sudo', 'sed', '-i', '-e', '/namedforwardtest/d', '/etc/hosts'])
+        self.assertRcodeEqual(res, dns.rcode.SERVFAIL)