32c7336bf6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
104 lines
3.0 KiB
Python
104 lines
3.0 KiB
Python
"""Tests para render_caddyfile."""
|
|
|
|
from render_caddyfile import render_caddyfile
|
|
|
|
HEADER = (
|
|
"# Generado por render_caddyfile_py_infra — NO editar a mano. "
|
|
"Fuente: apps/local_hub/local_services.yaml\n"
|
|
)
|
|
|
|
|
|
def test_golden_dos_servicios_ordenados():
|
|
services = [
|
|
{"subdomain": "metabase", "port": 3030},
|
|
{"subdomain": "grafana", "port": 3000},
|
|
]
|
|
result = render_caddyfile(services)
|
|
expected = (
|
|
HEADER
|
|
+ "http://grafana.localhost {\n"
|
|
+ " reverse_proxy 127.0.0.1:3000\n"
|
|
+ "}\n"
|
|
+ "http://metabase.localhost {\n"
|
|
+ " reverse_proxy 127.0.0.1:3030\n"
|
|
+ "}\n"
|
|
)
|
|
assert result == expected
|
|
# Orden alfabetico: grafana antes que metabase pese al orden de entrada.
|
|
assert result.index("grafana.localhost") < result.index("metabase.localhost")
|
|
# Termina con un unico newline.
|
|
assert result.endswith("}\n")
|
|
assert not result.endswith("\n\n")
|
|
|
|
|
|
def test_dashboard_va_primero():
|
|
services = [{"subdomain": "metabase", "port": 3030}]
|
|
dashboard = {"subdomain": "home", "port": 8585}
|
|
result = render_caddyfile(services, dashboard=dashboard)
|
|
expected = (
|
|
HEADER
|
|
+ "http://home.localhost {\n"
|
|
+ " reverse_proxy 127.0.0.1:8585\n"
|
|
+ "}\n"
|
|
+ "http://metabase.localhost {\n"
|
|
+ " reverse_proxy 127.0.0.1:3030\n"
|
|
+ "}\n"
|
|
)
|
|
assert result == expected
|
|
# El dashboard aparece antes que cualquier servicio.
|
|
assert result.index("home.localhost") < result.index("metabase.localhost")
|
|
|
|
|
|
def test_lista_vacia_solo_cabecera():
|
|
result = render_caddyfile([])
|
|
assert result == HEADER
|
|
|
|
|
|
def test_servicio_sin_port_se_ignora():
|
|
services = [
|
|
{"subdomain": "valido", "port": 9000},
|
|
{"subdomain": "sin_port"},
|
|
]
|
|
result = render_caddyfile(services)
|
|
expected = (
|
|
HEADER
|
|
+ "http://valido.localhost {\n"
|
|
+ " reverse_proxy 127.0.0.1:9000\n"
|
|
+ "}\n"
|
|
)
|
|
assert result == expected
|
|
assert "sin_port" not in result
|
|
|
|
|
|
def test_servicio_sin_subdomain_se_ignora():
|
|
services = [
|
|
{"subdomain": "valido", "port": 9000},
|
|
{"port": 1234},
|
|
]
|
|
result = render_caddyfile(services)
|
|
assert "1234" not in result
|
|
assert result.count("reverse_proxy") == 1
|
|
|
|
|
|
def test_rewrite_host_emite_header_up():
|
|
services = [{"subdomain": "jupyter", "port": 8888, "rewrite_host": True}]
|
|
result = render_caddyfile(services)
|
|
expected = (
|
|
HEADER
|
|
+ "http://jupyter.localhost {\n"
|
|
+ " reverse_proxy 127.0.0.1:8888 {\n"
|
|
+ " header_up Host 127.0.0.1:8888\n"
|
|
+ " }\n"
|
|
+ "}\n"
|
|
)
|
|
assert result == expected
|
|
|
|
|
|
def test_rewrite_host_ausente_o_falso_no_reescribe():
|
|
# Sin la clave -> bloque simple.
|
|
assert "header_up" not in render_caddyfile([{"subdomain": "a", "port": 1}])
|
|
# Con rewrite_host falsy -> bloque simple.
|
|
assert "header_up" not in render_caddyfile(
|
|
[{"subdomain": "a", "port": 1, "rewrite_host": False}]
|
|
)
|