import pytest from redis.commands import CommandsParser from .conftest import skip_if_redis_enterprise, skip_if_server_version_lt class TestCommandsParser: def test_init_commands(self, r): commands_parser = CommandsParser(r) assert commands_parser.commands is not None assert "get" in commands_parser.commands def test_get_keys_predetermined_key_location(self, r): commands_parser = CommandsParser(r) args1 = ["GET", "foo"] args2 = ["OBJECT", "encoding", "foo"] args3 = ["MGET", "foo", "bar", "foobar"] assert commands_parser.get_keys(r, *args1) == ["foo"] assert commands_parser.get_keys(r, *args2) == ["foo"] assert commands_parser.get_keys(r, *args3) == ["foo", "bar", "foobar"] @pytest.mark.filterwarnings("ignore:ResponseError") @skip_if_redis_enterprise() def test_get_moveable_keys(self, r): commands_parser = CommandsParser(r) args1 = [ "EVAL", "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}", 2, "key1", "key2", "first", "second", ] args2 = ["XREAD", "COUNT", 2, b"STREAMS", "mystream", "writers", 0, 0] args3 = ["ZUNIONSTORE", "out", 2, "zset1", "zset2", "WEIGHTS", 2, 3] args4 = ["GEORADIUS", "Sicily", 15, 37, 200, "km", "WITHCOORD", b"STORE", "out"] args5 = ["MEMORY USAGE", "foo"] args6 = [ "MIGRATE", "192.168.1.34", 6379, "", 0, 5000, b"KEYS", "key1", "key2", "key3", ] args7 = ["MIGRATE", "192.168.1.34", 6379, "key1", 0, 5000] assert sorted(commands_parser.get_keys(r, *args1)) == ["key1", "key2"] assert sorted(commands_parser.get_keys(r, *args2)) == ["mystream", "writers"] assert sorted(commands_parser.get_keys(r, *args3)) == ["out", "zset1", "zset2"] assert sorted(commands_parser.get_keys(r, *args4)) == ["Sicily", "out"] assert sorted(commands_parser.get_keys(r, *args5)) == ["foo"] assert sorted(commands_parser.get_keys(r, *args6)) == ["key1", "key2", "key3"] assert sorted(commands_parser.get_keys(r, *args7)) == ["key1"] # A bug in redis<7.0 causes this to fail: https://github.com/redis/redis/issues/9493 @skip_if_server_version_lt("7.0.0") def test_get_eval_keys_with_0_keys(self, r): commands_parser = CommandsParser(r) args = ["EVAL", "return {ARGV[1],ARGV[2]}", 0, "key1", "key2"] assert commands_parser.get_keys(r, *args) == [] def test_get_pubsub_keys(self, r): commands_parser = CommandsParser(r) args1 = ["PUBLISH", "foo", "bar"] args2 = ["PUBSUB NUMSUB", "foo1", "foo2", "foo3"] args3 = ["PUBSUB channels", "*"] args4 = ["SUBSCRIBE", "foo1", "foo2", "foo3"] assert commands_parser.get_keys(r, *args1) == ["foo"] assert commands_parser.get_keys(r, *args2) == ["foo1", "foo2", "foo3"] assert commands_parser.get_keys(r, *args3) == ["*"] assert commands_parser.get_keys(r, *args4) == ["foo1", "foo2", "foo3"]