Example #1
0
    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)
Example #2
0
    def test_store_to_invalid_server(self):
        settings = OrmucoCacheClientSettings()
        settings.server.port = 12424

        repository = ClientNetworkRepository(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, False)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
class ClientNetworkRepository(BaseRepository):
    delimiter = b'\r\n'

    def __init__(self, settings):
        super().__init__(settings)
        self.cache_item_factory = CacheItemFactory(self.settings)

    def send_command_to_server(self, command):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            sock.connect(
                (self.settings.server.host, self.settings.server.port))
            sock.sendall(command.encode() + self.delimiter)
            response = b''

            while self.delimiter not in response:
                response += sock.recv(1024)

            response_as_string = response.decode('utf-8').strip()
        except:
            return None
        finally:
            sock.close()

        return response_as_string

    def retrieve(self, key):
        command = "RTRV " + key

        thread = ThreadWithReturnValue(target=self.send_command_to_server,
                                       args=(command, ))
        thread.setDaemon(True)
        thread.start()

        json_data = thread.join(timeout=self.settings.timeout)

        if json_data == None or json_data == 'MISS' or thread.isAlive():
            return None
        else:
            return self.cache_item_factory.restore_cache_item(key, json_data)

    def store(self, cache_item):
        command = "STR " + cache_item.key + " " + json.dumps(cache_item.data)

        thread = ThreadWithReturnValue(target=self.send_command_to_server,
                                       args=(command, ))
        thread.setDaemon(True)
        thread.start()

        json_data = thread.join(timeout=self.settings.timeout)

        if json_data == 'ACK':
            return True
        else:
            return False
Example #7
0
    def test_retrieve_from_invalid_server(self):
        settings = OrmucoCacheClientSettings()
        settings.server.port = 12424

        repository = ClientNetworkRepository(settings)
        factory = CacheItemFactory(settings)

        key = 'some-key'

        retrieve_result = repository.retrieve(key)
        self.assertEqual(retrieve_result, None)
Example #8
0
class StoreCommand:
    COMMAND_PREFIX = 'STR'

    def __init__(self, settings):
        self.settings = settings
        self.repository = RepositoryFactory.build_repository(settings)
        self.cache_item_factory = CacheItemFactory(self.settings)

    def execute(self, key, data):
        cache_item = self.cache_item_factory.build_cache_item(key, data)
        return self.repository.store(cache_item)
Example #9
0
 def __init__(self, settings):
     self.settings = settings
     self.repository = RepositoryFactory.build_repository(settings)
     self.cache_item_factory = CacheItemFactory(self.settings)
Example #10
0
 def __init__(self, settings):
     super().__init__(settings)
     self.cache_item_factory = CacheItemFactory(self.settings)