"""收件器的进程级行为:端口闸门与健康接口、手机页的两个选择入口。""" import socket from src.upload.server import create_app, port_busy def test_ping_reports_pid_without_touching_files() -> None: client = create_app(None).test_client() got = client.get("/api/ping") assert got.status_code == 200 body = got.get_json() assert body["ok"] is True and isinstance(body["pid"], int) assert body["started_at"] # 多代进程并存时靠它分辨是谁在服务 assert "files" not in body and "case_id" not in body # 不泄露任何会话信息 def test_port_busy_sees_a_listener() -> None: listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listener.bind(("127.0.0.1", 0)) listener.listen(1) port = listener.getsockname()[1] try: assert port_busy(port) is True finally: listener.close() def test_port_busy_false_after_close() -> None: listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listener.bind(("127.0.0.1", 0)) port = listener.getsockname()[1] listener.close() assert port_busy(port) is False def test_mobile_pages_two_entry_points_in_served_html() -> None: """真实渲染一遍:拍照与选文件是两个 input,capture 只属于拍照那个。""" from src.upload.page import mobile_page html = mobile_page("6月毕业采集", "20261021-demo", "tok") camera = html.split('id="camera"', 1)[1].split(">", 1)[0] gallery = html.split('id="gallery"', 1)[1].split(">", 1)[0] assert 'capture="environment"' in camera and "capture" not in gallery assert html.count('type="file"') == 2 assert "拍照上传" in html and "选择已有文件" in html