summaryrefslogtreecommitdiff
path: root/tests/test_cluster.py
diff options
context:
space:
mode:
authorBar Shaul <88437685+barshaul@users.noreply.github.com>2022-12-01 13:16:26 +0200
committerGitHub <noreply@github.com>2022-12-01 13:16:26 +0200
commit2c121552faf0d39267969b62ce0c3276391b37cc (patch)
tree5f65a13f146bd9a04c363ae7fe637537f7e48104 /tests/test_cluster.py
parentf4d07dddba55a73df6b015b363d2ea7c96716ae5 (diff)
downloadredis-py-2c121552faf0d39267969b62ce0c3276391b37cc.tar.gz
Added a replacement for the default cluster node in the event of failure. (#2463)
Diffstat (limited to 'tests/test_cluster.py')
-rw-r--r--tests/test_cluster.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/test_cluster.py b/tests/test_cluster.py
index d18fbbb..43aeb9e 100644
--- a/tests/test_cluster.py
+++ b/tests/test_cluster.py
@@ -791,6 +791,29 @@ class TestRedisClusterObj:
== retry._retries
)
+ def test_replace_cluster_node(self, r) -> None:
+ prev_default_node = r.get_default_node()
+ r.replace_default_node()
+ assert r.get_default_node() != prev_default_node
+ r.replace_default_node(prev_default_node)
+ assert r.get_default_node() == prev_default_node
+
+ def test_default_node_is_replaced_after_exception(self, r):
+ curr_default_node = r.get_default_node()
+ # CLUSTER NODES command is being executed on the default node
+ nodes = r.cluster_nodes()
+ assert "myself" in nodes.get(curr_default_node.name).get("flags")
+
+ def raise_connection_error():
+ raise ConnectionError("error")
+
+ # Mock connection error for the default node
+ mock_node_resp_func(curr_default_node, raise_connection_error)
+ # Test that the command succeed from a different node
+ nodes = r.cluster_nodes()
+ assert "myself" not in nodes.get(curr_default_node.name).get("flags")
+ assert r.get_default_node() != curr_default_node
+
@pytest.mark.onlycluster
class TestClusterRedisCommands: