Tests: added tests for the "response_headers" option.
This commit is contained in:
173
test/test_response_headers.py
Normal file
173
test/test_response_headers.py
Normal file
@@ -0,0 +1,173 @@
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from unit.applications.proto import ApplicationProto
|
||||
from unit.applications.lang.python import ApplicationPython
|
||||
from unit.option import option
|
||||
|
||||
client = ApplicationProto()
|
||||
client_python = ApplicationPython()
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def setup_method_fixture(temp_dir):
|
||||
path = Path(f'{temp_dir}/index.html')
|
||||
path.write_text('0123456789')
|
||||
|
||||
assert 'success' in client.conf(
|
||||
{
|
||||
"listeners": {
|
||||
"*:7080": {"pass": "routes"},
|
||||
},
|
||||
"routes": [
|
||||
{
|
||||
"action": {
|
||||
"share": str(path),
|
||||
"response_headers": {
|
||||
"X-Foo": "foo",
|
||||
},
|
||||
}
|
||||
}
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def action_update(conf):
|
||||
assert 'success' in client.conf(conf, 'routes/0/action')
|
||||
|
||||
|
||||
def test_response_headers(temp_dir):
|
||||
resp = client.get()
|
||||
assert resp['status'] == 200, 'status 200'
|
||||
assert resp['headers']['X-Foo'] == 'foo', 'header 200'
|
||||
|
||||
assert 'success' in client.conf(f'"{temp_dir}"', 'routes/0/action/share')
|
||||
|
||||
resp = client.get()
|
||||
assert resp['status'] == 301, 'status 301'
|
||||
assert resp['headers']['X-Foo'] == 'foo', 'header 301'
|
||||
|
||||
assert 'success' in client.conf('"/blah"', 'routes/0/action/share')
|
||||
|
||||
resp = client.get()
|
||||
assert resp['status'] == 404, 'status 404'
|
||||
assert 'X-Foo' not in client.get()['headers'], 'header 404'
|
||||
|
||||
|
||||
def test_response_last_action():
|
||||
assert 'success' in client.conf(
|
||||
{
|
||||
"listeners": {
|
||||
"*:7080": {"pass": "routes/first"},
|
||||
},
|
||||
"routes": {
|
||||
"first": [
|
||||
{
|
||||
"action": {
|
||||
"pass": "routes/second",
|
||||
"response_headers": {
|
||||
"X-Foo": "foo",
|
||||
},
|
||||
}
|
||||
}
|
||||
],
|
||||
"second": [
|
||||
{
|
||||
"action": {"return": 200},
|
||||
}
|
||||
],
|
||||
},
|
||||
"applications": {},
|
||||
}
|
||||
)
|
||||
|
||||
assert 'X-Foo' not in client.get()['headers']
|
||||
|
||||
|
||||
def test_response_pass(require):
|
||||
require({'modules': {'python': 'any'}})
|
||||
|
||||
assert 'success' in client_python.conf(
|
||||
{
|
||||
"listeners": {
|
||||
"*:7080": {"pass": "routes"},
|
||||
},
|
||||
"routes": [
|
||||
{
|
||||
"action": {
|
||||
"pass": "applications/empty",
|
||||
"response_headers": {
|
||||
"X-Foo": "foo",
|
||||
},
|
||||
}
|
||||
},
|
||||
],
|
||||
"applications": {
|
||||
"empty": {
|
||||
"type": client_python.get_application_type(),
|
||||
"processes": {"spare": 0},
|
||||
"path": f'{option.test_dir}/python/empty',
|
||||
"working_directory": f'{option.test_dir}/python/empty',
|
||||
"module": "wsgi",
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
assert client.get()['headers']['X-Foo'] == 'foo'
|
||||
|
||||
|
||||
def test_response_fallback():
|
||||
assert 'success' in client.conf(
|
||||
{
|
||||
"listeners": {"*:7080": {"pass": "routes"}},
|
||||
"routes": [
|
||||
{
|
||||
"action": {
|
||||
"share": "/blah",
|
||||
"fallback": {
|
||||
"return": 200,
|
||||
"response_headers": {
|
||||
"X-Foo": "foo",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
assert client.get()['headers']['X-Foo'] == 'foo'
|
||||
|
||||
|
||||
def test_response_headers_var():
|
||||
assert 'success' in client.conf(
|
||||
{
|
||||
"X-Foo": "$uri",
|
||||
},
|
||||
'routes/0/action/response_headers',
|
||||
)
|
||||
|
||||
assert client.get()['headers']['X-Foo'] == '/'
|
||||
|
||||
|
||||
def test_response_headers_remove():
|
||||
assert 'success' in client.conf(
|
||||
{"etag": None},
|
||||
'routes/0/action/response_headers',
|
||||
)
|
||||
|
||||
assert 'ETag' not in client.get()['headers']
|
||||
|
||||
|
||||
def test_response_headers_invalid(skip_alert):
|
||||
skip_alert(r'failed to apply new conf')
|
||||
|
||||
def check_invalid(conf):
|
||||
assert 'error' in client.conf(
|
||||
conf,
|
||||
'routes/0/action/response_headers',
|
||||
)
|
||||
|
||||
check_invalid({"X-Foo": "$u"})
|
||||
Reference in New Issue
Block a user