]>
Commit | Line | Data |
---|---|---|
5255cab8 OM |
1 | import dns |
2 | import os | |
acdbb38a | 3 | import unittest |
5255cab8 | 4 | import subprocess |
acdbb38a | 5 | import time |
5255cab8 OM |
6 | from recursortests import RecursorTest |
7 | ||
8 | class testNamedForward(RecursorTest): | |
9 | """ | |
10 | This is forwarding test using a name as target | |
11 | """ | |
12 | ||
13 | _confdir = 'NamedForward' | |
14 | _config_template = """ | |
15 | dnssec=validate | |
16 | forward-zones-recurse=.=dns.quad9.net | |
17 | system-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") | |
44 | class 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 = """ | |
51 | dnssec=off | |
52 | forward-zones-recurse=.=namedforwardtest | |
53 | devonly-regression-test-mode | |
54 | system-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) |