def test_custom_client(self): class MyClient(Client): pass client = HashClient([]) client.client_class = MyClient client.add_server(("host", 11211)) assert isinstance(client.clients["host:11211"], MyClient)
def test_setup_client_without_pooling(self): with mock.patch('pymemcache.client.hash.Client') as internal_client: client = HashClient([], timeout=999, key_prefix='foo_bar_baz') client.add_server('127.0.0.1', '11211') assert internal_client.call_args[0][0] == ('127.0.0.1', '11211') kwargs = internal_client.call_args[1] assert kwargs['timeout'] == 999 assert kwargs['key_prefix'] == 'foo_bar_baz'
def test_setup_client_without_pooling(self): client_class = "pymemcache.client.hash.HashClient.client_class" with mock.patch(client_class) as internal_client: client = HashClient([], timeout=999, key_prefix="foo_bar_baz") client.add_server(("127.0.0.1", "11211")) assert internal_client.call_args[0][0] == ("127.0.0.1", "11211") kwargs = internal_client.call_args[1] assert kwargs["timeout"] == 999 assert kwargs["key_prefix"] == "foo_bar_baz"
def test_custom_client_with_pooling(self): class MyClient(Client): pass client = HashClient([], use_pooling=True) client.client_class = MyClient client.add_server(("host", 11211)) assert isinstance(client.clients["host:11211"], PooledClient) pool = client.clients["host:11211"].client_pool with pool.get_and_release(destroy_on_fail=True) as c: assert isinstance(c, MyClient)
def test_failed_is_retried(self, client_patch): client = HashClient([], retry_attempts=1, retry_timeout=0) client.add_server("127.0.0.1", 11211) assert client_patch.call_count == 1 test_client = client_patch.return_value test_client.server = ("127.0.0.1", 11211) test_client.get.side_effect = socket.timeout() with pytest.raises(socket.timeout): client.get(b"key", noreply=False) test_client.get.side_effect = lambda *_: "Some value" assert client.get(b"key") == "Some value" assert client_patch.call_count == 1
def test_dead_server_comes_back(self, client_patch): client = HashClient([], dead_timeout=0, retry_attempts=0) client.add_server("127.0.0.1", 11211) test_client = client_patch.return_value test_client.server = ("127.0.0.1", 11211) test_client.get.side_effect = socket.timeout() with pytest.raises(socket.timeout): client.get(b"key", noreply=False) # Client gets removed because of socket timeout assert ("127.0.0.1", 11211) in client._dead_clients test_client.get.side_effect = lambda *_: "Some value" # Client should be retried and brought back assert client.get(b"key") == "Some value" assert ("127.0.0.1", 11211) not in client._dead_clients
def test_legacy_add_remove_server_signature(self): server = ("127.0.0.1", 11211) client = HashClient([]) assert client.clients == {} client.add_server(*server) # Unpack (host, port) tuple. assert ("%s:%s" % server) in client.clients client._mark_failed_server(server) assert server in client._failed_clients client.remove_server(*server) # Unpack (host, port) tuple. assert server in client._dead_clients assert server not in client._failed_clients # Ensure that server is a string if passing port argument: with pytest.raises(TypeError): client.add_server(server, server[-1]) with pytest.raises(TypeError): client.remove_server(server, server[-1])