]> git.ipfire.org Git - thirdparty/pdns.git/blame - regression-tests.dnsdist/test_CacheInsertedResponses.py
Merge pull request #13906 from rgacogne/ddist-fix-ipv6-console
[thirdparty/pdns.git] / regression-tests.dnsdist / test_CacheInsertedResponses.py
CommitLineData
a0a790cd
RG
1#!/usr/bin/env python
2import base64
3import time
4import dns
5from dnsdisttests import DNSDistTest
6
7class TestCacheInsertedResponses(DNSDistTest):
8
9 capTTLMax = 3600
10 capTTLMin = 60
11 _config_template = """
12 pc = newPacketCache(100, {maxTTL=86400, minTTL=1})
13 getPool(""):setCache(pc)
cc35f43b 14 addCacheInsertedResponseAction(SuffixMatchNodeRule("cacheinsertedresponses.tests.powerdns.com."), LimitTTLResponseAction(%d, %d))
a0a790cd
RG
15 newServer{address="127.0.0.1:%s"}
16 """
17 _config_params = ['capTTLMax', 'capTTLMin', '_testServerPort']
18
19 def testTTLSetAfterInsertion(self):
20 """
21 CacheInsertedResponse: Check that the TTL is capped after inserting into the cache
22 """
23 initialTTL = 86400
24 name = 'reduce-ttl-after-insertion.cacheinsertedresponses.tests.powerdns.com.'
25 query = dns.message.make_query(name, 'AAAA', 'IN')
26
27 response = dns.message.make_response(query)
28 rrset = dns.rrset.from_text(name,
29 initialTTL,
30 dns.rdataclass.IN,
31 dns.rdatatype.AAAA,
32 '::1')
33 response.answer.append(rrset)
34
35 responseOnMiss = dns.message.make_response(query)
36 rrset = dns.rrset.from_text(name,
37 self.capTTLMax,
38 dns.rdataclass.IN,
39 dns.rdatatype.AAAA,
40 '::1')
41 responseOnMiss.answer.append(rrset)
42
43 # first query to fill the cache
44 (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response)
45 self.assertTrue(receivedQuery)
46 self.assertTrue(receivedResponse)
47 receivedQuery.id = query.id
48 self.assertEqual(query, receivedQuery)
49 self.assertEqual(receivedResponse, responseOnMiss)
50 self.assertLessEqual(receivedResponse.answer[0].ttl, self.capTTLMax)
51
52 # now the result should be cached
53 (_, receivedResponse) = self.sendUDPQuery(query, response=None, useQueue=False)
54 self.assertEqual(receivedResponse, response)
55 self.assertGreater(receivedResponse.answer[0].ttl, self.capTTLMax)
56 self.assertLessEqual(receivedResponse.answer[0].ttl, initialTTL)
57
58 def testTTLRaisedAfterInsertion(self):
59 """
60 CacheInsertedResponse: Check that the TTL can be raised after inserting into the cache
61 """
62 initialTTL = 0
63 name = 'raise-ttl-after-insertion.cacheinsertedresponses.tests.powerdns.com.'
64 query = dns.message.make_query(name, 'AAAA', 'IN')
65
66 response = dns.message.make_response(query)
67 rrset = dns.rrset.from_text(name,
68 initialTTL,
69 dns.rdataclass.IN,
70 dns.rdatatype.AAAA,
71 '::1')
72 response.answer.append(rrset)
73
74 responseOnMiss = dns.message.make_response(query)
75 rrset = dns.rrset.from_text(name,
76 self.capTTLMax,
77 dns.rdataclass.IN,
78 dns.rdatatype.AAAA,
79 '::1')
80 responseOnMiss.answer.append(rrset)
81
82 # first query to fill the cache
83 (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response)
84 self.assertTrue(receivedQuery)
85 self.assertTrue(receivedResponse)
86 receivedQuery.id = query.id
87 self.assertEqual(query, receivedQuery)
88 self.assertEqual(receivedResponse, responseOnMiss)
89 self.assertGreater(receivedResponse.answer[0].ttl, initialTTL)
90 self.assertLessEqual(receivedResponse.answer[0].ttl, self.capTTLMin)
91
92 # the result should NOT have been cached
93 (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response)
94 self.assertTrue(receivedQuery)
95 self.assertTrue(receivedResponse)
96 receivedQuery.id = query.id
97 self.assertEqual(query, receivedQuery)
98 self.assertEqual(receivedResponse, responseOnMiss)
99 self.assertGreater(receivedResponse.answer[0].ttl, initialTTL)
100 self.assertLessEqual(receivedResponse.answer[0].ttl, self.capTTLMin)
101