summaryrefslogtreecommitdiffstats
path: root/tests/cli_tests/test_cli_start.py
blob: 819b24f496fdff9e4e9886a8337174e6f2b9a1f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from textwrap import dedent

from packaging.version import parse as version_parse  # noqa: F401
import pexpect
import pytest


def test_start_on_connection_error():
    cli = pexpect.spawn("iredis -p 12345", timeout=1)
    cli.logfile_read = open("cli_test.log", "ab")
    cli.expect(r"Error \d+ connecting to 127.0.0.1:12345. Connection refused.")
    cli.close()


def test_start_with_client_name():
    cli = pexpect.spawn("iredis --client_name custom_name", timeout=2)
    cli.expect("iredis")
    cli.sendline("CLIENT GETNAME")
    cli.expect("custom_name")
    cli.close()


def test_short_help_option(config):
    c = pexpect.spawn("iredis -h", timeout=2)

    c.expect("Show this message and exit.")

    c = pexpect.spawn("iredis -h 127.0.0.1")
    c.expect("127.0.0.1:6379>")

    c.close()


@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("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")
    c.close()


def test_connection_using_url(clean_redis):
    c = pexpect.spawn("iredis --url redis://localhost:6379/7", timeout=2)
    c.logfile_read = open("cli_test.log", "ab")
    c.expect(["iredis", "127.0.0.1:6379[7]>"])
    c.sendline("set current-db 7")
    c.expect("OK")
    c.close()


def test_connection_using_url_from_env(clean_redis, monkeypatch):
    monkeypatch.setenv("IREDIS_URL", "redis://localhost:6379/7")
    c = pexpect.spawn("iredis", timeout=2)
    c.logfile_read = open("cli_test.log", "ab")
    c.expect(["iredis", "localhost:6379[7]>"])
    c.sendline("set current-db 7")
    c.expect("OK")
    c.close()


@pytest.mark.xfail(reason="current test in github action, socket not supported.")
# https://github.community/t5/GitHub-Actions/Job-service-command/td-p/33901#
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idservices
def test_connect_via_socket(fake_redis_socket):
    config_content = dedent(
        """
        [main]
        log_location = /tmp/iredis1.log
        no_info=True
        """
    )
    with open("/tmp/iredisrc", "w+") as etc_config:
        etc_config.write(config_content)

    c = pexpect.spawn("iredis --iredisrc /tmp/iredisrc -s /tmp/test.sock", timeout=2)
    c.logfile_read = open("cli_test.log", "ab")
    c.expect("redis /tmp/test.sock")

    c.close()


def test_iredis_start_with_prompt():
    cli = pexpect.spawn("iredis --prompt '{host}abc{port}def{client_name}'", timeout=2)
    cli.logfile_read = open("cli_test.log", "ab")
    cli.expect("iredis")
    cli.expect("127.0.0.1abc6379defNone")
    cli.close()