diff options
author | Bar Shaul <88437685+barshaul@users.noreply.github.com> | 2021-12-01 18:33:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-01 18:33:44 +0200 |
commit | d4252277a9dafed5af34b3f40ed7a57fc952d273 (patch) | |
tree | f0a96ff0e12c6446bd9ecbf7ed8248a0d5462d8c /tests/test_cluster.py | |
parent | e16e26ea597e6e0c576d7462d3a2285a8647617d (diff) | |
download | redis-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.py | 63 |
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: |