]> git.ipfire.org Git - thirdparty/pdns.git/blame - regression-tests.dnsdist/test_DOH3.py
Merge pull request #14078 from rgacogne/ddist-harvest-quic
[thirdparty/pdns.git] / regression-tests.dnsdist / test_DOH3.py
CommitLineData
4f0b10a9
CHB
1#!/usr/bin/env python
2import dns
3import clientsubnetoption
4
5from dnsdisttests import DNSDistTest
6from dnsdisttests import pickAvailablePort
88913b83 7from quictests import QUICTests, QUICWithCacheTests, QUICACLTests, QUICGetLocalAddressOnAnyBindTests
4f0b10a9
CHB
8import doh3client
9
ac70190e 10class TestDOH3(QUICTests, DNSDistTest):
4f0b10a9
CHB
11 _serverKey = 'server.key'
12 _serverCert = 'server.chain'
13 _serverName = 'tls.tests.dnsdist.org'
14 _caCert = 'ca.pem'
15 _doqServerPort = pickAvailablePort()
16 _dohBaseURL = ("https://%s:%d/" % (_serverName, _doqServerPort))
17 _config_template = """
18 newServer{address="127.0.0.1:%d"}
19
20 addAction("drop.doq.tests.powerdns.com.", DropAction())
21 addAction("refused.doq.tests.powerdns.com.", RCodeAction(DNSRCode.REFUSED))
22 addAction("spoof.doq.tests.powerdns.com.", SpoofAction("1.2.3.4"))
23 addAction("no-backend.doq.tests.powerdns.com.", PoolAction('this-pool-has-no-backend'))
24
ac70190e 25 addDOH3Local("127.0.0.1:%d", "%s", "%s", {keyLogFile='/tmp/keys'})
4f0b10a9
CHB
26 """
27 _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
2aaf9ecd
CHB
28 _verboseMode = True
29
30 def getQUICConnection(self):
31 return self.getDOQConnection(self._doqServerPort, self._caCert)
32
33 def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
34 return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
35
36class TestDOH3ACL(QUICACLTests, DNSDistTest):
37 _serverKey = 'server.key'
38 _serverCert = 'server.chain'
39 _serverName = 'tls.tests.dnsdist.org'
40 _caCert = 'ca.pem'
41 _doqServerPort = pickAvailablePort()
42 _dohBaseURL = ("https://%s:%d/" % (_serverName, _doqServerPort))
43 _config_template = """
44 newServer{address="127.0.0.1:%d"}
45
46 setACL("192.0.2.1/32")
47 addDOH3Local("127.0.0.1:%d", "%s", "%s", {keyLogFile='/tmp/keys'})
48 """
49 _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
4f0b10a9
CHB
50 _verboseMode = True
51
ac70190e
RG
52 def getQUICConnection(self):
53 return self.getDOQConnection(self._doqServerPort, self._caCert)
54
55 def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
56 return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)
d0439b42
CHB
57
58class TestDOH3Specifics(DNSDistTest):
59 _serverKey = 'server.key'
60 _serverCert = 'server.chain'
61 _serverName = 'tls.tests.dnsdist.org'
62 _caCert = 'ca.pem'
63 _doqServerPort = pickAvailablePort()
64 _dohBaseURL = ("https://%s:%d/" % (_serverName, _doqServerPort))
65 _config_template = """
66 newServer{address="127.0.0.1:%d"}
67
68 addDOH3Local("127.0.0.1:%d", "%s", "%s", {keyLogFile='/tmp/keys'})
69 """
70 _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey']
71 _verboseMode = True
72
73 def testDOH3Post(self):
74 """
75 QUIC: Simple POST query
76 """
77 name = 'simple.post.doq.tests.powerdns.com.'
78 query = dns.message.make_query(name, 'A', 'IN', use_edns=False)
79 query.id = 0
80 expectedQuery = dns.message.make_query(name, 'A', 'IN', use_edns=True, payload=4096)
81 expectedQuery.id = 0
82 response = dns.message.make_response(query)
83 rrset = dns.rrset.from_text(name,
84 3600,
85 dns.rdataclass.IN,
86 dns.rdatatype.A,
87 '127.0.0.1')
88 response.answer.append(rrset)
89 (receivedQuery, receivedResponse) = self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, serverName=self._serverName, post=True)
90 self.assertTrue(receivedQuery)
91 self.assertTrue(receivedResponse)
92 receivedQuery.id = expectedQuery.id
93 self.assertEqual(expectedQuery, receivedQuery)
94 self.assertEqual(receivedResponse, response)
88913b83
RG
95
96class TestDOH3GetLocalAddressOnAnyBind(QUICGetLocalAddressOnAnyBindTests, DNSDistTest):
97 _serverKey = 'server.key'
98 _serverCert = 'server.chain'
99 _serverName = 'tls.tests.dnsdist.org'
100 _caCert = 'ca.pem'
101 _doqServerPort = pickAvailablePort()
102 _dohBaseURL = ("https://%s:%d/" % (_serverName, _doqServerPort))
103 _config_template = """
104 function answerBasedOnLocalAddress(dq)
105 local dest = tostring(dq.localaddr)
106 local i, j = string.find(dest, "[0-9.]+")
107 local addr = string.sub(dest, i, j)
108 local dashAddr = string.gsub(addr, "[.]", "-")
109 return DNSAction.Spoof, "address-was-"..dashAddr..".local-address-any.advanced.tests.powerdns.com."
110 end
111 addAction("local-address-any.quic.tests.powerdns.com.", LuaAction(answerBasedOnLocalAddress))
112 newServer{address="127.0.0.1:%s"}
113 addDOH3Local("0.0.0.0:%d", "%s", "%s")
114 addDOH3Local("[::]:%d", "%s", "%s")
115 """
116 _config_params = ['_testServerPort', '_doqServerPort','_serverCert', '_serverKey', '_doqServerPort','_serverCert', '_serverKey']
117 _acl = ['127.0.0.1/32', '::1/128']
118 _skipListeningOnCL = True
119
120 def getQUICConnection(self):
121 return self.getDOQConnection(self._doqServerPort, self._caCert)
122
123 def sendQUICQuery(self, query, response=None, useQueue=True, connection=None):
124 return self.sendDOH3Query(self._doqServerPort, self._dohBaseURL, query, response=response, caFile=self._caCert, useQueue=useQueue, serverName=self._serverName, connection=connection)