/
test_util.py
99 lines (77 loc) · 3.28 KB
/
test_util.py
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
# -*- coding: utf-8 -
#
# This file is part of gunicorn released under the MIT license.
# See the NOTICE for more information.
import pytest
from gunicorn import util
from gunicorn.errors import AppImportError
from urllib.parse import SplitResult
@pytest.mark.parametrize('test_input, expected', [
('unix://var/run/test.sock', 'var/run/test.sock'),
('unix:/var/run/test.sock', '/var/run/test.sock'),
('tcp://localhost', ('localhost', 8000)),
('tcp://localhost:5000', ('localhost', 5000)),
('', ('0.0.0.0', 8000)),
('[::1]:8000', ('::1', 8000)),
('[::1]:5000', ('::1', 5000)),
('[::1]', ('::1', 8000)),
('localhost:8000', ('localhost', 8000)),
('127.0.0.1:8000', ('127.0.0.1', 8000)),
('localhost', ('localhost', 8000)),
('fd://33', 33),
])
def test_parse_address(test_input, expected):
assert util.parse_address(test_input) == expected
def test_parse_address_invalid():
with pytest.raises(RuntimeError) as exc_info:
util.parse_address('127.0.0.1:test')
assert "'test' is not a valid port number." in str(exc_info.value)
def test_parse_fd_invalid():
with pytest.raises(RuntimeError) as exc_info:
util.parse_address('fd://asd')
assert "'asd' is not a valid file descriptor." in str(exc_info.value)
def test_http_date():
assert util.http_date(1508607753.740316) == 'Sat, 21 Oct 2017 17:42:33 GMT'
@pytest.mark.parametrize('test_input, expected', [
('1200:0000:AB00:1234:0000:2552:7777:1313', True),
('1200::AB00:1234::2552:7777:1313', False),
('21DA:D3:0:2F3B:2AA:FF:FE28:9C5A', True),
('1200:0000:AB00:1234:O000:2552:7777:1313', False),
])
def test_is_ipv6(test_input, expected):
assert util.is_ipv6(test_input) == expected
def test_warn(capsys):
util.warn('test warn')
_, err = capsys.readouterr()
assert '!!! WARNING: test warn' in err
def test_import_app():
assert util.import_app('support:app')
with pytest.raises(ImportError) as exc_info:
util.import_app('a:app')
assert 'No module' in str(exc_info.value)
with pytest.raises(AppImportError) as exc_info:
util.import_app('support:wrong_app')
msg = "Failed to find application object 'wrong_app' in 'support'"
assert msg in str(exc_info.value)
def test_to_bytestring():
assert util.to_bytestring('test_str', 'ascii') == b'test_str'
assert util.to_bytestring('test_str®') == b'test_str\xc2\xae'
assert util.to_bytestring(b'byte_test_str') == b'byte_test_str'
with pytest.raises(TypeError) as exc_info:
util.to_bytestring(100)
msg = '100 is not a string'
assert msg in str(exc_info.value)
@pytest.mark.parametrize('test_input, expected', [
('https://example.org/a/b?c=1#d',
SplitResult(scheme='https', netloc='example.org', path='/a/b', query='c=1', fragment='d')),
('a/b?c=1#d',
SplitResult(scheme='', netloc='', path='a/b', query='c=1', fragment='d')),
('/a/b?c=1#d',
SplitResult(scheme='', netloc='', path='/a/b', query='c=1', fragment='d')),
('//a/b?c=1#d',
SplitResult(scheme='', netloc='', path='//a/b', query='c=1', fragment='d')),
('///a/b?c=1#d',
SplitResult(scheme='', netloc='', path='///a/b', query='c=1', fragment='d')),
])
def test_split_request_uri(test_input, expected):
assert util.split_request_uri(test_input) == expected