def test_unset_key_returns_none(self): settings = OrmucoCacheClientSettings() repository = MemoryRepository(settings) result = repository.retrieve('unset-key') self.assertEqual(result, None)
def test_overflow_cache_size(self): settings = OrmucoCacheClientSettings() repository = MemoryRepository(settings) factory = CacheItemFactory(settings) for i in range(0, settings.cache_max_size + 2): key = str(i + 1) data = [1, 2, 3] cache_item = factory.build_cache_item(key, data) repository.store(cache_item) retrieve_result = repository.retrieve(str(5)) self.assertIsInstance(retrieve_result, CacheItem)
def test_lru_cache_updating(self): settings = OrmucoCacheClientSettings() repository = MemoryRepository(settings) factory = CacheItemFactory(settings) for i in range(0, 3): key = str(i + 1) data = [1, 2, 3] cache_item = factory.build_cache_item(key, data) repository.store(cache_item) retrieve_result = repository.retrieve(str(1)) self.assertIsInstance(retrieve_result, CacheItem)
def test_set_key_returns_same_data(self): settings = OrmucoCacheClientSettings() repository = MemoryRepository(settings) factory = CacheItemFactory(settings) key = 'some-key' data = [1, 2, 3] cache_item = factory.build_cache_item(key, data) store_result = repository.store(cache_item) self.assertEqual(store_result, True) retrieve_result = repository.retrieve(key) self.assertEqual(retrieve_result, cache_item)
def test_cache_item_expiration(self): settings = OrmucoCacheClientSettings() settings.cache_expiration = 0.0001 repository = MemoryRepository(settings) factory = CacheItemFactory(settings) key = 'some-key' data = [1, 2, 3] cache_item = factory.build_cache_item(key, data) store_result = repository.store(cache_item) self.assertEqual(store_result, True) time.sleep(settings.cache_expiration) retrieve_result = repository.retrieve(key) self.assertEqual(retrieve_result, None)
class ChainClientRepository(BaseRepository): def __init__(self, settings): super().__init__(settings) self.memory_repository = MemoryRepository(settings) self.network_repository = ClientNetworkRepository(settings) def retrieve(self, key): cache_item = self.memory_repository.retrieve(key) if cache_item != None: return cache_item cache_item = self.network_repository.retrieve(key) if cache_item != None: self.memory_repository.store(cache_item) return cache_item def store(self, cache_item): self.memory_repository.store(cache_item) self.network_repository.store(cache_item) return True