X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=regression-tests.dnsdist%2Ftest_Caching.py;h=4ecb637cb8de9a40b232fef25e0b8939ad22ffc3;hb=b61cf2574a1c5b668375cf75e41ab64ce028dc01;hp=60a898b65b294190f6b5a47acf9cf0321c2d9e0d;hpb=25b414835e558f8b6e6518b4b2fc9066c463a932;p=thirdparty%2Fpdns.git diff --git a/regression-tests.dnsdist/test_Caching.py b/regression-tests.dnsdist/test_Caching.py index 60a898b65b..4ecb637cb8 100644 --- a/regression-tests.dnsdist/test_Caching.py +++ b/regression-tests.dnsdist/test_Caching.py @@ -402,6 +402,71 @@ class TestCaching(DNSDistTest): (_, receivedResponse) = self.sendUDPQuery(differentCaseQuery, response=None, useQueue=False) self.assertEquals(receivedResponse, differentCaseResponse) + def testLargeAnswer(self): + """ + Cache: Check that we can cache (and retrieve) large answers + + We should be able to get answers as large as 4096 bytes + """ + numberOfQueries = 10 + name = 'large-answer.cache.tests.powerdns.com.' + query = dns.message.make_query(name, 'TXT', 'IN') + response = dns.message.make_response(query) + # we prepare a large answer + content = "" + for i in range(44): + if len(content) > 0: + content = content + ', ' + content = content + (str(i)*50) + # pad up to 4096 + content = content + 'A'*42 + + rrset = dns.rrset.from_text(name, + 3600, + dns.rdataclass.IN, + dns.rdatatype.TXT, + content) + response.answer.append(rrset) + self.assertEquals(len(response.to_wire()), 4096) + + # first query to fill the cache + (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response) + self.assertTrue(receivedQuery) + self.assertTrue(receivedResponse) + receivedQuery.id = query.id + self.assertEquals(query, receivedQuery) + self.assertEquals(receivedResponse, response) + + for _ in range(numberOfQueries): + (_, receivedResponse) = self.sendUDPQuery(query, response=None, useQueue=False) + self.assertEquals(receivedResponse, response) + + total = 0 + for key in self._responsesCounter: + total += self._responsesCounter[key] + TestCaching._responsesCounter[key] = 0 + + self.assertEquals(total, 1) + + # TCP should not be cached + # first query to fill the cache + (receivedQuery, receivedResponse) = self.sendTCPQuery(query, response) + self.assertTrue(receivedQuery) + self.assertTrue(receivedResponse) + receivedQuery.id = query.id + self.assertEquals(query, receivedQuery) + self.assertEquals(receivedResponse, response) + + for _ in range(numberOfQueries): + (_, receivedResponse) = self.sendTCPQuery(query, response=None, useQueue=False) + self.assertEquals(receivedResponse, response) + + total = 0 + for key in self._responsesCounter: + total += self._responsesCounter[key] + TestCaching._responsesCounter[key] = 0 + + self.assertEquals(total, 1) class TestTempFailureCacheTTLAction(DNSDistTest): @@ -1038,7 +1103,7 @@ class TestCacheManagement(DNSDistTest): self.assertEquals(receivedResponse, response2) # remove cached entries from name A - self.sendConsoleCommand("getPool(\"\"):getCache():expungeByName(newDNSName(\"" + name + "\"), dnsdist.A)") + self.sendConsoleCommand("getPool(\"\"):getCache():expungeByName(newDNSName(\"" + name + "\"), DNSQType.A)") # Miss for name A (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response) @@ -1119,7 +1184,7 @@ class TestCacheManagement(DNSDistTest): self.assertEquals(receivedResponse, response2) # remove cached entries from name - self.sendConsoleCommand("getPool(\"\"):getCache():expungeByName(newDNSName(\"suffix.cache.tests.powerdns.com.\"), dnsdist.ANY, true)") + self.sendConsoleCommand("getPool(\"\"):getCache():expungeByName(newDNSName(\"suffix.cache.tests.powerdns.com.\"), DNSQType.ANY, true)") # Miss for name (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response) @@ -1200,7 +1265,7 @@ class TestCacheManagement(DNSDistTest): self.assertEquals(receivedResponse, response2) # remove cached entries from name A - self.sendConsoleCommand("getPool(\"\"):getCache():expungeByName(newDNSName(\"suffixtype.cache.tests.powerdns.com.\"), dnsdist.A, true)") + self.sendConsoleCommand("getPool(\"\"):getCache():expungeByName(newDNSName(\"suffixtype.cache.tests.powerdns.com.\"), DNSQType.A, true)") # Miss for name A (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response)