summaryrefslogtreecommitdiff
path: root/tests/test_cluster.py
diff options
context:
space:
mode:
authorBar Shaul <88437685+barshaul@users.noreply.github.com>2021-12-02 22:59:06 +0200
committerGitHub <noreply@github.com>2021-12-02 22:59:06 +0200
commit11b14630a6845c28acfd4220b72ed62d72913305 (patch)
tree7c4ae49db2320416a956551613d90cad26b44052 /tests/test_cluster.py
parentb7ffec08da97b71b10bbd139b32ff82d33d907f1 (diff)
downloadredis-py-11b14630a6845c28acfd4220b72ed62d72913305.tar.gz
Added support for MONITOR in clusters (#1756)
Diffstat (limited to 'tests/test_cluster.py')
-rw-r--r--tests/test_cluster.py54
1 files changed, 53 insertions, 1 deletions
diff --git a/tests/test_cluster.py b/tests/test_cluster.py
index 4087d33..15d8ac6 100644
--- a/tests/test_cluster.py
+++ b/tests/test_cluster.py
@@ -36,6 +36,7 @@ from .conftest import (
skip_if_redis_enterprise,
skip_if_server_version_lt,
skip_unless_arch_bits,
+ wait_for_command,
)
default_host = "127.0.0.1"
@@ -1774,7 +1775,7 @@ class TestClusterRedisCommands:
assert r.randomkey(target_nodes=node) in (b"{foo}a", b"{foo}b", b"{foo}c")
@skip_if_server_version_lt("6.0.0")
- @skip_if_redis_enterprise
+ @skip_if_redis_enterprise()
def test_acl_log(self, r, request):
key = "{cache}:"
node = r.get_node_from_key(key)
@@ -2631,3 +2632,54 @@ class TestReadOnlyPipeline:
if executed_on_replica:
break
assert executed_on_replica is True
+
+
+@pytest.mark.onlycluster
+class TestClusterMonitor:
+ def test_wait_command_not_found(self, r):
+ "Make sure the wait_for_command func works when command is not found"
+ key = "foo"
+ node = r.get_node_from_key(key)
+ with r.monitor(target_node=node) as m:
+ response = wait_for_command(r, m, "nothing", key=key)
+ assert response is None
+
+ def test_response_values(self, r):
+ db = 0
+ key = "foo"
+ node = r.get_node_from_key(key)
+ with r.monitor(target_node=node) as m:
+ r.ping(target_nodes=node)
+ response = wait_for_command(r, m, "PING", key=key)
+ assert isinstance(response["time"], float)
+ assert response["db"] == db
+ assert response["client_type"] in ("tcp", "unix")
+ assert isinstance(response["client_address"], str)
+ assert isinstance(response["client_port"], str)
+ assert response["command"] == "PING"
+
+ def test_command_with_quoted_key(self, r):
+ key = "{foo}1"
+ node = r.get_node_from_key(key)
+ with r.monitor(node) as m:
+ r.get('{foo}"bar')
+ response = wait_for_command(r, m, 'GET {foo}"bar', key=key)
+ assert response["command"] == 'GET {foo}"bar'
+
+ def test_command_with_binary_data(self, r):
+ key = "{foo}1"
+ node = r.get_node_from_key(key)
+ with r.monitor(target_node=node) as m:
+ byte_string = b"{foo}bar\x92"
+ r.get(byte_string)
+ response = wait_for_command(r, m, "GET {foo}bar\\x92", key=key)
+ assert response["command"] == "GET {foo}bar\\x92"
+
+ def test_command_with_escaped_data(self, r):
+ key = "{foo}1"
+ node = r.get_node_from_key(key)
+ with r.monitor(target_node=node) as m:
+ byte_string = b"{foo}bar\\x92"
+ r.get(byte_string)
+ response = wait_for_command(r, m, "GET {foo}bar\\\\x92", key=key)
+ assert response["command"] == "GET {foo}bar\\\\x92"