Skip to content

Commit 04bc576

Browse files
authored
Fix tests for Redis 7 (#2182)
* fix tests * async
1 parent 4a73d85 commit 04bc576

File tree

9 files changed

+93
-74
lines changed

9 files changed

+93
-74
lines changed

redis/cluster.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ class AbstractRedisCluster:
303303
"CLUSTER KEYSLOT",
304304
"COMMAND",
305305
"COMMAND COUNT",
306+
"COMMAND LIST",
306307
"COMMAND GETKEYS",
307308
"CONFIG GET",
308309
"DEBUG",

redis/commands/parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def get_keys(self, redis_conn, *args):
7979
command = self.commands.get(cmd_name)
8080
if "movablekeys" in command["flags"]:
8181
keys = self._get_moveable_keys(redis_conn, *args)
82-
elif "pubsub" in command["flags"]:
82+
elif "pubsub" in command["flags"] or command["name"] == "pubsub":
8383
keys = self._get_pubsub_keys(*args)
8484
else:
8585
if (

tests/test_asyncio/test_commands.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -517,13 +517,10 @@ async def test_config_resetstat(self, r: redis.Redis):
517517
assert reset_commands_processed < prior_commands_processed
518518

519519
async def test_config_set(self, r: redis.Redis):
520-
data = await r.config_get()
521-
rdbname = data["dbfilename"]
522-
try:
523-
assert await r.config_set("dbfilename", "redis_py_test.rdb")
524-
assert (await r.config_get())["dbfilename"] == "redis_py_test.rdb"
525-
finally:
526-
assert await r.config_set("dbfilename", rdbname)
520+
await r.config_set("timeout", 70)
521+
assert (await r.config_get())["timeout"] == "70"
522+
assert await r.config_set("timeout", 0)
523+
assert (await r.config_get())["timeout"] == "0"
527524

528525
@pytest.mark.onlynoncluster
529526
async def test_dbsize(self, r: redis.Redis):
@@ -541,7 +538,8 @@ async def test_info(self, r: redis.Redis):
541538
await r.set("b", "bar")
542539
info = await r.info()
543540
assert isinstance(info, dict)
544-
assert info["db9"]["keys"] == 2
541+
assert "arch_bits" in info.keys()
542+
assert "redis_version" in info.keys()
545543

546544
@pytest.mark.onlynoncluster
547545
async def test_lastsave(self, r: redis.Redis):
@@ -2180,6 +2178,7 @@ async def test_cluster_slaves(self, mock_cluster_resp_slaves):
21802178
)
21812179

21822180
@skip_if_server_version_lt("3.0.0")
2181+
@skip_if_server_version_gte("7.0.0")
21832182
@pytest.mark.onlynoncluster
21842183
async def test_readwrite(self, r: redis.Redis):
21852184
assert await r.readwrite()
@@ -2543,7 +2542,7 @@ async def test_xclaim(self, r: redis.Redis):
25432542
justid=True,
25442543
) == [message_id]
25452544

2546-
@skip_if_server_version_lt("5.0.0")
2545+
@skip_if_server_version_lt("7.0.0")
25472546
async def test_xclaim_trimmed(self, r: redis.Redis):
25482547
# xclaim should not raise an exception if the item is not there
25492548
stream = "stream"
@@ -2564,9 +2563,8 @@ async def test_xclaim_trimmed(self, r: redis.Redis):
25642563
# xclaim them from consumer2
25652564
# the item that is still in the stream should be returned
25662565
item = await r.xclaim(stream, group, "consumer2", 0, [sid1, sid2])
2567-
assert len(item) == 2
2568-
assert item[0] == (None, None)
2569-
assert item[1][0] == sid2
2566+
assert len(item) == 1
2567+
assert item[0][0] == sid2
25702568

25712569
@skip_if_server_version_lt("5.0.0")
25722570
async def test_xdel(self, r: redis.Redis):
@@ -2583,7 +2581,7 @@ async def test_xdel(self, r: redis.Redis):
25832581
assert await r.xdel(stream, m1) == 1
25842582
assert await r.xdel(stream, m2, m3) == 2
25852583

