aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/test/src/test_basic.py
blob: d092e1d26ec0f90743151fdbce61748fc907a737 (plain) (blame)
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
# Copyright (c) 2023 Egor Tensin <egor@tensin.name>
# This file is part of the "cimple" project.
# For details, see https://github.com/egor-tensin/cimple.
# Distributed under the MIT License.

import re


def _test_cmd_line_version_internal(cmd_line, name, version):
    for flag in ("--version", "-V"):
        output = cmd_line.run(flag).removesuffix("\n")
        match = re.match(r"^cimple-(\w+) v(\d+\.\d+\.\d+) \([0-9a-f]{40,}\)$", output)
        assert match, f"Invalid {flag} output:\n{output}"
        assert match.group(1) == name
        assert match.group(2) == version


def test_cmd_line_version(server_exe, worker_exe, client_exe, version):
    _test_cmd_line_version_internal(server_exe, "server", version)
    _test_cmd_line_version_internal(worker_exe, "worker", version)
    _test_cmd_line_version_internal(client_exe, "client", version)


def _test_cmd_line_help_internal(cmd_line, name):
    for flag in ("--help", "-h"):
        output = cmd_line.run(flag).removesuffix("\n")
        match = re.match(r"^usage: cimple-(\w+) ", output)
        assert match, f"Invalid {flag} output:\n{output}"
        assert match.group(1) == name


def test_cmd_line_help(server_exe, worker_exe, client_exe):
    _test_cmd_line_help_internal(server_exe, "server")
    _test_cmd_line_help_internal(worker_exe, "worker")
    _test_cmd_line_help_internal(client_exe, "client")


def _test_cmd_line_invalid_option_internal(cmd_line, name):
    for args in (["-x"], ["--invalid", "value"]):
        ec, output = cmd_line.try_run(*args)
        assert ec != 0, f"Invalid exit code {ec}, output:\n{output}"


def test_cmd_line_invalid_option(server_exe, worker_exe, client_exe):
    _test_cmd_line_invalid_option_internal(server_exe, "server")
    _test_cmd_line_invalid_option_internal(worker_exe, "worker")
    _test_cmd_line_invalid_option_internal(client_exe, "client")


def test_run_client_no_action(client):
    ec, output = client.try_run()
    assert ec != 0, f"Invalid exit code {ec}, output:\n{output}"
    prefix = "usage error: no action specified\n"
    assert output.startswith(prefix), f"Invalid output:\n{output}"


def test_run_client_invalid_request(server, client):
    ec, output = client.try_run("hello")
    assert ec != 0, f"Invalid exit code {ec}, output:\n{output}"
    prefix = "usage error: invalid request\n"
    assert output.startswith(prefix), f"Invalid output:\n{output}"


def test_run_noop_server(server):
    pass


def test_run_noop_server_and_workers(server, workers):
    pass