diff options
Diffstat (limited to 'pymemcache/test/test_client.py')
-rw-r--r-- | pymemcache/test/test_client.py | 406 |
1 files changed, 179 insertions, 227 deletions
diff --git a/pymemcache/test/test_client.py b/pymemcache/test/test_client.py index 5aac8b8..c2837a8 100644 --- a/pymemcache/test/test_client.py +++ b/pymemcache/test/test_client.py @@ -18,9 +18,11 @@ import socket import unittest from nose import tools +from pymemcache.client import PooledClient from pymemcache.client import Client, MemcacheUnknownCommandError from pymemcache.client import MemcacheClientError, MemcacheServerError from pymemcache.client import MemcacheUnknownError, MemcacheIllegalInputError +from pymemcache import pool from pymemcache.test.utils import MockMemcacheClient @@ -64,15 +66,18 @@ class MockSocketModule(object): class ClientTestMixin(object): + def make_client(self, mock_socket_values, serializer=None): + client = Client(None, serializer=serializer) + client.sock = MockSocket(list(mock_socket_values)) + return client + def test_set_success(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) result = client.set(b'key', b'value', noreply=False) tools.assert_equal(result, True) def test_set_unicode_key(self): - client = self.Client(None) - client.sock = MockSocket([b'']) + client = self.make_client([b'']) def _set(): client.set(u'\u0FFF', b'value', noreply=False) @@ -80,8 +85,7 @@ class ClientTestMixin(object): tools.assert_raises(MemcacheIllegalInputError, _set) def test_set_unicode_value(self): - client = self.Client(None) - client.sock = MockSocket([b'']) + client = self.make_client([b'']) def _set(): client.set(b'key', u'\u0FFF', noreply=False) @@ -89,80 +93,69 @@ class ClientTestMixin(object): tools.assert_raises(MemcacheIllegalInputError, _set) def test_set_noreply(self): - client = self.Client(None) - client.sock = MockSocket([]) + client = self.make_client([]) result = client.set(b'key', b'value', noreply=True) tools.assert_equal(result, True) def test_set_many_success(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) result = client.set_many({b'key' : b'value'}, noreply=False) tools.assert_equal(result, True) def test_add_stored(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r', b'\n']) + client = self.make_client([b'STORED\r', b'\n']) result = client.add(b'key', b'value', noreply=False) tools.assert_equal(result, True) def test_add_not_stored(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r', b'\n']) + client = self.make_client([b'STORED\r', b'\n', + b'NOT_', b'STOR', b'ED', b'\r\n']) result = client.add(b'key', b'value', noreply=False) - - client.sock = MockSocket([b'NOT_', b'STOR', b'ED', b'\r\n']) result = client.add(b'key', b'value', noreply=False) tools.assert_equal(result, False) def test_get_not_found(self): - client = self.Client(None) - client.sock = MockSocket([b'END\r\n']) + client = self.make_client([b'END\r\n']) result = client.get(b'key') tools.assert_equal(result, None) def test_get_found(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([ + b'STORED\r\n', + b'VALUE key 0 5\r\nvalue\r\nEND\r\n', + ]) result = client.set(b'key', b'value', noreply=False) - - client.sock = MockSocket([b'VALUE key 0 5\r\nvalue\r\nEND\r\n']) result = client.get(b'key') tools.assert_equal(result, b'value') def test_get_many_none_found(self): - client = self.Client(None) - client.sock = MockSocket([b'END\r\n']) + client = self.make_client([b'END\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equal(result, {}) def test_get_many_some_found(self): - client = self.Client(None) - - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([ + b'STORED\r\n', + b'VALUE key1 0 6\r\nvalue1\r\nEND\r\n', + ]) result = client.set(b'key1', b'value1', noreply=False) - - client.sock = MockSocket([b'VALUE key1 0 6\r\nvalue1\r\nEND\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equal(result, {b'key1': b'value1'}) def test_get_many_all_found(self): - client = self.Client(None) - - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([ + b'STORED\r\n', + b'STORED\r\n', + b'VALUE key1 0 6\r\nvalue1\r\n', + b'VALUE key2 0 6\r\nvalue2\r\nEND\r\n', + ]) result = client.set(b'key1', b'value1', noreply=False) - - client.sock = MockSocket([b'STORED\r\n']) result = client.set(b'key2', b'value2', noreply=False) - - client.sock = MockSocket([b'VALUE key1 0 6\r\nvalue1\r\n' - b'VALUE key2 0 6\r\nvalue2\r\nEND\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equal(result, {b'key1': b'value1', b'key2': b'value2'}) def test_get_unicode_key(self): - client = self.Client(None) - client.sock = MockSocket([b'']) + client = self.make_client([b'']) def _get(): client.get(u'\u0FFF') @@ -170,65 +163,48 @@ class ClientTestMixin(object): tools.assert_raises(MemcacheIllegalInputError, _get) def test_delete_not_found(self): - client = self.Client(None) - client.sock = MockSocket([b'NOT_FOUND\r\n']) + client = self.make_client([b'NOT_FOUND\r\n']) result = client.delete(b'key', noreply=False) tools.assert_equal(result, False) def test_delete_found(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r', b'\n']) + client = self.make_client([b'STORED\r', b'\n', b'DELETED\r\n']) result = client.add(b'key', b'value', noreply=False) - - client.sock = MockSocket([b'DELETED\r\n']) result = client.delete(b'key', noreply=False) tools.assert_equal(result, True) def test_delete_noreply(self): - client = self.Client(None) - client.sock = MockSocket([]) + client = self.make_client([]) result = client.delete(b'key', noreply=True) tools.assert_equal(result, True) def test_incr_not_found(self): - client = self.Client(None) - client.sock = MockSocket([b'NOT_FOUND\r\n']) + client = self.make_client([b'NOT_FOUND\r\n']) result = client.incr(b'key', 1, noreply=False) tools.assert_equal(result, None) def test_incr_found(self): - client = self.Client(None) - - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n', b'1\r\n']) client.set(b'key', 0, noreply=False) - - client.sock = MockSocket([b'1\r\n']) result = client.incr(b'key', 1, noreply=False) tools.assert_equal(result, 1) def test_incr_noreply(self): - client = self.Client(None) - - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) client.set(b'key', 0, noreply=False) - client.sock = MockSocket([]) + client = self.make_client([]) result = client.incr(b'key', 1, noreply=True) tools.assert_equal(result, None) def test_decr_not_found(self): - client = self.Client(None) - client.sock = MockSocket([b'NOT_FOUND\r\n']) + client = self.make_client([b'NOT_FOUND\r\n']) result = client.decr(b'key', 1, noreply=False) tools.assert_equal(result, None) def test_decr_found(self): - client = self.Client(None) - - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n', b'1\r\n']) client.set(b'key', 2, noreply=False) - - client.sock = MockSocket([b'1\r\n']) result = client.decr(b'key', 1, noreply=False) tools.assert_equal(result, 1) @@ -238,119 +214,107 @@ class TestClient(ClientTestMixin, unittest.TestCase): Client = Client def test_append_stored(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) result = client.append(b'key', b'value', noreply=False) tools.assert_equal(result, True) def test_prepend_stored(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) result = client.prepend(b'key', b'value', noreply=False) tools.assert_equal(result, True) def test_cas_stored(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) result = client.cas(b'key', b'value', b'cas', noreply=False) tools.assert_equal(result, True) def test_cas_exists(self): - client = self.Client(None) - client.sock = MockSocket([b'EXISTS\r\n']) + client = self.make_client([b'EXISTS\r\n']) result = client.cas(b'key', b'value', b'cas', noreply=False) tools.assert_equal(result, False) def test_cas_not_found(self): - client = self.Client(None) - client.sock = MockSocket([b'NOT_FOUND\r\n']) + client = self.make_client([b'NOT_FOUND\r\n']) result = client.cas(b'key', b'value', b'cas', noreply=False) tools.assert_equal(result, None) def test_cr_nl_boundaries(self): - client = self.Client(None) - client.sock = MockSocket([b'VALUE key1 0 6\r', - b'\nvalue1\r\n' - b'VALUE key2 0 6\r\n', - b'value2\r\n' - b'END\r\n']) + client = self.make_client([b'VALUE key1 0 6\r', + b'\nvalue1\r\n' + b'VALUE key2 0 6\r\n', + b'value2\r\n' + b'END\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equals(result, {b'key1': b'value1', b'key2': b'value2'}) - client.sock = MockSocket([b'VALUE key1 0 6\r\n', - b'value1\r', - b'\nVALUE key2 0 6\r\n', - b'value2\r\n', - b'END\r\n']) + client = self.make_client([b'VALUE key1 0 6\r\n', + b'value1\r', + b'\nVALUE key2 0 6\r\n', + b'value2\r\n', + b'END\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equals(result, {b'key1': b'value1', b'key2': b'value2'}) - client.sock = MockSocket([b'VALUE key1 0 6\r\n', - b'value1\r\n', - b'VALUE key2 0 6\r', - b'\nvalue2\r\n', - b'END\r\n']) + client = self.make_client([b'VALUE key1 0 6\r\n', + b'value1\r\n', + b'VALUE key2 0 6\r', + b'\nvalue2\r\n', + b'END\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equals(result, {b'key1': b'value1', b'key2': b'value2'}) - client.sock = MockSocket([b'VALUE key1 0 6\r\n', - b'value1\r\n', - b'VALUE key2 0 6\r\n', - b'value2\r', - b'\nEND\r\n']) + client = self.make_client([b'VALUE key1 0 6\r\n', + b'value1\r\n', + b'VALUE key2 0 6\r\n', + b'value2\r', + b'\nEND\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equals(result, {b'key1': b'value1', b'key2': b'value2'}) - client.sock = MockSocket([b'VALUE key1 0 6\r\n', - b'value1\r\n', - b'VALUE key2 0 6\r\n', - b'value2\r\n', - b'END\r', - b'\n']) + client = self.make_client([b'VALUE key1 0 6\r\n', + b'value1\r\n', + b'VALUE key2 0 6\r\n', + b'value2\r\n', + b'END\r', + b'\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equals(result, {b'key1': b'value1', b'key2': b'value2'}) - client.sock = MockSocket([b'VALUE key1 0 6\r', - b'\nvalue1\r', - b'\nVALUE key2 0 6\r', - b'\nvalue2\r', - b'\nEND\r', - b'\n']) + client = self.make_client([b'VALUE key1 0 6\r', + b'\nvalue1\r', + b'\nVALUE key2 0 6\r', + b'\nvalue2\r', + b'\nEND\r', + b'\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equals(result, {b'key1': b'value1', b'key2': b'value2'}) def test_delete_exception(self): - client = self.Client(None) - client.sock = MockSocket([Exception('fail')]) + client = self.make_client([Exception('fail')]) def _delete(): client.delete(b'key', noreply=False) tools.assert_raises(Exception, _delete) tools.assert_equal(client.sock, None) - tools.assert_equal(client.buf, b'') def test_flush_all(self): - client = self.Client(None) - client.sock = MockSocket([b'OK\r\n']) + client = self.make_client([b'OK\r\n']) result = client.flush_all(noreply=False) tools.assert_equal(result, True) def test_incr_exception(self): - client = self.Client(None) - client.sock = MockSocket([Exception('fail')]) + client = self.make_client([Exception('fail')]) def _incr(): client.incr(b'key', 1) tools.assert_raises(Exception, _incr) tools.assert_equal(client.sock, None) - tools.assert_equal(client.buf, b'') def test_get_error(self): - client = self.Client(None) - client.sock = MockSocket([b'ERROR\r\n']) + client = self.make_client([b'ERROR\r\n']) def _get(): client.get(b'key') @@ -358,15 +322,13 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_raises(MemcacheUnknownCommandError, _get) def test_get_recv_chunks(self): - client = self.Client(None) - client.sock = MockSocket([b'VALUE key', b' 0 5\r', b'\nvalue', b'\r\n', - b'END', b'\r', b'\n']) + client = self.make_client([b'VALUE key', b' 0 5\r', b'\nvalue', + b'\r\n', b'END', b'\r', b'\n']) result = client.get(b'key') tools.assert_equal(result, b'value') def test_get_unknown_error(self): - client = self.Client(None) - client.sock = MockSocket([b'foobarbaz\r\n']) + client = self.make_client([b'foobarbaz\r\n']) def _get(): client.get(b'key') @@ -374,58 +336,48 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_raises(MemcacheUnknownError, _get) def test_gets_not_found(self): - client = self.Client(None) - client.sock = MockSocket([b'END\r\n']) + client = self.make_client([b'END\r\n']) result = client.gets(b'key') tools.assert_equal(result, (None, None)) def test_gets_found(self): - client = self.Client(None) - client.sock = MockSocket([b'VALUE key 0 5 10\r\nvalue\r\nEND\r\n']) + client = self.make_client([b'VALUE key 0 5 10\r\nvalue\r\nEND\r\n']) result = client.gets(b'key') tools.assert_equal(result, (b'value', b'10')) def test_gets_many_none_found(self): - client = self.Client(None) - client.sock = MockSocket([b'END\r\n']) + client = self.make_client([b'END\r\n']) result = client.gets_many([b'key1', b'key2']) tools.assert_equal(result, {}) def test_gets_many_some_found(self): - client = self.Client(None) - client.sock = MockSocket([b'VALUE key1 0 6 11\r\nvalue1\r\nEND\r\n']) + client = self.make_client([b'VALUE key1 0 6 11\r\nvalue1\r\nEND\r\n']) result = client.gets_many([b'key1', b'key2']) tools.assert_equal(result, {b'key1': (b'value1', b'11')}) def test_touch_not_found(self): - client = self.Client(None) - client.sock = MockSocket([b'NOT_FOUND\r\n']) + client = self.make_client([b'NOT_FOUND\r\n']) result = client.touch(b'key', noreply=False) tools.assert_equal(result, False) def test_touch_found(self): - client = self.Client(None) - client.sock = MockSocket([b'TOUCHED\r\n']) + client = self.make_client([b'TOUCHED\r\n']) result = client.touch(b'key', noreply=False) tools.assert_equal(result, True) def test_quit(self): - client = self.Client(None) - client.sock = MockSocket([]) + client = self.make_client([]) result = client.quit() tools.assert_equal(result, None) tools.assert_equal(client.sock, None) - tools.assert_equal(client.buf, b'') def test_replace_stored(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) result = client.replace(b'key', b'value', noreply=False) tools.assert_equal(result, True) def test_replace_not_stored(self): - client = self.Client(None) - client.sock = MockSocket([b'NOT_STORED\r\n']) + client = self.make_client([b'NOT_STORED\r\n']) result = client.replace(b'key', b'value', noreply=False) tools.assert_equal(result, False) @@ -433,24 +385,21 @@ class TestClient(ClientTestMixin, unittest.TestCase): def _ser(key, value): return json.dumps(value), 0 - client = self.Client(None, serializer=_ser) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n'], serializer=_ser) client.set('key', {'c': 'd'}) tools.assert_equal(client.sock.send_bufs, [ b'set key 0 0 10 noreply\r\n{"c": "d"}\r\n' ]) def test_set_socket_handling(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) result = client.set(b'key', b'value', noreply=False) tools.assert_equal(result, True) tools.assert_equal(client.sock.closed, False) tools.assert_equal(len(client.sock.send_bufs), 1) def test_set_error(self): - client = self.Client(None) - client.sock = MockSocket([b'ERROR\r\n']) + client = self.make_client([b'ERROR\r\n']) def _set(): client.set(b'key', b'value', noreply=False) @@ -458,19 +407,16 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_raises(MemcacheUnknownCommandError, _set) def test_set_exception(self): - client = self.Client(None) - client.sock = MockSocket([Exception('fail')]) + client = self.make_client([Exception('fail')]) def _set(): client.set(b'key', b'value', noreply=False) tools.assert_raises(Exception, _set) tools.assert_equal(client.sock, None) - tools.assert_equal(client.buf, b'') def test_set_client_error(self): - client = self.Client(None) - client.sock = MockSocket([b'CLIENT_ERROR some message\r\n']) + client = self.make_client([b'CLIENT_ERROR some message\r\n']) def _set(): client.set('key', 'value', noreply=False) @@ -478,8 +424,7 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_raises(MemcacheClientError, _set) def test_set_server_error(self): - client = self.Client(None) - client.sock = MockSocket([b'SERVER_ERROR some message\r\n']) + client = self.make_client([b'SERVER_ERROR some message\r\n']) def _set(): client.set(b'key', b'value', noreply=False) @@ -487,8 +432,7 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_raises(MemcacheServerError, _set) def test_set_unknown_error(self): - client = self.Client(None) - client.sock = MockSocket([b'foobarbaz\r\n']) + client = self.make_client([b'foobarbaz\r\n']) def _set(): client.set(b'key', b'value', noreply=False) @@ -496,16 +440,14 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_raises(MemcacheUnknownError, _set) def test_set_many_socket_handling(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) result = client.set_many({b'key': b'value'}, noreply=False) tools.assert_equal(result, True) tools.assert_equal(client.sock.closed, False) tools.assert_equal(len(client.sock.send_bufs), 1) def test_set_many_exception(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n', Exception('fail')]) + client = self.make_client([b'STORED\r\n', Exception('fail')]) def _set(): client.set_many({b'key': b'value', b'other': b'value'}, @@ -513,11 +455,9 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_raises(Exception, _set) tools.assert_equal(client.sock, None) - tools.assert_equal(client.buf, b'') def test_stats(self): - client = self.Client(None) - client.sock = MockSocket([b'STAT fake_stats 1\r\n', b'END\r\n']) + client = self.make_client([b'STAT fake_stats 1\r\n', b'END\r\n']) result = client.stats() tools.assert_equal(client.sock.send_bufs, [ b'stats \r\n' @@ -525,8 +465,7 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_equal(result, {b'fake_stats': 1}) def test_stats_with_args(self): - client = self.Client(None) - client.sock = MockSocket([b'STAT fake_stats 1\r\n', b'END\r\n']) + client = self.make_client([b'STAT fake_stats 1\r\n', b'END\r\n']) result = client.stats('some_arg') tools.assert_equal(client.sock.send_bufs, [ b'stats some_arg\r\n' @@ -534,8 +473,7 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_equal(result, {b'fake_stats': 1}) def test_stats_conversions(self): - client = self.Client(None) - client.sock = MockSocket([ + client = self.make_client([ # Most stats are converted to int b'STAT cmd_get 2519\r\n', b'STAT cmd_set 3099\r\n', @@ -567,42 +505,16 @@ class TestClient(ClientTestMixin, unittest.TestCase): } tools.assert_equal(result, expected) - def test_socket_connect(self): - server = ("example.com", 11211) - - client = Client(server, socket_module=MockSocketModule()) - client._connect() - tools.assert_equal(client.sock.connections, [server]) - - timeout = 2 - connect_timeout = 3 - client = Client(server, connect_timeout=connect_timeout, timeout=timeout, - socket_module=MockSocketModule()) - client._connect() - tools.assert_equal(client.sock.timeouts, [connect_timeout, timeout]) - - client = Client(server, socket_module=MockSocketModule()) - client._connect() - tools.assert_equal(client.sock.socket_options, []) - - client = Client(server, socket_module=MockSocketModule(), no_delay=True) - client._connect() - tools.assert_equal(client.sock.socket_options, [(socket.IPPROTO_TCP, - socket.TCP_NODELAY, 1)]) - def test_python_dict_set_is_supported(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([b'STORED\r\n']) client[b'key'] = b'value' def test_python_dict_get_is_supported(self): - client = self.Client(None) - client.sock = MockSocket([b'VALUE key 0 5\r\nvalue\r\nEND\r\n']) + client = self.make_client([b'VALUE key 0 5\r\nvalue\r\nEND\r\n']) tools.assert_equal(client[b'key'], b'value') def test_python_dict_get_not_found_is_supported(self): - client = self.Client(None) - client.sock = MockSocket([b'END\r\n']) + client = self.make_client([b'END\r\n']) def _get(): _ = client[b'key'] @@ -610,68 +522,108 @@ class TestClient(ClientTestMixin, unittest.TestCase): tools.assert_raises(KeyError, _get) def test_python_dict_del_is_supported(self): - client = self.Client(None) - client.sock = MockSocket([b'DELETED\r\n']) + client = self.make_client([b'DELETED\r\n']) del client[b'key'] def test_too_long_key(self): - client = self.Client(None) - client.sock = MockSocket([b'END\r\n']) + client = self.make_client([b'END\r\n']) tools.assert_raises(MemcacheClientError, client.get, b'x' * 251) def test_key_contains_spae(self): - client = self.Client(None) - client.sock = MockSocket([b'END\r\n']) + client = self.make_client([b'END\r\n']) tools.assert_raises(MemcacheClientError, client.get, b'abc xyz') def test_key_contains_nonascii(self): - client = self.Client(None) - client.sock = MockSocket([b'END\r\n']) + client = self.make_client([b'END\r\n']) tools.assert_raises(MemcacheClientError, client.get, u'\u3053\u3093\u306b\u3061\u306f') +class TestClientSocketConnect(unittest.TestCase): + def test_socket_connect(self): + server = ("example.com", 11211) + + client = Client(server, socket_module=MockSocketModule()) + client._connect() + tools.assert_equal(client.sock.connections, [server]) + + timeout = 2 + connect_timeout = 3 + client = Client(server, connect_timeout=connect_timeout, timeout=timeout, + socket_module=MockSocketModule()) + client._connect() + tools.assert_equal(client.sock.timeouts, [connect_timeout, timeout]) + + client = Client(server, socket_module=MockSocketModule()) + client._connect() + tools.assert_equal(client.sock.socket_options, []) + + client = Client(server, socket_module=MockSocketModule(), no_delay=True) + client._connect() + tools.assert_equal(client.sock.socket_options, [(socket.IPPROTO_TCP, + socket.TCP_NODELAY, 1)]) + + +class TestPooledClient(ClientTestMixin, unittest.TestCase): + def make_client(self, mock_socket_values, serializer=None): + mock_client = Client(None, serializer=serializer) + mock_client.sock = MockSocket(list(mock_socket_values)) + client = PooledClient(None, serializer=serializer) + client.client_pool = pool.ObjectPool(lambda: mock_client) + return client + + class TestMockClient(ClientTestMixin, unittest.TestCase): - Client = MockMemcacheClient + def make_client(self, mock_socket_values, serializer=None): + client = MockMemcacheClient(None, serializer=serializer) + client.sock = MockSocket(list(mock_socket_values)) + return client class TestPrefixedClient(ClientTestMixin, unittest.TestCase): - def Client(self, *args, **kwargs): - return Client(*args, key_prefix=b'xyz:', **kwargs) + def make_client(self, mock_socket_values, serializer=None): + client = Client(None, serializer=serializer, key_prefix=b'xyz:') + client.sock = MockSocket(list(mock_socket_values)) + return client def test_get_found(self): - client = self.Client(None) - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([ + b'STORED\r\n', + b'VALUE xyz:key 0 5\r\nvalue\r\nEND\r\n', + ]) result = client.set(b'key', b'value', noreply=False) - - client.sock = MockSocket([b'VALUE xyz:key 0 5\r\nvalue\r\nEND\r\n']) result = client.get(b'key') tools.assert_equal(result, b'value') def test_get_many_some_found(self): - client = self.Client(None) - - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([ + b'STORED\r\n', + b'VALUE xyz:key1 0 6\r\nvalue1\r\nEND\r\n', + ]) result = client.set(b'key1', b'value1', noreply=False) - - client.sock = MockSocket([b'VALUE xyz:key1 0 6\r\nvalue1\r\nEND\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equal(result, {b'key1': b'value1'}) def test_get_many_all_found(self): - client = self.Client(None) - - client.sock = MockSocket([b'STORED\r\n']) + client = self.make_client([ + b'STORED\r\n', + b'STORED\r\n', + b'VALUE xyz:key1 0 6\r\nvalue1\r\n', + b'VALUE xyz:key2 0 6\r\nvalue2\r\nEND\r\n', + ]) result = client.set(b'key1', b'value1', noreply=False) - - client.sock = MockSocket([b'STORED\r\n']) result = client.set(b'key2', b'value2', noreply=False) - - client.sock = MockSocket([b'VALUE xyz:key1 0 6\r\nvalue1\r\n' - b'VALUE xyz:key2 0 6\r\nvalue2\r\nEND\r\n']) result = client.get_many([b'key1', b'key2']) tools.assert_equal(result, {b'key1': b'value1', b'key2': b'value2'}) def test_python_dict_get_is_supported(self): - client = self.Client(None) - client.sock = MockSocket([b'VALUE xyz:key 0 5\r\nvalue\r\nEND\r\n']) + client = self.make_client([b'VALUE xyz:key 0 5\r\nvalue\r\nEND\r\n']) tools.assert_equal(client[b'key'], b'value') + + +class TestPrefixedPooledClient(TestPrefixedClient): + def make_client(self, mock_socket_values, serializer=None): + mock_client = Client(None, serializer=serializer, key_prefix=b'xyz:') + mock_client.sock = MockSocket(list(mock_socket_values)) + client = PooledClient(None, serializer=serializer, key_prefix=b'xyz:') + client.client_pool = pool.ObjectPool(lambda: mock_client) + return client |