]>
git.ipfire.org Git - thirdparty/pdns.git/blob - regression-tests.dnsdist/test_CacheInsertedResponses.py
5 from dnsdisttests
import DNSDistTest
7 class TestCacheInsertedResponses(DNSDistTest
):
11 _config_template
= """
12 pc = newPacketCache(100, {maxTTL=86400, minTTL=1})
13 getPool(""):setCache(pc)
14 addCacheInsertedResponseAction(SuffixMatchNodeRule("cacheinsertedresponses.tests.powerdns.com."), LimitTTLResponseAction(%d, %d))
15 newServer{address="127.0.0.1:%s"}
17 _config_params
= ['capTTLMax', 'capTTLMin', '_testServerPort']
19 def testTTLSetAfterInsertion(self
):
21 CacheInsertedResponse: Check that the TTL is capped after inserting into the cache
24 name
= 'reduce-ttl-after-insertion.cacheinsertedresponses.tests.powerdns.com.'
25 query
= dns
.message
.make_query(name
, 'AAAA', 'IN')
27 response
= dns
.message
.make_response(query
)
28 rrset
= dns
.rrset
.from_text(name
,
33 response
.answer
.append(rrset
)
35 responseOnMiss
= dns
.message
.make_response(query
)
36 rrset
= dns
.rrset
.from_text(name
,
41 responseOnMiss
.answer
.append(rrset
)
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
)
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
)
58 def testTTLRaisedAfterInsertion(self
):
60 CacheInsertedResponse: Check that the TTL can be raised after inserting into the cache
63 name
= 'raise-ttl-after-insertion.cacheinsertedresponses.tests.powerdns.com.'
64 query
= dns
.message
.make_query(name
, 'AAAA', 'IN')
66 response
= dns
.message
.make_response(query
)
67 rrset
= dns
.rrset
.from_text(name
,
72 response
.answer
.append(rrset
)
74 responseOnMiss
= dns
.message
.make_response(query
)
75 rrset
= dns
.rrset
.from_text(name
,
80 responseOnMiss
.answer
.append(rrset
)
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
)
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
)