import pytest from redis.commands import CommandsParser 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") 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] args8 = ['STRALGO', 'LCS', 'STRINGS', 'string_a', 'string_b'] args9 = ['STRALGO', 'LCS', 'KEYS', 'key1', 'key2'] assert commands_parser.get_keys( r, *args1).sort() == ['key1', 'key2'].sort() assert commands_parser.get_keys( r, *args2).sort() == ['mystream', 'writers'].sort() assert commands_parser.get_keys( r, *args3).sort() == ['out', 'zset1', 'zset2'].sort() assert commands_parser.get_keys( r, *args4).sort() == ['Sicily', 'out'].sort() assert commands_parser.get_keys(r, *args5).sort() == ['foo'].sort() assert commands_parser.get_keys( r, *args6).sort() == ['key1', 'key2', 'key3'].sort() assert commands_parser.get_keys(r, *args7).sort() == ['key1'].sort() assert commands_parser.get_keys(r, *args8) is None assert commands_parser.get_keys( r, *args9).sort() == ['key1', 'key2'].sort() 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']