107 lines
3.3 KiB
Python
107 lines
3.3 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from cmvr_edge_ai.application import (
|
|
create_default_capability_registry,
|
|
create_default_model_registry,
|
|
create_default_registry,
|
|
)
|
|
from cmvr_edge_ai.cli import _create_uvicorn_server, main
|
|
from cmvr_edge_ai.config import load_config
|
|
from cmvr_edge_ai.server.application import EdgeAIServerApplication
|
|
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
|
SERVER_CONFIG = PROJECT_ROOT / "configs" / "server_detect.yaml"
|
|
|
|
|
|
def test_cli_serve_uses_the_server_owned_configuration(
|
|
monkeypatch,
|
|
) -> None: # type: ignore[no-untyped-def]
|
|
observed: dict[str, object] = {}
|
|
|
|
async def fake_serve(config, registry, capabilities, log_level): # type: ignore[no-untyped-def]
|
|
observed.update(
|
|
config=config,
|
|
registry=registry,
|
|
capabilities=capabilities,
|
|
log_level=log_level,
|
|
)
|
|
return 0
|
|
|
|
monkeypatch.setattr("cmvr_edge_ai.cli._serve_application", fake_serve)
|
|
monkeypatch.setattr("cmvr_edge_ai.cli.configure_logging", lambda *_: None)
|
|
|
|
assert (
|
|
main(
|
|
[
|
|
"serve",
|
|
"--config",
|
|
str(SERVER_CONFIG),
|
|
"--log-level",
|
|
"WARNING",
|
|
]
|
|
)
|
|
== 0
|
|
)
|
|
config = observed["config"]
|
|
assert config.server.enabled is True # type: ignore[union-attr]
|
|
assert set(config.server.routes) == { # type: ignore[union-attr]
|
|
"detect.mobile_phone",
|
|
"detect.ppe",
|
|
}
|
|
assert observed["log_level"] == "WARNING"
|
|
|
|
|
|
def test_uvicorn_server_inherits_bind_limits_from_server_config() -> None:
|
|
config = load_config(SERVER_CONFIG)
|
|
models = create_default_model_registry(discover_entry_points=False)
|
|
application = EdgeAIServerApplication(
|
|
config,
|
|
create_default_registry(
|
|
discover_entry_points=False,
|
|
model_registry=models,
|
|
),
|
|
create_default_capability_registry(
|
|
discover_entry_points=False,
|
|
model_registry=models,
|
|
),
|
|
)
|
|
|
|
server = _create_uvicorn_server(application, "INFO")
|
|
|
|
assert server.config.host == "127.0.0.1"
|
|
assert server.config.port == 8081
|
|
assert server.config.access_log is False
|
|
assert server.config.lifespan == "off"
|
|
|
|
|
|
def test_uvicorn_server_receives_configured_tls_files(tmp_path: Path) -> None:
|
|
config = load_config(SERVER_CONFIG)
|
|
assert config.server is not None
|
|
certfile = tmp_path / "server.crt"
|
|
keyfile = tmp_path / "server.key"
|
|
certfile.write_text("test certificate", encoding="utf-8")
|
|
keyfile.write_text("test key", encoding="utf-8")
|
|
config.server.http.tls_certfile = certfile
|
|
config.server.http.tls_keyfile = keyfile
|
|
|
|
models = create_default_model_registry(discover_entry_points=False)
|
|
application = EdgeAIServerApplication(
|
|
config,
|
|
create_default_registry(
|
|
discover_entry_points=False,
|
|
model_registry=models,
|
|
),
|
|
create_default_capability_registry(
|
|
discover_entry_points=False,
|
|
model_registry=models,
|
|
),
|
|
)
|
|
|
|
server = _create_uvicorn_server(application, "INFO")
|
|
|
|
assert server.config.ssl_certfile == str(certfile)
|
|
assert server.config.ssl_keyfile == str(keyfile)
|