40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Tests for runtime contract loading and drift validation."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from mes_dashboard.core.runtime_contract import (
|
|
load_runtime_contract,
|
|
validate_runtime_contract,
|
|
)
|
|
|
|
|
|
def test_runtime_contract_resolves_relative_watchdog_paths(tmp_path, monkeypatch):
|
|
monkeypatch.setenv("MES_DASHBOARD_ROOT", str(tmp_path))
|
|
monkeypatch.setenv("WATCHDOG_RUNTIME_DIR", "./tmp")
|
|
monkeypatch.setenv("WATCHDOG_RESTART_FLAG", "./tmp/restart.flag")
|
|
monkeypatch.setenv("WATCHDOG_PID_FILE", "./tmp/gunicorn.pid")
|
|
monkeypatch.setenv("WATCHDOG_STATE_FILE", "./tmp/restart_state.json")
|
|
|
|
contract = load_runtime_contract()
|
|
assert Path(contract["watchdog_runtime_dir"]) == (tmp_path / "tmp").resolve()
|
|
assert Path(contract["watchdog_restart_flag"]) == (tmp_path / "tmp" / "restart.flag").resolve()
|
|
assert Path(contract["watchdog_pid_file"]) == (tmp_path / "tmp" / "gunicorn.pid").resolve()
|
|
|
|
|
|
def test_runtime_contract_detects_flag_pid_drift():
|
|
contract = {
|
|
"watchdog_runtime_dir": "/opt/runtime",
|
|
"watchdog_restart_flag": "/tmp/restart.flag",
|
|
"watchdog_pid_file": "/tmp/gunicorn.pid",
|
|
"watchdog_state_file": "/tmp/restart_state.json",
|
|
"gunicorn_bind": "0.0.0.0:8080",
|
|
"conda_bin": "",
|
|
"conda_env_name": "mes-dashboard",
|
|
}
|
|
errors = validate_runtime_contract(contract, strict=False)
|
|
assert any("WATCHDOG_RESTART_FLAG" in err for err in errors)
|
|
assert any("WATCHDOG_PID_FILE" in err for err in errors)
|