'127.0.0.1')
expectedResponse.answer.append(rrset)
+ connsBefore = self.getServerStat('tcpReusedConnections')
+
numberOfUDPQueries = 10
for _ in range(numberOfUDPQueries):
(receivedQuery, receivedResponse) = self.sendUDPQuery(query, expectedResponse)
self.checkOnlyDOHResponderHit(numberOfUDPQueries)
self.assertEqual(self.getServerStat('tcpNewConnections'), 1)
- self.assertEqual(self.getServerStat('tcpReusedConnections'), numberOfQueries - 1)
+ self.assertEqual(self.getServerStat('tcpReusedConnections'), connsBefore + numberOfQueries - 1)
self.assertEqual(self.getServerStat('tlsResumptions'), 0)
def testTCP(self):
'127.0.0.1')
expectedResponse.answer.append(rrset)
+ connsBefore = self.getServerStat('tcpReusedConnections')
+
(receivedQuery, receivedResponse) = self.sendTCPQuery(query, expectedResponse)
self.assertEqual(query, receivedQuery)
self.assertEqual(receivedResponse, expectedResponse)
self.checkOnlyDOHResponderHit()
self.assertEqual(self.getServerStat('tcpNewConnections'), 1)
- self.assertEqual(self.getServerStat('tcpReusedConnections'), 0)
+ self.assertEqual(self.getServerStat('tcpReusedConnections'), connsBefore)
self.assertEqual(self.getServerStat('tlsResumptions'), 0)
+ def testUDPCache(self):
+ """
+ Outgoing DOH: UDP query is sent via DOH, should be cached
+ """
+ name = 'udp.cached.outgoing-doh.test.powerdns.com.'
+ query = dns.message.make_query(name, 'A', 'IN')
+ expectedResponse = dns.message.make_response(query)
+ rrset = dns.rrset.from_text(name,
+ 60,
+ dns.rdataclass.IN,
+ dns.rdatatype.A,
+ '127.0.0.1')
+ expectedResponse.answer.append(rrset)
+
+ (receivedQuery, receivedResponse) = self.sendUDPQuery(query, expectedResponse)
+ self.assertEqual(query, receivedQuery)
+ self.assertEqual(receivedResponse, expectedResponse)
+
+ numberOfUDPQueries = 10
+ for _ in range(numberOfUDPQueries):
+ (_, receivedResponse) = self.sendUDPQuery(query, useQueue=False, response=None)
+ self.assertEqual(receivedResponse, expectedResponse)
+
+ def testTCPCache(self):
+ """
+ Outgoing DOH: TCP query is sent via DOH, should be cached
+ """
+ name = 'tcp.cached.outgoing-doh.test.powerdns.com.'
+ query = dns.message.make_query(name, 'A', 'IN')
+ expectedResponse = dns.message.make_response(query)
+ rrset = dns.rrset.from_text(name,
+ 60,
+ dns.rdataclass.IN,
+ dns.rdatatype.A,
+ '127.0.0.1')
+ expectedResponse.answer.append(rrset)
+
+ (receivedQuery, receivedResponse) = self.sendTCPQuery(query, expectedResponse)
+ self.assertEqual(query, receivedQuery)
+ self.assertEqual(receivedResponse, expectedResponse)
+
+ numberOfTCPQueries = 10
+ for _ in range(numberOfTCPQueries):
+ (_, receivedResponse) = self.sendTCPQuery(query, useQueue=False, response=None)
+ self.assertEqual(receivedResponse, expectedResponse)
+
class BrokenOutgoingDOHTests(object):
_webTimeout = 2.0
_config_params = ['_tlsBackendPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed']
_config_template = """
setMaxTCPClientThreads(1)
- newServer{address="127.0.0.1:%s", tls='openssl', validateCertificates=true, caStore='ca.pem', subjectName='powerdns.com', dohPath='/dns-query'}:setUp()
+ newServer{address="127.0.0.1:%s", tls='openssl', validateCertificates=true, caStore='ca.pem', subjectName='powerdns.com', dohPath='/dns-query', pool={'', 'cache'}}:setUp()
webserver("127.0.0.1:%s")
setWebserverConfig({password="%s", apiKey="%s"})
+
+ pc = newPacketCache(100)
+ getPool('cache'):setCache(pc)
+ smn = newSuffixMatchNode()
+ smn:add('cached.outgoing-doh.test.powerdns.com.')
+ addAction(SuffixMatchNodeRule(smn), PoolAction('cache'))
"""
@classmethod
_config_params = ['_tlsBackendPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed']
_config_template = """
setMaxTCPClientThreads(1)
- newServer{address="127.0.0.1:%s", tls='gnutls', validateCertificates=true, caStore='ca.pem', subjectName='powerdns.com', dohPath='/dns-query'}:setUp()
+ newServer{address="127.0.0.1:%s", tls='gnutls', validateCertificates=true, caStore='ca.pem', subjectName='powerdns.com', dohPath='/dns-query', pool={'', 'cache'}}:setUp()
webserver("127.0.0.1:%s")
setWebserverConfig({password="%s", apiKey="%s"})
+
+ pc = newPacketCache(100)
+ getPool('cache'):setCache(pc)
+ smn = newSuffixMatchNode()
+ smn:add('cached.outgoing-doh.test.powerdns.com.')
+ addAction(SuffixMatchNodeRule(smn), PoolAction('cache'))
"""
@classmethod
_config_params = ['_tlsBackendPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed']
_config_template = """
setMaxTCPClientThreads(1)
- newServer{address="127.0.0.1:%s", tls='openssl', validateCertificates=false, caStore='ca.pem', subjectName='not-powerdns.com', dohPath='/dns-query'}:setUp()
+ newServer{address="127.0.0.1:%s", tls='openssl', validateCertificates=false, caStore='ca.pem', subjectName='not-powerdns.com', dohPath='/dns-query', pool={'', 'cache'}}:setUp()
webserver("127.0.0.1:%s")
setWebserverConfig({password="%s", apiKey="%s"})
+
+ pc = newPacketCache(100)
+ getPool('cache'):setCache(pc)
+ smn = newSuffixMatchNode()
+ smn:add('cached.outgoing-doh.test.powerdns.com.')
+ addAction(SuffixMatchNodeRule(smn), PoolAction('cache'))
"""
@classmethod
_config_params = ['_tlsBackendPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed']
_config_template = """
setMaxTCPClientThreads(1)
- newServer{address="127.0.0.1:%s", tls='gnutls', validateCertificates=false, caStore='ca.pem', subjectName='not-powerdns.com', dohPath='/dns-query'}:setUp()
+ newServer{address="127.0.0.1:%s", tls='gnutls', validateCertificates=false, caStore='ca.pem', subjectName='not-powerdns.com', dohPath='/dns-query', pool={'', 'cache'}}:setUp()
webserver("127.0.0.1:%s")
setWebserverConfig({password="%s", apiKey="%s"})
+
+ pc = newPacketCache(100)
+ getPool('cache'):setCache(pc)
+ smn = newSuffixMatchNode()
+ smn:add('cached.outgoing-doh.test.powerdns.com.')
+ addAction(SuffixMatchNodeRule(smn), PoolAction('cache'))
"""
@classmethod
_config_params = ['_tlsBackendPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed']
_config_template = """
setMaxTCPClientThreads(1)
- newServer{address="127.0.0.1:%s", tls='openssl', validateCertificates=true, caStore='ca.pem', subjectName='powerdns.com', dohPath='/dns-query'}:setUp()
+ newServer{address="127.0.0.1:%s", tls='openssl', validateCertificates=true, caStore='ca.pem', subjectName='powerdns.com', dohPath='/dns-query', pool={'', 'cache'}}:setUp()
webserver("127.0.0.1:%s")
setWebserverConfig({password="%s", apiKey="%s"})
+
+ pc = newPacketCache(100)
+ getPool('cache'):setCache(pc)
+ smn = newSuffixMatchNode()
+ smn:add('cached.outgoing-doh.test.powerdns.com.')
+ addAction(SuffixMatchNodeRule(smn), PoolAction('cache'))
"""
def callback(request):