def test_cache_eviction_based_on_time(self): cache = FIFOCache(cache_timeout=0.1) verifier = DummyVerifier(cache=cache) # Prime the cache by verifying an assertion. assertion = self.verifier.make_assertion("*****@*****.**", "") self.assertTrue(verifier.verify(assertion)) # Make it error out if re-fetching the keys def fetch_public_key(hostname): raise 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 setUp(self): self.root = self.conf_get('main', 'url') self.vusers = int(self.conf_get('main', 'vusers')) self.verifier = DummyVerifier key = DummyVerifier.fetch_public_key("browserid.org") key = json.dumps({"public-key": key}) def urlopen(url, data): # NOQA class response(object): @staticmethod def read(): return key return response self.verifier.urlopen = urlopen
def test_cache_eviction_during_write(self): cache = FIFOCache(cache_timeout=0.1) verifier = DummyVerifier(cache=cache) # Prime the cache by verifying an assertion. assertion1 = self.verifier.make_assertion("*****@*****.**", "", "1.com") self.assertTrue(verifier.verify(assertion1)) self.assertEquals(len(cache), 1) # Let that cached key expire time.sleep(0.1) # Now grab a different key; caching it should purge the expired key. assertion2 = self.verifier.make_assertion("*****@*****.**", "", "2.com") self.assertTrue(verifier.verify(assertion2)) self.assertEquals(len(cache), 1) # Check that only the second entry is in cache. def fetch_public_key(hostname): raise RuntimeError("key fetch disabled") verifier.fetch_public_key = fetch_public_key self.assertTrue(verifier.verify(assertion2)) self.assertRaises(RuntimeError, verifier.verify, assertion1)
def test_cache_eviction_based_on_size(self): cache = FIFOCache(max_size=2) verifier = DummyVerifier(cache=cache) # Prime the cache by verifying some assertions. assertion1 = self.verifier.make_assertion("*****@*****.**", "", "1.com") self.assertTrue(verifier.verify(assertion1)) assertion2 = self.verifier.make_assertion("*****@*****.**", "", "2.com") self.assertTrue(verifier.verify(assertion2)) self.assertEquals(len(cache), 2) # Hitting a third host should evict the first public key. assertion3 = self.verifier.make_assertion("*****@*****.**", "", "3.com") self.assertTrue(verifier.verify(assertion3)) self.assertEquals(len(cache), 2) # Make it error out if re-fetching any keys def fetch_public_key(hostname): raise RuntimeError("key fetch disabled") verifier.fetch_public_key = fetch_public_key # It should have to re-fetch for 1, but not 2. self.assertTrue(verifier.verify(assertion2)) self.assertRaises(RuntimeError, verifier.verify, assertion1)
def read(): key = DummyVerifier.fetch_public_key("browserid.org") return json.dumps({"public-key": key})