]> git.ipfire.org Git - thirdparty/pdns.git/blame - regression-tests.recursor-dnssec/test_NamedForward.py
Tidy stat_t
[thirdparty/pdns.git] / regression-tests.recursor-dnssec / test_NamedForward.py
CommitLineData
5255cab8
OM
1import dns
2import os
acdbb38a 3import unittest
5255cab8 4import subprocess
acdbb38a 5import time
5255cab8
OM
6from recursortests import RecursorTest
7
8class testNamedForward(RecursorTest):
9 """
10 This is forwarding test using a name as target
11 """
12
13 _confdir = 'NamedForward'
14 _config_template = """
15dnssec=validate
16forward-zones-recurse=.=dns.quad9.net
17system-resolver-ttl=10
18 """
19
20 @classmethod
21 def setUpClass(cls):
22
23 # we don't need all the auth stuff
24 cls.setUpSockets()
25
26 confdir = os.path.join('configs', cls._confdir)
27 cls.createConfigDir(confdir)
28
29 cls.generateRecursorConfig(confdir)
30 cls.startRecursor(confdir, cls._recursorPort)
31
32 def testA(self):
33 expected = dns.rrset.from_text('dns.google.', 0, dns.rdataclass.IN, 'A', '8.8.8.8', '8.8.4.4')
34 query = dns.message.make_query('dns.google', 'A', want_dnssec=True)
35 query.flags |= dns.flags.AD
36
37 res = self.sendUDPQuery(query)
38
39 self.assertMessageIsAuthenticated(res)
40 self.assertRRsetInAnswer(res, expected)
41 self.assertMatchingRRSIGInAnswer(res, expected)
acdbb38a
OM
42
43@unittest.skipUnless('ENABLE_SUDO_TESTS' in os.environ, "sudo is not available")
44class testNamedForwardWithChange(RecursorTest):
45 """
46 This is forwarding test using a name as target and a changing resolve
47 """
48
49 _confdir = 'NamedForwardWithChange'
50 _config_template = """
51dnssec=off
52forward-zones-recurse=.=namedforwardtest
53devonly-regression-test-mode
54system-resolver-ttl=1
55 """
56
57 @classmethod
58 def generateRecursorConfig(cls, confdir):
59 subprocess.run(['sudo', 'sed', '-i', '-e', '/namedforwardtest/d', '/etc/hosts'])
60 subprocess.run(['sudo', 'sh', '-c', 'echo ' + cls._PREFIX + '.10 namedforwardtest >> /etc/hosts'])
61 super(testNamedForwardWithChange, cls).generateRecursorConfig(confdir)
62
63 def testExampleNSQuery(self):
64 query = dns.message.make_query('example', 'NS', want_dnssec=False)
65
66 expectedNS = dns.rrset.from_text('example.', 0, 'IN', 'NS', 'ns1.example.', 'ns2.example.')
67
68 res = self.sendUDPQuery(query)
69
70 self.assertRcodeEqual(res, dns.rcode.NOERROR)
71 self.assertRRsetInAnswer(res, expectedNS)
72
73 subprocess.run(['sudo', 'sed', '-i', '-e', '/namedforwardtest/d', '/etc/hosts'])
74 subprocess.run(['sudo', 'sh', '-c', 'echo ' + self._PREFIX + '.12 namedforwardtest >> /etc/hosts'])
75
76 # the change should get picked up by the systemn resolver update thread and the reload flushes the caches
77 time.sleep(2)
78 res = self.sendUDPQuery(query)
79 subprocess.run(['sudo', 'sed', '-i', '-e', '/namedforwardtest/d', '/etc/hosts'])
80 self.assertRcodeEqual(res, dns.rcode.SERVFAIL)