"""失败调用节点夹具。 健康检查成功但 /invoke 始终返回 500,支持通过 WOV_FAIL_INVALID_JSON 环境变量 切换为非法 JSON,用于验证 NodeManager 的错误响应解析分支。 """ import http.server import json import os import threading class Handler(http.server.BaseHTTPRequestHandler): def do_GET(self) -> None: if self.path == "/health": self.send_response(200) self.end_headers() return self.send_response(404) self.end_headers() def do_POST(self) -> None: self.send_response(500) self.send_header("Content-Type", "application/json") if os.environ.get("WOV_FAIL_INVALID_JSON") == "1": body = b"not-json" else: # 默认返回协议格式的失败 JSON,验证错误信息透传。 body = json.dumps({"status": "failed", "error": "boom"}).encode("utf-8") self.send_header("Content-Length", str(len(body))) self.end_headers() self.wfile.write(body) def log_message(self, format, *args) -> None: return server = http.server.ThreadingHTTPServer(("127.0.0.1", 0), Handler) print(f"WOV_NODE_READY port={server.server_address[1]}", flush=True) threading.Thread(target=server.serve_forever, daemon=True).start() threading.Event().wait()