From 61a3777eb82896afbb2472017210c7642751ecc2 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 Nov 2023 19:52:16 +0100 Subject: Merging upstream version 1.14.0. Signed-off-by: Daniel Baumann --- tests/cli_tests/test_cli_start.py | 8 ++-- tests/cli_tests/test_command_input.py | 8 ++-- tests/cli_tests/test_command_restore.py | 6 +++ tests/cli_tests/test_completer.py | 3 +- tests/cli_tests/test_pager.py | 14 +++++-- tests/conftest.py | 4 +- tests/unittests/test_client.py | 61 +++++++++++++++++------------ tests/unittests/test_entry.py | 1 - tests/unittests/test_markdown_doc_render.py | 2 +- 9 files changed, 68 insertions(+), 39 deletions(-) create mode 100644 tests/cli_tests/test_command_restore.py (limited to 'tests') diff --git a/tests/cli_tests/test_cli_start.py b/tests/cli_tests/test_cli_start.py index 8045947..819b24f 100644 --- a/tests/cli_tests/test_cli_start.py +++ b/tests/cli_tests/test_cli_start.py @@ -1,6 +1,8 @@ +from textwrap import dedent + +from packaging.version import parse as version_parse # noqa: F401 import pexpect import pytest -from textwrap import dedent def test_start_on_connection_error(): @@ -29,14 +31,14 @@ def test_short_help_option(config): c.close() -@pytest.mark.skipif("int(os.environ['REDIS_VERSION']) != 5") +@pytest.mark.skipif("version_parse(os.environ['REDIS_VERSION']) != version_parse('5')") def test_server_version_in_starting_on5(): c = pexpect.spawn("iredis", timeout=2) c.expect("redis-server 5") c.close() -@pytest.mark.skipif("int(os.environ['REDIS_VERSION']) != 6") +@pytest.mark.skipif("version_parse(os.environ['REDIS_VERSION']) != version_parse('6')") def test_server_version_in_starting_on6(): c = pexpect.spawn("iredis", timeout=2) c.expect("redis-server 6") diff --git a/tests/cli_tests/test_command_input.py b/tests/cli_tests/test_command_input.py index 75917cb..f0aab4a 100644 --- a/tests/cli_tests/test_command_input.py +++ b/tests/cli_tests/test_command_input.py @@ -1,4 +1,6 @@ import os + +from packaging.version import parse as version_parse import pytest @@ -9,7 +11,7 @@ def test_wrong_select_db_index(cli): cli.sendline("select 128") cli.expect(["DB index is out of range", "127.0.0.1:6379[1]>"]) - if int(os.environ["REDIS_VERSION"]) > 5: + if version_parse(os.environ["REDIS_VERSION"]) > version_parse("5"): text = "value is not an integer or out of range" else: text = "invalid DB index" @@ -42,14 +44,14 @@ def test_enter_key_binding(clean_redis, cli): cli.expect(r"hello") -@pytest.mark.skipif("int(os.environ['REDIS_VERSION']) < 6") +@pytest.mark.skipif("version_parse(os.environ['REDIS_VERSION']) < version_parse('6')") def test_auth_hidden_password_with_username(clean_redis, cli): cli.send("auth default hello-world") cli.expect("default") cli.expect(r"\*{11}") -@pytest.mark.skipif("int(os.environ['REDIS_VERSION']) > 5") +@pytest.mark.skipif("version_parse(os.environ['REDIS_VERSION']) > version_parse('5')") def test_auth_hidden_password(clean_redis, cli): cli.send("auth hello-world") cli.expect("auth") diff --git a/tests/cli_tests/test_command_restore.py b/tests/cli_tests/test_command_restore.py new file mode 100644 index 0000000..1c34405 --- /dev/null +++ b/tests/cli_tests/test_command_restore.py @@ -0,0 +1,6 @@ +def test_restore_command(clean_redis, cli): + cli.sendline(r'restore foo1 0 "\x00\x03bar\t\x006L\x18\xac\xba\xe0\x9e\xa6"') + cli.expect(["OK", "127.0.0.1"]) + + cli.sendline("get foo1") + cli.expect('"bar"') diff --git a/tests/cli_tests/test_completer.py b/tests/cli_tests/test_completer.py index 4ffd058..adf8040 100644 --- a/tests/cli_tests/test_completer.py +++ b/tests/cli_tests/test_completer.py @@ -1,3 +1,4 @@ +from packaging.version import parse as version_parse # noqa: F401 import pytest @@ -37,7 +38,7 @@ def test_command_completion_when_space_command(cli, clean_redis): cli.expect("command info") -@pytest.mark.skipif("int(os.environ['REDIS_VERSION']) < 6") +@pytest.mark.skipif("version_parse(os.environ['REDIS_VERSION']) < version_parse('6')") def test_username_completer(cli, iredis_client): iredis_client.execute("acl setuser", "foo1") iredis_client.execute("acl setuser", "bar2") diff --git a/tests/cli_tests/test_pager.py b/tests/cli_tests/test_pager.py index 38ced31..c3f9fb0 100644 --- a/tests/cli_tests/test_pager.py +++ b/tests/cli_tests/test_pager.py @@ -1,10 +1,12 @@ # noqa: F541 +from contextlib import contextmanager import os -import sys -import pexpect import pathlib -from contextlib import contextmanager +import sys from textwrap import dedent +from packaging.version import parse as version_parse + +import pexpect TEST_IREDISRC = "/tmp/.iredisrc.test" @@ -22,6 +24,10 @@ env_pager_numbers = "{0} {1} {2}".format( TEST_PAGER_BOUNDARY_NUMBER, ) +long_list_type = "quicklist" +if version_parse(os.environ["REDIS_VERSION"]) >= version_parse("7"): + long_list_type = "listpack" + @contextmanager def pager_enabled_cli(): @@ -60,7 +66,7 @@ def test_pager_works_for_peek(clean_redis): with pager_enabled_cli() as child: child.sendline("peek long-list") child.expect(TEST_PAGER_BOUNDARY) - child.expect("(quicklist)") + child.expect(f"({long_list_type})") child.expect("value-1") child.expect(TEST_PAGER_BOUNDARY) diff --git a/tests/conftest.py b/tests/conftest.py index b70bf95..593e8a8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -105,7 +105,7 @@ def cli(): child = pexpect.spawn(f"iredis -n 15 --iredisrc {f.name}", timeout=TIMEOUT, env=env) child.logfile_read = open("cli_test.log", "ab") - child.expect(["https://iredis.io/issues", "127.0.0.1"]) + child.expect(["https://github.com/laixintao/iredis/issues", "127.0.0.1"]) yield child child.close() @@ -129,7 +129,7 @@ def raw_cli(): f"iredis --raw -n 15 --iredisrc {TEST_IREDISRC}", timeout=TIMEOUT ) child.logfile_read = open("cli_test.log", "ab") - child.expect(["https://iredis.io/issues", "127.0.0.1"]) + child.expect(["https://github.com/laixintao/iredis/issues", "127.0.0.1"]) yield child child.close() diff --git a/tests/unittests/test_client.py b/tests/unittests/test_client.py index 45f0054..c0f4c07 100644 --- a/tests/unittests/test_client.py +++ b/tests/unittests/test_client.py @@ -1,18 +1,20 @@ import os import re -import pytest -import redis -from unittest.mock import MagicMock, patch from textwrap import dedent +from unittest.mock import MagicMock, patch +from packaging.version import parse as version_parse from prompt_toolkit.formatted_text import FormattedText +import pytest +import redis from iredis.client import Client -from iredis.config import config, load_config_files +from iredis.commands import command2syntax from iredis.completers import IRedisCompleter +from iredis.config import config, load_config_files from iredis.entry import Rainbow, prompt_message from iredis.exceptions import NotSupport -from iredis.commands import command2syntax + from ..helpers import formatted_text_rematch @@ -22,8 +24,12 @@ def completer(): zset_type = "ziplist" -if os.environ["REDIS_VERSION"] == "7": +hash_type = "hashtable" +list_type = "quicklist" +if version_parse(os.environ["REDIS_VERSION"]) >= version_parse("7"): zset_type = "listpack" + hash_type = "listpack" + list_type = "listpack" @pytest.mark.parametrize( @@ -36,7 +42,7 @@ if os.environ["REDIS_VERSION"] == "7": ], ) def test_send_command(_input, command_name, expect_args): - client = Client("127.0.0.1", "6379", None) + client = Client("127.0.0.1", 6379, None) client.execute = MagicMock() next(client.send_command(_input, None)) args, _ = client.execute.call_args @@ -176,7 +182,7 @@ def test_not_retry_on_authentication_error(iredis_client, config): @pytest.mark.skipif( - "int(os.environ['REDIS_VERSION']) != 6", + "version_parse(os.environ['REDIS_VERSION']) != version_parse('6')", reason=""" in redis7, it will not work if you: 1. connect redis without password @@ -209,7 +215,7 @@ def test_auto_select_db_and_auth_for_reconnect_only_6(iredis_client, config): ) -@pytest.mark.skipif("int(os.environ['REDIS_VERSION']) > 5") +@pytest.mark.skipif("version_parse(os.environ['REDIS_VERSION']) > version_parse('5')") def test_auto_select_db_and_auth_for_reconnect_only_5(iredis_client, config): config.retry_times = 2 config.raw = True @@ -303,7 +309,7 @@ def test_peek_list_fetch_all(iredis_client, clean_redis): FormattedText( [ ("class:dockey", "key: "), - ("", r"list \(quicklist\) mem: \d+ bytes, ttl: -1"), + ("", rf"list \({list_type}\) mem: \d+ bytes, ttl: -1"), ("", "\n"), ("class:dockey", "llen: "), ("", "5"), @@ -351,7 +357,7 @@ def test_peek_set_fetch_part(iredis_client, clean_redis): peek_result = list(iredis_client.do_peek("myset")) assert peek_result[0][0] == ("class:dockey", "key: ") - assert peek_result[0][1][1].startswith("set (hashtable) mem: 2") + assert peek_result[0][1][1].startswith(f"set ({hash_type}) mem: ") def test_peek_zset_fetch_all(iredis_client, clean_redis): @@ -425,7 +431,7 @@ def test_peek_stream(iredis_client, clean_redis): assert peek_result[0][0] == ("class:dockey", "key: ") assert re.match( - r"stream \((stream|unknown)\) mem: 6\d\d bytes, ttl: -1", peek_result[0][1][1] + r"stream \((stream|unknown)\) mem: \d+ bytes, ttl: -1", peek_result[0][1][1] ) assert peek_result[0][2:18] == FormattedText( [ @@ -550,23 +556,29 @@ def test_version_parse_for_auth(iredis_client): "info, version", [ ( - "# Server\r\nredis_version:df--128-NOTFOUND\r\n" - "redis_mode:standalone\r\narch_bits:64", + ( + "# Server\r\nredis_version:df--128-NOTFOUND\r\n" + "redis_mode:standalone\r\narch_bits:64" + ), "df--128-NOTFOUND", ), ( - "# Server\r\nredis_version:6.2.5\r\n" - "redis_git_sha1:00000000\r\n" - "redis_git_dirty:0\r\n" - "redis_build_id:915e5480613bc9b6\r\n" - "redis_mode:standalone ", + ( + "# Server\r\nredis_version:6.2.5\r\n" + "redis_git_sha1:00000000\r\n" + "redis_git_dirty:0\r\n" + "redis_build_id:915e5480613bc9b6\r\n" + "redis_mode:standalone " + ), "6.2.5", ), ( - "# Server\r\nredis_version:5.0.14.1\r\n" - "redis_git_sha1:00000000\r\nredis_git_dirty:0\r\n" - "redis_build_id:915e5480613bc9b6\r\n" - "redis_mode:standalone ", + ( + "# Server\r\nredis_version:5.0.14.1\r\n" + "redis_git_sha1:00000000\r\nredis_git_dirty:0\r\n" + "redis_build_id:915e5480613bc9b6\r\n" + "redis_mode:standalone " + ), "5.0.14.1", ), ], @@ -576,9 +588,10 @@ def test_version_path(info, version): mock_config.no_info = True mock_config.pager = "less" mock_config.version = "5.0.0" + mock_config.decode = "utf-8" with patch("iredis.client.Client.execute") as mock_execute: mock_execute.return_value = info - client = Client("127.0.0.1", "6379", None) + client = Client("127.0.0.1", 6379) client.get_server_info() assert mock_config.version == version diff --git a/tests/unittests/test_entry.py b/tests/unittests/test_entry.py index 912aabf..e53861e 100644 --- a/tests/unittests/test_entry.py +++ b/tests/unittests/test_entry.py @@ -28,7 +28,6 @@ from iredis.utils import DSN def test_command_entry_tty(is_tty, raw_arg_is_raw, final_config_is_raw, config): # is tty + raw -> raw with patch("sys.stdout.isatty") as patch_tty: - patch_tty.return_value = is_tty if raw_arg_is_raw is None: call = ["iredis"] diff --git a/tests/unittests/test_markdown_doc_render.py b/tests/unittests/test_markdown_doc_render.py index 0538299..0c66260 100644 --- a/tests/unittests/test_markdown_doc_render.py +++ b/tests/unittests/test_markdown_doc_render.py @@ -6,7 +6,7 @@ https://github.com/antirez/redis-doc/commit/02b3d1a345093c1794fd86273e9d516fffd3 """ import pytest -from importlib_resources import read_text +from importlib.resources import read_text from iredis.commands import commands_summary from iredis.data import commands as commands_data -- cgit v1.2.3