mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
pytest.raises() returns exception info not the exception itself. They changed implementation of exception info, so now .value property must be used to get the exception instance and have proper output from str() method. https://github.com/pytest-dev/pytest/issues/5412 Signed-off-by: Martin Bašti <mbasti@redhat.com>
100 lines
3.3 KiB
Python
100 lines
3.3 KiB
Python
# -*- 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
|