2586-
@skip_if_server_version_lt("5.0.0")
2584+
@skip_if_server_version_lt("7.0.0")
25872585
async def test_xgroup_create(self, r: redis.Redis):
25882586
# tests xgroup_create and xinfo_groups
25892587
stream = "stream"
@@ -2600,11 +2598,13 @@ async def test_xgroup_create(self, r: redis.Redis):
26002598
"consumers": 0,
26012599
"pending": 0,
26022600
"last-delivered-id": b"0-0",
2601+
"entries-read": None,
2602+
"lag": 1,
26032603
}
26042604
]
26052605
assert await r.xinfo_groups(stream) == expected
26062606

2607-
@skip_if_server_version_lt("5.0.0")
2607+
@skip_if_server_version_lt("7.0.0")
26082608
async def test_xgroup_create_mkstream(self, r: redis.Redis):
26092609
# tests xgroup_create and xinfo_groups
26102610
stream = "stream"
@@ -2624,6 +2624,8 @@ async def test_xgroup_create_mkstream(self, r: redis.Redis):
26242624
"consumers": 0,
26252625
"pending": 0,
26262626
"last-delivered-id": b"0-0",
2627+
"entries-read": None,
2628+
"lag": 0,
26272629
}
26282630
]
26292631
assert await r.xinfo_groups(stream) == expected
@@ -2658,21 +2660,23 @@ async def test_xgroup_destroy(self, r: redis.Redis):
26582660
await r.xgroup_create(stream, group, 0)
26592661
assert await r.xgroup_destroy(stream, group)
26602662

2661-
@skip_if_server_version_lt("5.0.0")
2663+
@skip_if_server_version_lt("7.0.0")
26622664
async def test_xgroup_setid(self, r: redis.Redis):
26632665
stream = "stream"
26642666
group = "group"
26652667
message_id = await r.xadd(stream, {"foo": "bar"})
26662668

26672669
await r.xgroup_create(stream, group, 0)
26682670
# advance the last_delivered_id to the message_id
2669-
await r.xgroup_setid(stream, group, message_id)
2671+
await r.xgroup_setid(stream, group, message_id, entries_read=2)
26702672
expected = [
26712673
{
26722674
"name": group.encode(),
26732675
"consumers": 0,
26742676
"pending": 0,
26752677
"last-delivered-id": message_id,
2678+
"entries-read": 2,
2679+
"lag": -1,
26762680
}
26772681
]
26782682
assert await r.xinfo_groups(stream) == expected

tests/test_cluster.py

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -858,15 +858,15 @@ def test_cluster_shards(self, r):
858858
assert isinstance(cluster_shards, list)
859859
assert isinstance(cluster_shards[0], dict)
860860
attributes = [
861-
"id",
862-
"endpoint",
863-
"ip",
864-
"hostname",
865-
"port",
866-
"tls-port",
867-
"role",
868-
"replication-offset",
869-
"health",
861+
b"id",
862+
b"endpoint",
863+
b"ip",
864+
b"hostname",
865+
b"port",
866+
b"tls-port",
867+
b"role",
868+
b"replication-offset",
869+
b"health",
870870
]
871871
for x in cluster_shards:
872872
assert list(x.keys()) == ["slots", "nodes"]
@@ -915,9 +915,24 @@ def test_cluster_delslots(self):
915915

916916
@skip_if_server_version_lt("7.0.0")
917917
@skip_if_redis_enterprise()
918-
def test_cluster_delslotsrange(self, r):
918+
def test_cluster_delslotsrange(self):
919+
cluster_slots = [
920+
[
921+
0,
922+
8191,
923+
["127.0.0.1", 7000, "node_0"],
924+
],
925+
[
926+
8192,
927+
16383,
928+
["127.0.0.1", 7001, "node_1"],
929+
],
930+
]
931+
r = get_mocked_redis_client(
932+
host=default_host, port=default_port, cluster_slots=cluster_slots
933+
)
934+
mock_all_nodes_resp(r, "OK")
919935
node = r.get_random_node()
920-
mock_node_resp(node, "OK")
921936
r.cluster_addslots(node, 1, 2, 3, 4, 5)
922937
assert r.cluster_delslotsrange(1, 5)
923938

