diff options
author | Nick Pope <nick.pope@flightdataservices.com> | 2021-05-07 20:22:34 +0100 |
---|---|---|
committer | Nick Pope <nick.pope@flightdataservices.com> | 2021-05-10 18:18:09 +0100 |
commit | 1b471a633325cc9e0ee836778b820d658537c480 (patch) | |
tree | 9aeba1a1911dc146a1e02f432de32c8a82dbdc44 /pymemcache/test/test_client_hash.py | |
parent | 9e2451a3831e216ce726bf2b12f6a68d61e5cbb6 (diff) | |
download | pymemcache-1b471a633325cc9e0ee836778b820d658537c480.tar.gz |
Fixed `HashClient.{get,set}_many()` with UNIX sockets.
Overlooked when UNIX socket support was added to `HashClient` in
acd962b586a4fe018a00acb7e1621be373c13c3b.
Fixes #314.
Diffstat (limited to 'pymemcache/test/test_client_hash.py')
-rw-r--r-- | pymemcache/test/test_client_hash.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/pymemcache/test/test_client_hash.py b/pymemcache/test/test_client_hash.py index 5dd4ec4..04b5123 100644 --- a/pymemcache/test/test_client_hash.py +++ b/pymemcache/test/test_client_hash.py @@ -39,6 +39,20 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): return client + def make_unix_client(self, sockets, *mock_socket_values, **kwargs): + client = HashClient([], **kwargs) + + for socket_, vals in zip(sockets, mock_socket_values): + c = self.make_client_pool( + socket_, + vals, + **kwargs + ) + client.clients[socket_] = c + client.hasher.add_node(socket_) + + return client + def test_setup_client_without_pooling(self): client_class = 'pymemcache.client.hash.HashClient.client_class' with mock.patch(client_class) as internal_client: @@ -50,6 +64,30 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): assert kwargs['timeout'] == 999 assert kwargs['key_prefix'] == 'foo_bar_baz' + def test_get_many_unix(self): + pid = os.getpid() + sockets = [ + '/tmp/pymemcache.1.%d' % pid, + '/tmp/pymemcache.2.%d' % pid, + ] + client = self.make_unix_client(sockets, *[ + [b'STORED\r\n', b'VALUE key3 0 6\r\nvalue2\r\nEND\r\n', ], + [b'STORED\r\n', b'VALUE key1 0 6\r\nvalue1\r\nEND\r\n', ], + ]) + + def get_clients(key): + if key == b'key3': + return client.clients['/tmp/pymemcache.1.%d' % pid] + else: + return client.clients['/tmp/pymemcache.2.%d' % pid] + + client._get_client = get_clients + + result = client.set(b'key1', b'value1', noreply=False) + result = client.set(b'key3', b'value2', noreply=False) + result = client.get_many([b'key1', b'key3']) + assert result == {b'key1': b'value1', b'key3': b'value2'} + def test_get_many_all_found(self): client = self.make_client(*[ [b'STORED\r\n', b'VALUE key3 0 6\r\nvalue2\r\nEND\r\n', ], @@ -284,6 +322,22 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): result = client.set_many(values, noreply=True) assert result == [] + def test_set_many_unix(self): + values = { + 'key1': 'value1', + 'key2': 'value2', + 'key3': 'value3' + } + + pid = os.getpid() + sockets = ['/tmp/pymemcache.%d' % pid] + client = self.make_unix_client(sockets, *[ + [b'STORED\r\n', b'NOT_STORED\r\n', b'STORED\r\n'], + ]) + + result = client.set_many(values, noreply=False) + assert result == ['key2'] + def test_server_encoding_pooled(self): """ test passed encoding from hash client to pooled clients |