test(proxy): cover resilient extension loading

This commit is contained in:
JerrettDavis 2026-07-14 23:44:33 -05:00
parent 046c93de40
commit fe5176dbe7
2 changed files with 46 additions and 2 deletions

View file

@ -138,8 +138,6 @@ def install_all(
# A failing extension disables *itself* and the proxy keeps running
# without it — covers environment/auth failures and compatibility
# errors (e.g. a plugin built against a core API this version lacks).
# ponytail: if an extension ever needs mandatory fail-closed abort,
# define ExtensionFatalError in this module and re-raise it here.
log.warning(
"proxy extension %r failed to install and was skipped: %s",
name,

View file

@ -0,0 +1,46 @@
from __future__ import annotations
import logging
from typing import Any
from headroom.proxy import extensions
def test_install_all_skips_failed_extension_and_continues(
caplog,
capsys,
monkeypatch,
) -> None:
calls: list[str] = []
def good(app: Any, config: Any) -> None:
calls.append("good")
def bad(app: Any, config: Any) -> None:
calls.append("bad")
raise RuntimeError("missing optional dependency")
monkeypatch.setattr(
extensions,
"discover",
lambda: iter([("bad_ext", bad), ("good_ext", good)]),
)
with caplog.at_level(logging.WARNING, logger=extensions.log.name):
installed = extensions.install_all(object(), object(), enabled=["bad_ext", "good_ext"])
assert installed == ["good_ext"]
assert calls == ["bad", "good"]
assert "bad_ext" in capsys.readouterr().err
assert "failed to install and was skipped" in caplog.text
assert "proxy extensions skipped due to install errors: bad_ext" in caplog.text
def test_install_all_warns_for_missing_requested_extension(caplog, monkeypatch) -> None:
monkeypatch.setattr(extensions, "discover", lambda: iter([]))
with caplog.at_level(logging.WARNING, logger=extensions.log.name):
installed = extensions.install_all(object(), object(), enabled=["missing_ext"])
assert installed == []
assert "proxy extensions requested but not found: missing_ext" in caplog.text