import pytest
def test_empty_config(check_config):
assert check_config(returncode=0) == ""
def test_no_listen(check_config):
err = check_config("""
routing: {}
handlers: {}
""", returncode=0)
assert err == ''
@pytest.mark.parametrize("debug_routing", [
"yes", "on", "y", "1",
"no", "off", "n", "0",
])
def test_debug_variants(check_config, debug_routing):
err = check_config("""
debug_routing: {}
""".format(debug_routing))
assert ".debug_routing: bad boolean " in err
def test_invalid_listen(check_config):
err = check_config("""
listen: 127.0.0.1:80
routing: {}
handlers: {}
""")
assert ".listen: sequence expected, got Scalar" in err
err = check_config("""
listen:
- 127.0.0.1:80
- null
routing: {}
handlers: {}
""")
assert ".listen[1]: expected string, got Null" in err
err = check_config("""
listen:
- - 127.0.0.1
- 80
routing: {}
handlers: {}
""")
assert ".listen[0]: expected string, got Seq" in err
def test_no_proxy_destination(check_config):
cfg = """
listen:
- 127.0.0.1:8080
routing:
localhost:/abc: abc
handlers:
abc: !Proxy {}
"""
err = check_config(cfg)
assert ".handlers.abc: missing field `destination`" in err
def test_unknown_proxy_destination(check_config):
cfg = """
listen:
- 127.0.0.1:8080
routing:
localhost:/abc: abc
handlers:
abc: !Proxy
destination: unknown-dest
"""
err = check_config(cfg)
assert (
"handler\"abc\": unknown http destination upstream\"unknown-dest\""
) in err
def test_unknown_chat_http_route(check_config):
cfg = """
routing:
localhost:/abc: chat
handlers:
chat: !SwindonLattice
session-pool: chat
http-route: unknown-dest
message-handlers:
"*": dummy/
session-pools:
chat:
inactivity-handlers:
- dummy/
http-destinations:
dummy:
addresses:
- 1.2.3.4:5
"""
err = check_config(cfg)
assert (
"handler\"chat\": unknown http route handler\"unknown-dest\""
) in err
def test_unknown_chat_message_handlers(check_config):
cfg = """
routing:
localhost:/abc: chat
handlers:
chat: !SwindonLattice
session-pool: chat
message-handlers:
"*": dummy/
"test": unknown-dest/
session-pools:
chat:
inactivity-handlers:
- dummy/
http-destinations:
dummy:
override-host-header: swindon.internal
addresses:
- 1.2.3.4:5
"""
err = check_config(cfg)
assert (
"handler\"chat\": unknown http destination upstream\"unknown-dest\""
) in err
cfg = """
routing:
localhost:/abc: chat
handlers:
chat: !SwindonLattice
session-pool: chat
message-handlers:
"*": unknown-dest/
"swindon.*": dummy/
session-pools:
chat:
inactivity-handlers:
- dummy/
http-destinations:
dummy:
addresses:
- 1.2.3.4:5
"""
err = check_config(cfg)
assert (
"handler\"chat\": unknown http destination upstream\"unknown-dest\""
) in err
def test_override_host_header_is_set(check_config):
cfg = """
routing:
localhost:/abc: chat
handlers:
chat: !SwindonLattice
session-pool: chat
message-handlers:
"*": dummy/
"test": unknown-dest/
session-pools:
chat:
inactivity-handlers:
- dummy/
http-destinations:
dummy:
addresses:
- 1.2.3.4:5
"""
err = check_config(cfg)
assert (
'validation error: http destination upstream"dummy" '
'is used in message-handler of handler"chat", '
'so must contain override-host-header setting.'
) in err
def test_unknown_session_pool_dest(check_config):
cfg = """
session-pools:
chat:
inactivity-handlers:
- dummy/
"""
err = check_config(cfg)
assert (
"sessionpool\"chat\": unknown http destination upstream\"dummy\""
) in err
def test_no_handler(check_config):
cfg = """
listen:
- 127.0.0.1:8080
routing:
localhost/path: unkown-handler
handlers:
known-handler: !EmptyGif
"""
err = check_config(cfg)
assert err != ''
def test_invalid_routing(check_config):
err = check_config("""
listen:
- 127.0.0.1:80
routing:
- host:port/path: handler
""")
assert '.routing: mapping expected' in err
def test_invalid_handlers(check_config):
err = check_config("""
listen:
- 1.2.3.4:5
handlers:
- handler: !EmptyGif
""")
assert '.handlers: mapping expected' in err
def test_extra_headers(check_config):
err = check_config("""
listen:
- 1.2.3.4:5
routing:
host/path: handler
handlers:
handler: !SingleFile
path: /work/
content-type: text/plain
extra-headers:
Content-Type: text/html
""")
assert (
'.handlers.handler: Content-Type must be specified as `content-type`'
' parameter rather than in `extra-headers`') in err
def test_www_redirect_route_prefix(check_config):
err = check_config("""
routing:
example.com: www_redirect
handlers:
www_redirect: !StripWWWRedirect
""")
assert (
'Host "example.com" does not start with `www.` '
'(required for StripWWWRedirect handler)'
) in err
def test_route_path_suffix(check_config):
err = check_config("""
routing:
localhost/some/path/: handler
handlers:
handler: !EmptyGif
""")
assert (
'Path must not end with / in "localhost/some/path/"'
) in err
def test_no_inactivity(check_config):
cfg = """
routing:
localhost:/abc: chat
handlers:
chat: !SwindonLattice
session-pool: chat
message-handlers:
"*": dummy/
session-pools:
chat:
http-destinations:
dummy:
override-host-header: myhost
addresses:
- 1.2.3.4:5
"""
err = check_config(cfg, returncode=0)
assert err == ''
def test_mixins(check_config):
err = check_config("""
routing:
localhost/some/path: app1-handler
localhost/other/path: app2-handler
mixins:
app1-: app1.yaml
app2-: app2.yaml
""", files=dict(
app1='''
handlers:
app1-handler: !EmptyGif
''', app2='''
handlers:
app2-handler: !EmptyGif
'''),
returncode=0)
assert err == ''
def test_mixins_fingerprint(check_fingerprint):
fp = check_fingerprint("""
routing:
localhost/some/path: app1-handler
localhost/other/path: app2-handler
mixins:
app1-: app1.yaml
app2-: app2.yaml
""", files=dict(
app1='''
handlers:
app1-handler: !EmptyGif
''', app2='''
handlers:
app2-handler: !EmptyGif
'''))
assert fp[:39] == b'Config fingerprint: bbcd0ce03fb0d058ecd', repr(fp)
def test_bad_mixins(check_config):
err = check_config("""
routing:
localhost/some/path: handler
localhost/other/path: app2-handler
mixins:
app1-: app1.yaml
app2-: app2.yaml
""", files=dict(
app1='''
handlers:
handler: !EmptyGif
''', app2='''
handlers:
app2-handler: !EmptyGif
'''))
assert ('app1.yaml" has handler named "handler" without prefix "app1-"'
) in err