summaryrefslogtreecommitdiff
path: root/tests/test_cluster.py
diff options
context:
space:
mode:
authorBar Shaul <88437685+barshaul@users.noreply.github.com>2021-12-01 18:33:44 +0200
committerGitHub <noreply@github.com>2021-12-01 18:33:44 +0200
commitd4252277a9dafed5af34b3f40ed7a57fc952d273 (patch)
treef0a96ff0e12c6446bd9ecbf7ed8248a0d5462d8c /tests/test_cluster.py
parente16e26ea597e6e0c576d7462d3a2285a8647617d (diff)
downloadredis-py-d4252277a9dafed5af34b3f40ed7a57fc952d273.tar.gz
Migrated targeted nodes to kwargs in Cluster Mode (#1762)
Diffstat (limited to 'tests/test_cluster.py')
-rw-r--r--tests/test_cluster.py63
1 files changed, 57 insertions, 6 deletions
diff --git a/tests/test_cluster.py b/tests/test_cluster.py
index 84d74bd..b76ed80 100644
--- a/tests/test_cluster.py
+++ b/tests/test_cluster.py
@@ -24,13 +24,19 @@ from redis.exceptions import (
ClusterDownError,
DataError,
MovedError,
+ NoPermissionError,
RedisClusterException,
RedisError,
)
from redis.utils import str_if_bytes
from tests.test_pubsub import wait_for_message
-from .conftest import _get_client, skip_if_server_version_lt, skip_unless_arch_bits
+from .conftest import (
+ _get_client,
+ skip_if_redis_enterprise,
+ skip_if_server_version_lt,
+ skip_unless_arch_bits,
+)
default_host = "127.0.0.1"
default_port = 7000
@@ -265,7 +271,7 @@ class TestRedisClusterObj:
primaries = r.get_primaries()
replicas = r.get_replicas()
mock_all_nodes_resp(r, "PONG")
- assert r.ping(RedisCluster.PRIMARIES) is True
+ assert r.ping(target_nodes=RedisCluster.PRIMARIES) is True
for primary in primaries:
conn = primary.redis_connection.connection
assert conn.read_response.called is True
@@ -282,7 +288,7 @@ class TestRedisClusterObj:
r = get_mocked_redis_client(default_host, default_port)
primaries = r.get_primaries()
mock_all_nodes_resp(r, "PONG")
- assert r.ping(RedisCluster.REPLICAS) is True
+ assert r.ping(target_nodes=RedisCluster.REPLICAS) is True
for replica in replicas:
conn = replica.redis_connection.connection
assert conn.read_response.called is True
@@ -295,7 +301,7 @@ class TestRedisClusterObj:
Test command execution with nodes flag ALL_NODES
"""
mock_all_nodes_resp(r, "PONG")
- assert r.ping(RedisCluster.ALL_NODES) is True
+ assert r.ping(target_nodes=RedisCluster.ALL_NODES) is True
for node in r.get_nodes():
conn = node.redis_connection.connection
assert conn.read_response.called is True
@@ -305,7 +311,7 @@ class TestRedisClusterObj:
Test command execution with nodes flag RANDOM
"""
mock_all_nodes_resp(r, "PONG")
- assert r.ping(RedisCluster.RANDOM) is True
+ assert r.ping(target_nodes=RedisCluster.RANDOM) is True
called_count = 0
for node in r.get_nodes():
conn = node.redis_connection.connection
@@ -1135,7 +1141,7 @@ class TestClusterRedisCommands:
def test_cluster_echo(self, r):
node = r.get_primaries()[0]
- assert r.echo("foo bar", node) == b"foo bar"
+ assert r.echo("foo bar", target_nodes=node) == b"foo bar"
@skip_if_server_version_lt("1.0.0")
def test_debug_segfault(self, r):
@@ -1764,6 +1770,51 @@ class TestClusterRedisCommands:
r[key] = 1
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
+ def test_acl_log(self, r, request):
+ key = "{cache}:"
+ node = r.get_node_from_key(key)
+ username = "redis-py-user"
+
+ def teardown():
+ r.acl_deluser(username, target_nodes="primaries")
+
+ request.addfinalizer(teardown)
+ r.acl_setuser(
+ username,
+ enabled=True,
+ reset=True,
+ commands=["+get", "+set", "+select", "+cluster", "+command"],
+ keys=["{cache}:*"],
+ nopass=True,
+ target_nodes="primaries",
+ )
+ r.acl_log_reset(target_nodes=node)
+
+ user_client = _get_client(
+ RedisCluster, request, flushdb=False, username=username
+ )
+
+ # Valid operation and key
+ assert user_client.set("{cache}:0", 1)
+ assert user_client.get("{cache}:0") == b"1"
+
+ # Invalid key
+ with pytest.raises(NoPermissionError):
+ user_client.get("{cache}violated_cache:0")
+
+ # Invalid operation
+ with pytest.raises(NoPermissionError):
+ user_client.hset("{cache}:0", "hkey", "hval")
+
+ assert isinstance(r.acl_log(target_nodes=node), list)
+ assert len(r.acl_log(target_nodes=node)) == 2
+ assert len(r.acl_log(count=1, target_nodes=node)) == 1
+ assert isinstance(r.acl_log(target_nodes=node)[0], dict)
+ assert "client-info" in r.acl_log(count=1, target_nodes=node)[0]
+ assert r.acl_log_reset(target_nodes=node)
+
@pytest.mark.onlycluster
class TestNodesManager: