]> git.ipfire.org Git - thirdparty/pdns.git/blame - regression-tests.dnsdist/test_XPF.py
dnsdist: Add a new response chain for XFR responses
[thirdparty/pdns.git] / regression-tests.dnsdist / test_XPF.py
CommitLineData
5cc8371b
RG
1#!/usr/bin/env python
2
3import dns
4from dnsdisttests import DNSDistTest
5
6class XPFTest(DNSDistTest):
7 """
8 dnsdist is configured to add XPF to the query
9 """
10
11 _xpfCode = 65422
12 _config_template = """
18f707fa 13 newServer{address="127.0.0.1:%d", addXPF=%d}
5cc8371b 14 """
18f707fa 15 _config_params = ['_testServerPort', '_xpfCode']
5cc8371b
RG
16
17 def checkMessageHasXPF(self, msg, expectedValue):
18 self.assertGreaterEqual(len(msg.additional), 1)
19
20 found = False
21 for add in msg.additional:
22 if add.rdtype == self._xpfCode:
23 found = True
4bfebc93
CH
24 self.assertEqual(add.rdclass, dns.rdataclass.IN)
25 self.assertEqual(add.ttl, 0)
5cc8371b
RG
26 xpfData = add.to_rdataset()[0].to_text()
27 # skip the ports
4bfebc93 28 self.assertEqual(xpfData[:26], expectedValue[:26])
5cc8371b
RG
29
30 self.assertTrue(found)
31
32 def testXPF(self):
33 """
34 XPF
35 """
36 name = 'xpf.tests.powerdns.com.'
37 query = dns.message.make_query(name, 'A', 'IN')
38
39 expectedQuery = dns.message.make_query(name, 'A', 'IN')
40 # 0x04 is IPv4, 0x11 (17) is UDP then 127.0.0.1 as source and destination
41 # and finally the ports, zeroed because we have no way to know them beforehand
ee34faac 42 xpfData = "\\# 14 04117f0000017f00000100000000"
5cc8371b 43 rdata = dns.rdata.from_text(dns.rdataclass.IN, self._xpfCode, xpfData)
6e1f856f 44 rrset = dns.rrset.from_rdata(".", 0, rdata)
5cc8371b
RG
45 expectedQuery.additional.append(rrset)
46
47 response = dns.message.make_response(expectedQuery)
48
49 (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response)
50 self.assertTrue(receivedQuery)
51 self.assertTrue(receivedResponse)
52 receivedQuery.id = expectedQuery.id
53 receivedResponse.id = response.id
54
5cc8371b 55 self.checkMessageHasXPF(receivedQuery, xpfData)
4bfebc93 56 self.assertEqual(response, receivedResponse)
5cc8371b
RG
57
58 expectedQuery = dns.message.make_query(name, 'A', 'IN')
59 # 0x04 is IPv4, 0x06 (6) is TCP then 127.0.0.1 as source and destination
60 # and finally the ports, zeroed because we have no way to know them beforehand
ee34faac 61 xpfData = "\\# 14 04067f0000017f00000100000000"
5cc8371b 62 rdata = dns.rdata.from_text(dns.rdataclass.IN, self._xpfCode, xpfData)
6e1f856f 63 rrset = dns.rrset.from_rdata(".", 0, rdata)
5cc8371b
RG
64 expectedQuery.additional.append(rrset)
65
66 response = dns.message.make_response(expectedQuery)
67
68 (receivedQuery, receivedResponse) = self.sendTCPQuery(query, response)
69 self.assertTrue(receivedQuery)
70 self.assertTrue(receivedResponse)
71 receivedQuery.id = expectedQuery.id
72 receivedResponse.id = response.id
73
5cc8371b 74 self.checkMessageHasXPF(receivedQuery, xpfData)
4bfebc93 75 self.assertEqual(response, receivedResponse)