From c566e3ee5ae2a49c28e743b237329c2418821c5d Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Mon, 29 Aug 2011 17:48:29 +0100 Subject: [PATCH] add some LRUCache tests --- tests/resolver.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/tests/resolver.py b/tests/resolver.py index 28d5a42c..6be955b7 100644 --- a/tests/resolver.py +++ b/tests/resolver.py @@ -47,6 +47,10 @@ example. 1 IN A 10.0.0.1 ;ADDITIONAL """ +class FakeAnswer(object): + def __init__(self, expiration): + self.expiration = expiration + class BaseResolverTests(object): if sys.platform != 'win32': @@ -102,6 +106,59 @@ class BaseResolverTests(object): zname = dns.resolver.zone_for_name(name) self.failUnlessRaises(dns.resolver.NotAbsolute, bad) + def testLRUReplace(self): + cache = dns.resolver.LRUCache(4) + for i in xrange(0, 5): + name = dns.name.from_text('example%d.' % i) + answer = FakeAnswer(time.time() + 1) + cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer) + for i in xrange(0, 5): + name = dns.name.from_text('example%d.' % i) + if i == 0: + self.failUnless(cache.get((name, dns.rdatatype.A, + dns.rdataclass.IN)) + is None) + else: + self.failUnless(not cache.get((name, dns.rdatatype.A, + dns.rdataclass.IN)) + is None) + + def testLRUDoesLRU(self): + cache = dns.resolver.LRUCache(4) + for i in xrange(0, 4): + name = dns.name.from_text('example%d.' % i) + answer = FakeAnswer(time.time() + 1) + cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer) + name = dns.name.from_text('example0.') + cache.get((name, dns.rdatatype.A, dns.rdataclass.IN)) + # The LRU is now example1. + name = dns.name.from_text('example4.') + answer = FakeAnswer(time.time() + 1) + cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer) + for i in xrange(0, 5): + name = dns.name.from_text('example%d.' % i) + if i == 1: + self.failUnless(cache.get((name, dns.rdatatype.A, + dns.rdataclass.IN)) + is None) + else: + self.failUnless(not cache.get((name, dns.rdatatype.A, + dns.rdataclass.IN)) + is None) + + def testLRUExpiration(self): + cache = dns.resolver.LRUCache(4) + for i in xrange(0, 4): + name = dns.name.from_text('example%d.' % i) + answer = FakeAnswer(time.time() + 1) + cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer) + time.sleep(2) + for i in xrange(0, 4): + name = dns.name.from_text('example%d.' % i) + self.failUnless(cache.get((name, dns.rdatatype.A, + dns.rdataclass.IN)) + is None) + class PollingMonkeyPatchMixin(object): def setUp(self): self.__native_polling_backend = dns.query._polling_backend -- 2.47.3