diff options
Diffstat (limited to 'pymemcache/test')
-rw-r--r-- | pymemcache/test/test_client.py | 26 | ||||
-rw-r--r-- | pymemcache/test/test_client_hash.py | 81 | ||||
-rw-r--r-- | pymemcache/test/test_integration.py | 31 |
3 files changed, 113 insertions, 25 deletions
diff --git a/pymemcache/test/test_client.py b/pymemcache/test/test_client.py index 22f8387..cbf7cf4 100644 --- a/pymemcache/test/test_client.py +++ b/pymemcache/test/test_client.py @@ -724,6 +724,21 @@ class TestClient(ClientTestMixin, unittest.TestCase): result = client.gets_many([b"key1", b"key2"]) assert result == {b"key1": (b"value1", b"11")} + def test_gats_not_found(self): + client = self.make_client([b"END\r\n"]) + result = client.gats(b"key") + assert result == (None, None) + + def test_gats_not_found_defaults(self): + client = self.make_client([b"END\r\n"]) + result = client.gats(b"key", default="foo", cas_default="bar") + assert result == ("foo", "bar") + + def test_gats_found(self): + client = self.make_client([b"VALUE key 0 5 10\r\nvalue\r\nEND\r\n"]) + result = client.gats(b"key") + assert result == (b"value", b"10") + def test_touch_not_found(self): client = self.make_client([b"NOT_FOUND\r\n"]) result = client.touch(b"key", noreply=False) @@ -1517,6 +1532,17 @@ class TestPrefixedClient(ClientTestMixin, unittest.TestCase): result = client.get(b"key") assert result == b"value" + def test_gat_found(self): + 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) + result = client.gat(b"key") + assert result == b"value" + def test_get_many_some_found(self): client = self.make_client( [ diff --git a/pymemcache/test/test_client_hash.py b/pymemcache/test/test_client_hash.py index 4cb066f..99734dd 100644 --- a/pymemcache/test/test_client_hash.py +++ b/pymemcache/test/test_client_hash.py @@ -74,19 +74,50 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): ], ) - def get_clients(key): + def get_node(key): if key == b"key3": - return client.clients["/tmp/pymemcache.1.%d" % pid] + return "/tmp/pymemcache.1.%d" % pid else: - return client.clients["/tmp/pymemcache.2.%d" % pid] + return "/tmp/pymemcache.2.%d" % pid - client._get_client = get_clients + client.hasher.get_node = get_node 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_unix_with_server_key(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"STORED\r\n", + b"VALUE key1 0 6\r\nvalue1\r\nVALUE key3 0 6\r\nvalue2\r\nEND\r\n", + ], + [], + ], + ) + + def get_node(key): + if key == b"server_key": + return "/tmp/pymemcache.1.%d" % pid + else: + return "/tmp/pymemcache.2.%d" % pid + + client.hasher.get_node = get_node + + result = client.set((b"server_key", b"key1"), b"value1", noreply=False) + result = client.set((b"server_key", b"key3"), b"value2", noreply=False) + result = client.get_many([(b"server_key", b"key1"), (b"server_key", b"key3")]) + assert result == {b"key1": b"value1", b"key3": b"value2"} + def test_get_many_all_found(self): client = self.make_client( *[ @@ -101,13 +132,13 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): ] ) - def get_clients(key): + def get_node(key): if key == b"key3": - return client.clients["127.0.0.1:11012"] + return "127.0.0.1:11012" else: - return client.clients["127.0.0.1:11013"] + return "127.0.0.1:11013" - client._get_client = get_clients + client.hasher.get_node = get_node result = client.set(b"key1", b"value1", noreply=False) result = client.set(b"key3", b"value2", noreply=False) @@ -127,13 +158,13 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): ] ) - def get_clients(key): + def get_node(key): if key == b"key3": - return client.clients["127.0.0.1:11012"] + return "127.0.0.1:11012" else: - return client.clients["127.0.0.1:11013"] + return "127.0.0.1:11013" - client._get_client = get_clients + client.hasher.get_node = get_node result = client.set(b"key1", b"value1", noreply=False) result = client.get_many([b"key1", b"key3"]) @@ -153,13 +184,13 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): ] ) - def get_clients(key): + def get_node(key): if key == b"key3": - return client.clients["127.0.0.1:11012"] + return "127.0.0.1:11012" else: - return client.clients["127.0.0.1:11013"] + return "127.0.0.1:11013" - client._get_client = get_clients + client.hasher.get_node = get_node with pytest.raises(MemcacheUnknownError): client.set(b"key1", b"value1", noreply=False) @@ -181,13 +212,13 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): ignore_exc=True, ) - def get_clients(key): + def get_node(key): if key == b"key3": - return client.clients["127.0.0.1:11012"] + return "127.0.0.1:11012" else: - return client.clients["127.0.0.1:11013"] + return "127.0.0.1:11013" - client._get_client = get_clients + client.hasher.get_node = get_node client.set(b"key1", b"value1", noreply=False) client.set(b"key3", b"value2", noreply=False) @@ -208,13 +239,13 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): ] ) - def get_clients(key): + def get_node(key): if key == b"key3": - return client.clients["127.0.0.1:11012"] + return "127.0.0.1:11012" else: - return client.clients["127.0.0.1:11013"] + return "127.0.0.1:11013" - client._get_client = get_clients + client.hasher.get_node = get_node assert client.set(b"key1", b"value1", noreply=False) is True assert client.set(b"key3", b"value2", noreply=False) is True @@ -258,7 +289,7 @@ class TestHashClient(ClientTestMixin, unittest.TestCase): ) hashed_client = client._get_client("foo") - assert hashed_client is None + assert hashed_client == (None, "foo") def test_no_servers_left_raise_exception(self): from pymemcache.client.hash import HashClient diff --git a/pymemcache/test/test_integration.py b/pymemcache/test/test_integration.py index 19d04f2..64a8b0a 100644 --- a/pymemcache/test/test_integration.py +++ b/pymemcache/test/test_integration.py @@ -272,6 +272,37 @@ def test_touch(client_class, host, port, socket_module, key_prefix): @pytest.mark.integration() +def test_gat_gats(client_class, host, port, socket_module, key_prefix): + client = client_class( + (host, port), socket_module=socket_module, key_prefix=key_prefix + ) + client.flush_all() + + direct_client = ( + client if hasattr(client, "raw_command") else list(client.clients.values())[0] + ) + + result = client.set(b"key", b"0", 10, noreply=False) + assert result is True + + ttl1 = direct_client.raw_command(b"mg " + key_prefix + b"key t").replace( + b"HD t", b"" + ) + + result = client.gat(b"key", expire=1000) + assert result == b"0" + + result, cas = client.gats(b"key", expire=1000) + assert result == b"0" + + ttl2 = direct_client.raw_command(b"mg " + key_prefix + b"key t").replace( + b"HD t", b"" + ) + + assert int(ttl1) < 950 < int(ttl2) <= 1000 + + +@pytest.mark.integration() def test_misc(client_class, host, port, socket_module, key_prefix): client = Client((host, port), socket_module=socket_module, key_prefix=key_prefix) client.flush_all() |