tests/test_command_parser.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ def test_get_moveable_keys(self, r):
5050
"key3",
5151
]
5252
args7 = ["MIGRATE", "192.168.1.34", 6379, "key1", 0, 5000]
53-
args8 = ["STRALGO", "LCS", "STRINGS", "string_a", "string_b"]
54-
args9 = ["STRALGO", "LCS", "KEYS", "key1", "key2"]
5553

5654
assert commands_parser.get_keys(r, *args1).sort() == ["key1", "key2"].sort()
5755
assert (
@@ -68,8 +66,6 @@ def test_get_moveable_keys(self, r):
6866
== ["key1", "key2", "key3"].sort()
6967
)
7068
assert commands_parser.get_keys(r, *args7).sort() == ["key1"].sort()
71-
assert commands_parser.get_keys(r, *args8) is None
72-
assert commands_parser.get_keys(r, *args9).sort() == ["key1", "key2"].sort()
7369

7470
# A bug in redis<7.0 causes this to fail: https://github.com/redis/redis/issues/9493
7571
@skip_if_server_version_lt("7.0.0")

tests/test_commands.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ def test_client_unpause(self, r):
670670
@pytest.mark.onlynoncluster
671671
@skip_if_server_version_lt("7.0.0")
672672
def test_client_no_evict(self, r):
673-
assert r.client_no_evict("ON") == "OK"
673+
assert r.client_no_evict("ON")
674674
with pytest.raises(TypeError):
675675
r.client_no_evict()
676676

@@ -1089,9 +1089,9 @@ def test_unlink_with_multiple_keys(self, r):
10891089
@skip_if_server_version_lt("7.0.0")
10901090
def test_lcs(self, r):
10911091
r.mset({"foo": "ohmytext", "bar": "mynewtext"})
1092-
assert r.lcs("foo", "bar") == "mytext"
1092+
assert r.lcs("foo", "bar") == b"mytext"
10931093
assert r.lcs("foo", "bar", len=True) == 6
1094-
result = ["matches", [[[4, 7], [5, 8]]], "len", 6]
1094+
result = [b"matches", [[[4, 7], [5, 8]]], b"len", 6]
10951095
assert r.lcs("foo", "bar", idx=True, minmatchlen=3) == result
10961096
with pytest.raises(redis.ResponseError):
10971097
assert r.lcs("foo", "bar", len=True, idx=True)
@@ -1764,24 +1764,24 @@ def test_brpoplpush_empty_string(self, r):
17641764
@skip_if_server_version_lt("7.0.0")
17651765
def test_blmpop(self, r):
17661766
r.rpush("a", "1", "2", "3", "4", "5")
1767-
res = ["a", ["1", "2"]]
1767+
res = [b"a", [b"1", b"2"]]
17681768
assert r.blmpop(1, "2", "b", "a", direction="LEFT", count=2) == res
17691769
with pytest.raises(TypeError):
17701770
r.blmpop(1, "2", "b", "a", count=2)
17711771
r.rpush("b", "6", "7", "8", "9")
1772-
assert r.blmpop(0, "2", "b", "a", direction="LEFT") == ["b", ["6"]]
1772+
assert r.blmpop(0, "2", "b", "a", direction="LEFT") == [b"b", [b"6"]]
17731773
assert r.blmpop(1, "2", "foo", "bar", direction="RIGHT") is None
17741774

17751775
@pytest.mark.onlynoncluster
17761776
@skip_if_server_version_lt("7.0.0")
17771777
def test_lmpop(self, r):
17781778
r.rpush("foo", "1", "2", "3", "4", "5")
1779-
result = ["foo", ["1", "2"]]
1779+
result = [b"foo", [b"1", b"2"]]
17801780
assert r.lmpop("2", "bar", "foo", direction="LEFT", count=2) == result
17811781
with pytest.raises(redis.ResponseError):
17821782
r.lmpop("2", "bar", "foo", direction="up", count=2)
17831783
r.rpush("bar", "a", "b", "c", "d")
1784-
assert r.lmpop("2", "bar", "foo", direction="LEFT") == ["bar", ["a"]]
1784+
assert r.lmpop("2", "bar", "foo", direction="LEFT") == [b"bar", [b"a"]]
17851785

