summaryrefslogtreecommitdiff
path: root/tests/test_command_parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_command_parser.py')
-rw-r--r--tests/test_command_parser.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/test_command_parser.py b/tests/test_command_parser.py
new file mode 100644
index 0000000..ba129ba
--- /dev/null
+++ b/tests/test_command_parser.py
@@ -0,0 +1,62 @@
+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']