def test_cache_eviction_based_on_time(self): certs = CertificatesManager(FIFOCache(cache_timeout=0.1)) verifier = LocalVerifier(certs=certs, warning=False) # Prime the cache by verifying an assertion. assertion = make_assertion("*****@*****.**", "") self.assertTrue(verifier.verify(assertion)) # Make it error out if re-fetching the keys with patched_key_fetching(exc=RuntimeError("key fetch disabled")): verifier.fetch_public_key = fetch_public_key # It should be in the cache, so this works fine. verifier.verify(assertion) # But after sleeping it gets evicted and the error is triggered. time.sleep(0.1) self.assertRaises(RuntimeError, verifier.verify, assertion)
def test_cache_eviction_during_write(self): certs = CertificatesManager(cache_timeout=0.1) verifier = LocalVerifier(certs=certs, warning=False) # Prime the cache by verifying an assertion. assertion1 = make_assertion("*****@*****.**", "", "1.com") self.assertTrue(verifier.verify(assertion1)) self.assertEquals(len(certs.cache), 1) # Let that cached key expire time.sleep(0.1) # Now grab a different key; caching it should purge the expired key. assertion2 = make_assertion("*****@*****.**", "", "2.com") self.assertTrue(verifier.verify(assertion2)) self.assertEquals(len(certs.cache), 1) # Check that only the second entry is in cache. with patched_key_fetching(exc=RuntimeError("key fetch disabled")): self.assertTrue(verifier.verify(assertion2)) self.assertRaises(RuntimeError, verifier.verify, assertion1)
def test_cache_eviction_based_on_size(self): certs = CertificatesManager(max_size=2) verifier = LocalVerifier(certs=certs, warning=False) # Prime the cache by verifying some assertions. assertion1 = make_assertion("*****@*****.**", "", "1.com") self.assertTrue(verifier.verify(assertion1)) assertion2 = make_assertion("*****@*****.**", "", "2.com") self.assertTrue(verifier.verify(assertion2)) self.assertEquals(len(certs.cache), 2) # Hitting a third host should evict the first public key. assertion3 = make_assertion("*****@*****.**", "", "3.com") self.assertTrue(verifier.verify(assertion3)) self.assertEquals(len(certs.cache), 2) # Make it error out if re-fetching any keys with patched_key_fetching(exc=RuntimeError("key fetch disabled")): # It should have to re-fetch for 1, but not 2. self.assertTrue(verifier.verify(assertion2)) self.assertRaises(RuntimeError, verifier.verify, assertion1)
def setUp(self): self.patched = patched_key_fetching() self.patched.__enter__() self.verifier = LocalVerifier(warning=False)