]>
Commit | Line | Data |
---|---|---|
a0a790cd RG |
1 | #!/usr/bin/env python |
2 | import base64 | |
3 | import time | |
4 | import dns | |
5 | from dnsdisttests import DNSDistTest | |
6 | ||
7 | class 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 |