Files
codex-app-server/tests/test_host_sleep.py
T
host 4cd9b5eaa4 coverage85-step3: 运行器统一加根路径,tests/ E402 清零
新增 run_tests.py:三套件统一入口,只加仓库根(deploy 套件
再加 deploy/ 目录在根之前),各套件走独立子进程;verify 作
业改走运行器,coverage 作业因子进程测不到覆盖率保持原
discover 命令。tests/ 13 个文件的 sys.path 前置 import 全部
改回正常 import(含 test_host_trace 的 try/except 回落);
deploy 的 deploy 目录插入与 verify-multiuser 的 spec 加载按
陷阱 2 如实保留(仅删 verify-multiuser 冗余的根插入)。
.coveragerc omit 加 */run_tests.py,使新运行器文件不计入
生产覆盖率。门槛未动(仍 75%),未补新测试。
2026-11-03 02:48:54 +00:00

48 lines
1.6 KiB
Python

import io
import json
import os
import sys
import tempfile
import unittest
from contextlib import redirect_stdout
from unittest import mock
import host
class HostSleepTest(unittest.TestCase):
def _run(self, cli_args):
with tempfile.TemporaryDirectory() as tmp:
state_path = os.path.join(tmp, "host-state.json")
with open(state_path, "w", encoding="utf-8") as f:
json.dump({"tasks": {}, "automations": []}, f)
cfg_path = os.path.join(tmp, "cfg.json")
with open(cfg_path, "w", encoding="utf-8") as f:
json.dump({"state": state_path}, f)
argv = ["host.py", "--config", cfg_path,
"--state", state_path] + cli_args
out = io.StringIO()
code = 0
with mock.patch.object(host, "Server",
lambda **kw: mock.MagicMock()):
with mock.patch.object(sys, "argv", argv):
with redirect_stdout(out):
try:
host.main()
except SystemExit as e:
code = e.code if isinstance(e.code, int) else 1
return code, out.getvalue()
def test_sleep_zero(self):
code, out = self._run(["sleep", "--seconds", "0"])
self.assertEqual(code, 0)
self.assertEqual(json.loads(out),
{"slept_seconds": 0.0, "interrupted": False})
def test_sleep_out_of_range(self):
code, _out = self._run(["sleep", "--seconds", "61"])
self.assertEqual(code, 1)
if __name__ == "__main__":
unittest.main()