feat: add backend health check for unmanaged MoviePilot processes

This commit is contained in:
jxxghp
2026-06-13 17:12:29 +08:00
parent b89c351686
commit a37ed9aa97
3 changed files with 102 additions and 1 deletions

View File

@@ -1,9 +1,12 @@
from __future__ import annotations
from types import SimpleNamespace
from app.core.config import settings
from app.doctor import run_doctor
from app.doctor import checks, run_doctor
from app.doctor.formatters import format_json_report, format_text_report
from app.doctor.models import DoctorFinding, DoctorFindingStatus, DoctorSeverity
from app.doctor.runner import DoctorRunner
def test_doctor_report_has_stable_json_shape(tmp_path, monkeypatch):
@@ -60,3 +63,26 @@ def test_doctor_fix_removes_stale_runtime(tmp_path, monkeypatch):
finding = report.find("runtime.backend_stale")
assert finding is not None
assert finding.fixed
def test_doctor_accepts_healthy_unmanaged_backend_port(monkeypatch):
"""doctor 在容器中应把健康的非 CLI 管理后端端口识别为正常。"""
occupant = SimpleNamespace(pid=12345)
monkeypatch.setattr(checks, "_port_occupants", lambda port: [occupant])
monkeypatch.setattr(checks, "_process_description", lambda process: f"PID {process.pid} (python)")
monkeypatch.setattr(checks, "_is_expected_port_process", lambda name, process: False)
monkeypatch.setattr(
checks,
"_backend_health_payload",
lambda port: {"success": True, "data": {"BACKEND_VERSION": "v2-test"}},
)
runner = DoctorRunner()
checks._check_port(runner, name="backend", port=3001, managed_process=None)
finding = runner.report.find("port.backend_listening_unmanaged")
assert finding is not None
assert finding.status == DoctorFindingStatus.Ok
assert finding.severity == DoctorSeverity.Info
assert finding.context["backend_version"] == "v2-test"
assert runner.report.find("port.backend_occupied") is None