summaryrefslogtreecommitdiff
path: root/pymemcache/test
diff options
context:
space:
mode:
Diffstat (limited to 'pymemcache/test')
-rw-r--r--pymemcache/test/test_client.py26
-rw-r--r--pymemcache/test/test_client_hash.py81
-rw-r--r--pymemcache/test/test_integration.py31
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()