17861786
def test_lindex(self, r):
17871787
r.rpush("a", "1", "2", "3")
@@ -2393,23 +2393,23 @@ def test_bzpopmin(self, r):
23932393
@skip_if_server_version_lt("7.0.0")
23942394
def test_zmpop(self, r):
23952395
r.zadd("a", {"a1": 1, "a2": 2, "a3": 3})
2396-
res = ["a", [["a1", "1"], ["a2", "2"]]]
2396+
res = [b"a", [[b"a1", b"1"], [b"a2", b"2"]]]
23972397
assert r.zmpop("2", ["b", "a"], min=True, count=2) == res
23982398
with pytest.raises(redis.DataError):
23992399
r.zmpop("2", ["b", "a"], count=2)
24002400
r.zadd("b", {"b1": 10, "ab": 9, "b3": 8})
2401-
assert r.zmpop("2", ["b", "a"], max=True) == ["b", [["b1", "10"]]]
2401+
assert r.zmpop("2", ["b", "a"], max=True) == [b"b", [[b"b1", b"10"]]]
24022402

24032403
@pytest.mark.onlynoncluster
24042404
@skip_if_server_version_lt("7.0.0")
24052405
def test_bzmpop(self, r):
24062406
r.zadd("a", {"a1": 1, "a2": 2, "a3": 3})
2407-
res = ["a", [["a1", "1"], ["a2", "2"]]]
2407+
res = [b"a", [[b"a1", b"1"], [b"a2", b"2"]]]
24082408
assert r.bzmpop(1, "2", ["b", "a"], min=True, count=2) == res
24092409
with pytest.raises(redis.DataError):
24102410
r.bzmpop(1, "2", ["b", "a"], count=2)
24112411
r.zadd("b", {"b1": 10, "ab": 9, "b3": 8})
2412-
res = ["b", [["b1", "10"]]]
2412+
res = [b"b", [[b"b1", b"10"]]]
24132413
assert r.bzmpop(0, "2", ["b", "a"], max=True) == res
24142414
assert r.bzmpop(1, "2", ["foo", "bar"], max=True) is None
24152415

@@ -3100,6 +3100,7 @@ def test_cluster_slaves(self, mock_cluster_resp_slaves):
31003100

31013101
@pytest.mark.onlynoncluster
31023102
@skip_if_server_version_lt("3.0.0")
3103+
@skip_if_server_version_gte("7.0.0")
31033104
@skip_if_redis_enterprise()
31043105
def test_readwrite(self, r):
31053106
assert r.readwrite()
@@ -4510,7 +4511,7 @@ def test_command_list(self, r: redis.Redis):
45104511
assert len(r.command_list()) > 300
45114512
assert len(r.command_list(module="fakemod")) == 0
45124513
assert len(r.command_list(category="list")) > 15
4513-
assert "lpop" in r.command_list(pattern="l*")
4514+
assert b"lpop" in r.command_list(pattern="l*")
45144515
with pytest.raises(redis.ResponseError):
45154516
r.command_list(category="list", pattern="l*")
45164517

@@ -4546,7 +4547,10 @@ def test_command(self, r):
45464547
@skip_if_server_version_lt("7.0.0")
45474548
@skip_if_redis_enterprise()
45484549
def test_command_getkeysandflags(self, r: redis.Redis):
4549-
res = [["mylist1", ["RW", "access", "delete"]], ["mylist2", ["RW", "insert"]]]
4550+
res = [
4551+
[b"mylist1", [b"RW", b"access", b"delete"]],
4552+
[b"mylist2", [b"RW", b"insert"]],
4553+
]
45504554
assert res == r.command_getkeysandflags(
45514555
"LMOVE", "mylist1", "mylist2", "left", "left"
45524556
)

tests/test_encoding.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def test_memoryviews_are_not_packed(self):
9090
class TestCommandsAreNotEncoded:
9191
@pytest.fixture()
9292
def r(self, request):
93-
return _get_client(redis.Redis, request=request, encoding="utf-16")
93+
return _get_client(redis.Redis, request=request, encoding="utf-8")
9494

9595
def test_basic_command(self, r):
9696
r.set("hello", "world")

0 commit comments

Comments
 (0)