def test_overwrite(self): cache = StateCache(2) cache.put("key", "cache_token", "value") cache.put("key", "cache_token2", "value2") self.assertEqual(len(cache), 1) self.assertEqual(cache.get("key", "cache_token"), None) self.assertEqual(cache.get("key", "cache_token2"), "value2")
def test_put_get(self): cache = StateCache(5) cache.put("key", "cache_token", "value") self.assertEqual(len(cache), 1) self.assertEqual(cache.get("key", "cache_token"), "value") self.assertEqual(cache.get("key", "cache_token2"), None) with self.assertRaises(Exception): self.assertEqual(cache.get("key", None), None)
def test_evict_all(self): cache = StateCache(5) cache.put("key", "cache_token", "value") cache.put("key2", "cache_token", "value2") self.assertEqual(len(cache), 2) cache.evict_all() self.assertEqual(len(cache), 0) self.assertEqual(cache.get("key", "cache_token"), None) self.assertEqual(cache.get("key2", "cache_token"), None)
def test_clear(self): cache = StateCache(5) cache.clear("new-key", "cache_token") cache.put("key", "cache_token", ["value"]) self.assertEqual(len(cache), 2) self.assertEqual(cache.get("new-key", "new_token"), None) self.assertEqual(cache.get("key", "cache_token"), ['value']) # test clear without existing key/token cache.clear("non-existing", "token") self.assertEqual(len(cache), 3) self.assertEqual(cache.get("non-existing", "token"), []) # test eviction in case the cache token changes cache.clear("new-key", "wrong_token") self.assertEqual(len(cache), 2) self.assertEqual(cache.get("new-key", "cache_token"), None) self.assertEqual(cache.get("new-key", "wrong_token"), None)
def test_extend(self): cache = StateCache(3) cache.put("key", "cache_token", ['val']) # test extend for existing key cache.extend("key", "cache_token", ['yet', 'another', 'val']) self.assertEqual(len(cache), 1) self.assertEqual(cache.get("key", "cache_token"), ['val', 'yet', 'another', 'val']) # test extend without existing key cache.extend("key2", "cache_token", ['another', 'val']) self.assertEqual(len(cache), 2) self.assertEqual(cache.get("key2", "cache_token"), ['another', 'val']) # test eviction in case the cache token changes cache.extend("key2", "new_token", ['new_value']) self.assertEqual(cache.get("key2", "new_token"), None) self.assertEqual(len(cache), 1)
def test_max_size(self): cache = StateCache(2) cache.put("key", "cache_token", "value") cache.put("key2", "cache_token", "value") self.assertEqual(len(cache), 2) cache.put("key2", "cache_token", "value") self.assertEqual(len(cache), 2) cache.put("key", "cache_token", "value") self.assertEqual(len(cache), 2)
def test_lru(self): cache = StateCache(5) cache.put("key", "cache_token", "value") cache.put("key2", "cache_token2", "value2") cache.put("key3", "cache_token", "value0") cache.put("key3", "cache_token", "value3") cache.put("key4", "cache_token4", "value4") cache.put("key5", "cache_token", "value0") cache.put("key5", "cache_token", ["value5"]) self.assertEqual(len(cache), 5) self.assertEqual(cache.get("key", "cache_token"), "value") self.assertEqual(cache.get("key2", "cache_token2"), "value2") self.assertEqual(cache.get("key3", "cache_token"), "value3") self.assertEqual(cache.get("key4", "cache_token4"), "value4") self.assertEqual(cache.get("key5", "cache_token"), ["value5"]) # insert another key to trigger cache eviction cache.put("key6", "cache_token2", "value7") self.assertEqual(len(cache), 5) # least recently used key should be gone ("key") self.assertEqual(cache.get("key", "cache_token"), None) # trigger a read on "key2" cache.get("key2", "cache_token") # insert another key to trigger cache eviction cache.put("key7", "cache_token", "value7") self.assertEqual(len(cache), 5) # least recently used key should be gone ("key3") self.assertEqual(cache.get("key3", "cache_token"), None) # trigger a put on "key2" cache.put("key2", "cache_token", "put") self.assertEqual(len(cache), 5) # insert another key to trigger cache eviction cache.put("key8", "cache_token", "value8") self.assertEqual(len(cache), 5) # least recently used key should be gone ("key4") self.assertEqual(cache.get("key4", "cache_token"), None) # make "key5" used by appending to it cache.extend("key5", "cache_token", ["another"]) # least recently used key should be gone ("key6") self.assertEqual(cache.get("key6", "cache_token"), None)