File: test_web_cli.py

package info (click to toggle)
python-aiohttp 3.5.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 5,612 kB
  • sloc: python: 36,917; ansic: 15,734; makefile: 365; sh: 83
file content (143 lines) | stat: -rw-r--r-- 4,311 bytes parent folder | download
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import pytest

from aiohttp import web


def test_entry_func_empty(mocker) -> None:
    error = mocker.patch("aiohttp.web.ArgumentParser.error",
                         side_effect=SystemExit)
    argv = [""]

    with pytest.raises(SystemExit):
        web.main(argv)

    error.assert_called_with(
        "'entry-func' not in 'module:function' syntax"
    )


def test_entry_func_only_module(mocker) -> None:
    argv = ["test"]
    error = mocker.patch("aiohttp.web.ArgumentParser.error",
                         side_effect=SystemExit)

    with pytest.raises(SystemExit):
        web.main(argv)

    error.assert_called_with(
        "'entry-func' not in 'module:function' syntax"
    )


def test_entry_func_only_function(mocker) -> None:
    argv = [":test"]
    error = mocker.patch("aiohttp.web.ArgumentParser.error",
                         side_effect=SystemExit)

    with pytest.raises(SystemExit):
        web.main(argv)

    error.assert_called_with(
        "'entry-func' not in 'module:function' syntax"
    )


def test_entry_func_only_separator(mocker) -> None:
    argv = [":"]
    error = mocker.patch("aiohttp.web.ArgumentParser.error",
                         side_effect=SystemExit)

    with pytest.raises(SystemExit):
        web.main(argv)

    error.assert_called_with(
        "'entry-func' not in 'module:function' syntax"
    )


def test_entry_func_relative_module(mocker) -> None:
    argv = [".a.b:c"]

    error = mocker.patch("aiohttp.web.ArgumentParser.error",
                         side_effect=SystemExit)
    with pytest.raises(SystemExit):
        web.main(argv)

    error.assert_called_with("relative module names not supported")


def test_entry_func_non_existent_module(mocker) -> None:
    argv = ["alpha.beta:func"]

    mocker.patch("aiohttp.web.import_module",
                 side_effect=ImportError("Test Error"))
    error = mocker.patch("aiohttp.web.ArgumentParser.error",
                         side_effect=SystemExit)

    with pytest.raises(SystemExit):
        web.main(argv)

    error.assert_called_with('unable to import alpha.beta: Test Error')


def test_entry_func_non_existent_attribute(mocker) -> None:
    argv = ["alpha.beta:func"]
    import_module = mocker.patch("aiohttp.web.import_module")
    error = mocker.patch("aiohttp.web.ArgumentParser.error",
                         side_effect=SystemExit)
    module = import_module("alpha.beta")
    del module.func

    with pytest.raises(SystemExit):
        web.main(argv)

    error.assert_called_with(
        "module %r has no attribute %r" % ("alpha.beta", "func")
    )


def test_path_when_unsupported(mocker, monkeypatch) -> None:
    argv = "--path=test_path.sock alpha.beta:func".split()
    mocker.patch("aiohttp.web.import_module")
    monkeypatch.delattr("socket.AF_UNIX", raising=False)

    error = mocker.patch("aiohttp.web.ArgumentParser.error",
                         side_effect=SystemExit)
    with pytest.raises(SystemExit):
        web.main(argv)

    error.assert_called_with("file system paths not supported by your"
                             " operating environment")


def test_entry_func_call(mocker) -> None:
    mocker.patch("aiohttp.web.run_app")
    import_module = mocker.patch("aiohttp.web.import_module")
    argv = ("-H testhost -P 6666 --extra-optional-eins alpha.beta:func "
            "--extra-optional-zwei extra positional args").split()
    module = import_module("alpha.beta")

    with pytest.raises(SystemExit):
        web.main(argv)

    module.func.assert_called_with(
        ("--extra-optional-eins --extra-optional-zwei extra positional "
         "args").split()
    )


def test_running_application(mocker) -> None:
    run_app = mocker.patch("aiohttp.web.run_app")
    import_module = mocker.patch("aiohttp.web.import_module")
    exit = mocker.patch("aiohttp.web.ArgumentParser.exit",
                        side_effect=SystemExit)
    argv = ("-H testhost -P 6666 --extra-optional-eins alpha.beta:func "
            "--extra-optional-zwei extra positional args").split()
    module = import_module("alpha.beta")
    app = module.func()

    with pytest.raises(SystemExit):
        web.main(argv)

    run_app.assert_called_with(app, host="testhost", port=6666, path=None)
    exit.assert_called_with(message="Stopped\n")