Skip to content

Commit 2ff62e6

Browse files
committed
[GROW-2938] add a test for invalid index returned from load balancer
1 parent 8a7897c commit 2ff62e6

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

tests/test_cluster.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import binascii
22
import datetime
3+
import random
34
import select
45
import socket
56
import socketserver
@@ -8,6 +9,7 @@
89
import warnings
910
from queue import LifoQueue, Queue
1011
from time import sleep
12+
from unittest import mock
1113
from unittest.mock import DEFAULT, Mock, call, patch
1214

1315
import pytest
@@ -24,6 +26,7 @@
2426
REDIS_CLUSTER_HASH_SLOTS,
2527
REPLICA,
2628
ClusterNode,
29+
LoadBalancer,
2730
NodesManager,
2831
RedisCluster,
2932
get_node_name,
@@ -2654,6 +2657,37 @@ def test_allow_custom_queue_class(self, queue_class):
26542657
for node in rc.nodes_manager.nodes_cache.values():
26552658
assert node.redis_connection.connection_pool.queue_class == queue_class
26562659

2660+
@pytest.mark.parametrize("invalid_index", [-10, 10])
2661+
def test_return_primary_if_invalid_node_index_is_returned(self, invalid_index):
2662+
rc = get_mocked_redis_client(
2663+
url="redis://[email protected]:7000",
2664+
cluster_slots=default_cluster_slots,
2665+
)
2666+
random_slot = random.randint(
2667+
default_cluster_slots[0][0], default_cluster_slots[0][1]
2668+
)
2669+
2670+
ports = set()
2671+
for _ in range(0, 10):
2672+
ports.add(
2673+
rc.nodes_manager.get_node_from_slot(
2674+
random_slot, read_from_replicas=True
2675+
).port
2676+
)
2677+
assert ports == {default_port, 7003}
2678+
2679+
ports = set()
2680+
with mock.patch.object(
2681+
LoadBalancer, "get_server_index", return_value=invalid_index
2682+
):
2683+
for _ in range(0, 10):
2684+
ports.add(
2685+
rc.nodes_manager.get_node_from_slot(
2686+
random_slot, read_from_replicas=True
2687+
).port
2688+
)
2689+
assert ports == {default_port}
2690+
26572691

26582692
@pytest.mark.onlycluster
26592693
class TestClusterPubSubObject:

0 commit comments

Comments
 (0)