1
0
Fork 0
iredis/tests/conftest.py
Daniel Baumann e30705f8de
Merging upstream version 1.14.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-09 17:23:39 +01:00

154 lines
3.6 KiB
Python

import os
import re
import tempfile
from textwrap import dedent
import pexpect
import pytest
import redis
from iredis.client import Client
from iredis.commands import split_command_args
from iredis.redis_grammar import get_command_grammar
from iredis.exceptions import InvalidArguments
from iredis.config import Config, config as global_config
TIMEOUT = 2
HISTORY_FILE = ".iredis_history"
@pytest.fixture
def token_should_match():
def match_func(token, tomatch):
assert re.fullmatch(token, tomatch) is not None
return match_func
@pytest.fixture
def token_should_not_match():
def match_func(token, tomatch):
assert re.fullmatch(token, tomatch) is None
return match_func
@pytest.fixture
def judge_command():
def judge_command_func(input_text, expect):
if expect == "invalid":
with pytest.raises(InvalidArguments):
split_command_args(input_text)
return
command, _ = split_command_args(input_text)
grammar = get_command_grammar(command)
m = grammar.match(input_text)
# test on not match
if not expect:
assert m is None
return
variables = m.variables()
print(f"Found variables: {variables}")
for expect_token, expect_value in expect.items():
all_variables = variables.getall(expect_token)
if len(all_variables) > 1:
assert sorted(all_variables) == sorted(expect_value)
else:
assert variables.get(expect_token) == expect_value
return judge_command_func
@pytest.fixture(scope="function")
def clean_redis():
"""
Return a empty redis db. (redis-py client)
"""
client = redis.StrictRedis(db=15)
client.flushdb()
return client
@pytest.fixture
def iredis_client():
return Client("127.0.0.1", "6379", db=15)
@pytest.fixture
def config():
newconfig = Config()
global_config.__dict__ = newconfig.__dict__
config.raw = False
return global_config
@pytest.fixture(scope="function")
def cli():
"""Open iredis subprocess to test"""
f = tempfile.TemporaryFile("w")
config_content = dedent(
"""
[main]
log_location =
warning = True
"""
)
f.write(config_content)
f.close()
env = os.environ
env["PROMPT_TOOLKIT_NO_CPR"] = "1"
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://github.com/laixintao/iredis/issues", "127.0.0.1"])
yield child
child.close()
@pytest.fixture(scope="function")
def raw_cli():
"""Open iredis subprocess to test"""
TEST_IREDISRC = "/tmp/.iredisrc.test"
config_content = dedent(
"""
[main]
log_location =
warning = True
"""
)
with open(TEST_IREDISRC, "w+") as test_iredisrc:
test_iredisrc.write(config_content)
child = pexpect.spawn(
f"iredis --raw -n 15 --iredisrc {TEST_IREDISRC}", timeout=TIMEOUT
)
child.logfile_read = open("cli_test.log", "ab")
child.expect(["https://github.com/laixintao/iredis/issues", "127.0.0.1"])
yield child
child.close()
@pytest.fixture(scope="function")
def cli_without_warning():
f = tempfile.TemporaryFile("w")
config_content = dedent(
"""
[main]
log_location = /tmp/iredis1.log
warning = False
"""
)
f.write(config_content)
f.close()
cli = pexpect.spawn(f"iredis -n 15 --iredisrc {f.name}", timeout=1)
cli.logfile_read = open("cli_test.log", "ab")
yield cli
cli.close()
os.remove("/tmp/iredisrc")