summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2020-05-28 09:05:31 -0700
committerBob Halley <halley@dnspython.org>2020-05-28 09:05:31 -0700
commita24087940bb17f2bcfcfc59d1aef3d5b3e100f1c (patch)
tree91ed95c135194b5e0bba55227e6590896b0c1ef9 /tests
parent62eb54ffc4fbeb8f83749afd674209dbd1de03eb (diff)
downloaddnspython-a24087940bb17f2bcfcfc59d1aef3d5b3e100f1c.tar.gz
a bit more cache coverage
Diffstat (limited to 'tests')
-rw-r--r--tests/test_resolver.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/test_resolver.py b/tests/test_resolver.py
index 23653b1..abc1a0f 100644
--- a/tests/test_resolver.py
+++ b/tests/test_resolver.py
@@ -220,6 +220,61 @@ class BaseResolverTests(unittest.TestCase):
dns.rdataclass.IN))
is None)
+ def test_cache_flush(self):
+ name1 = dns.name.from_text('name1')
+ name2 = dns.name.from_text('name2')
+ basic_cache = dns.resolver.Cache()
+ lru_cache = dns.resolver.LRUCache(100)
+ for cache in [basic_cache, lru_cache]:
+ answer1 = FakeAnswer(time.time() + 10)
+ answer2 = FakeAnswer(time.time() + 10)
+ cache.put((name1, dns.rdatatype.A, dns.rdataclass.IN), answer1)
+ cache.put((name2, dns.rdatatype.A, dns.rdataclass.IN), answer2)
+ canswer = cache.get((name1, dns.rdatatype.A, dns.rdataclass.IN))
+ self.assertTrue(canswer is answer1)
+ canswer = cache.get((name2, dns.rdatatype.A, dns.rdataclass.IN))
+ self.assertTrue(canswer is answer2)
+ # explicit flush
+ cache.flush((name1, dns.rdatatype.A, dns.rdataclass.IN))
+ canswer = cache.get((name1, dns.rdatatype.A, dns.rdataclass.IN))
+ self.assertTrue(canswer is None)
+ canswer = cache.get((name2, dns.rdatatype.A, dns.rdataclass.IN))
+ self.assertTrue(canswer is answer2)
+ # flush all
+ cache.flush()
+ canswer = cache.get((name1, dns.rdatatype.A, dns.rdataclass.IN))
+ self.assertTrue(canswer is None)
+ canswer = cache.get((name2, dns.rdatatype.A, dns.rdataclass.IN))
+ self.assertTrue(canswer is None)
+
+ def test_LRUCache_set_max_size(self):
+ cache = dns.resolver.LRUCache(4)
+ self.assertEqual(cache.max_size, 4)
+ cache.set_max_size(0)
+ self.assertEqual(cache.max_size, 1)
+
+ def test_LRUCache_overwrite(self):
+ def on_lru_list(cache, key, value):
+ cnode = cache.sentinel.next
+ while cnode != cache.sentinel:
+ if cnode.key == key and cnode.value is value:
+ return True
+ cnode = cnode.next
+ return False
+ cache = dns.resolver.LRUCache(4)
+ answer1 = FakeAnswer(time.time() + 10)
+ answer2 = FakeAnswer(time.time() + 10)
+ key = (dns.name.from_text('key.'), dns.rdatatype.A, dns.rdataclass.IN)
+ cache.put(key, answer1)
+ canswer = cache.get(key)
+ self.assertTrue(canswer is answer1)
+ self.assertTrue(on_lru_list(cache, key, answer1))
+ cache.put(key, answer2)
+ canswer = cache.get(key)
+ self.assertTrue(canswer is answer2)
+ self.assertFalse(on_lru_list(cache, key, answer1))
+ self.assertTrue(on_lru_list(cache, key, answer2))
+
def testEmptyAnswerSection(self):
# TODO: dangling_cname_0_message_text was the only sample message
# with an empty answer section. Other than that it doesn't