fix(server): Unix 默认组合在 rloop 不可用时退回 uvicorn+uvloop

- pick_server(auto) 按平台组合选择:Windows granian+winloop;Unix granian+rloop → uvicorn+uvloop → 已安装项
- 回退 uvicorn 时打印原因(未安装 granian / rloop 不可用)
- 测试补充 Unix 回退分支与 Windows auto 选择;README 默认矩阵同步
This commit is contained in:
snowy-yang committed 2026-10-23 22:31:47 +08:00
1 parent bcfc1022eb
commit 39565a3913
3 files changed
+38 -12

No files matched your search

+16 -2
View File
@@ -12,14 +12,28 @@ sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from scripts import serve
def test_pick_server_auto_prefers_granian(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(serve, "has_module", lambda name: name == "granian")
def test_pick_server_auto_windows_prefers_granian(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(serve, "IS_WINDOWS", True)
monkeypatch.setattr(serve, "has_module", lambda name: name in ("granian", "winloop"))
assert serve.pick_server("auto") == "granian"
monkeypatch.setattr(serve, "has_module", lambda name: False)
assert serve.pick_server("auto") == "uvicorn"
def test_pick_server_auto_unix_prefers_granian_rloop(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(serve, "IS_WINDOWS", False)
monkeypatch.setattr(serve, "has_module", lambda name: name in ("granian", "rloop", "uvloop", "uvicorn"))
assert serve.pick_server("auto") == "granian"
def test_pick_server_auto_unix_falls_back_to_uvicorn_uvloop(monkeypatch: pytest.MonkeyPatch) -> None:
# 例如 granian 已安装但 rloop 不可用:默认改为 uvicorn+uvloop
monkeypatch.setattr(serve, "IS_WINDOWS", False)
monkeypatch.setattr(serve, "has_module", lambda name: name in ("granian", "uvloop", "uvicorn"))
assert serve.pick_server("auto") == "uvicorn"
def test_available_loops_follow_installed_packages(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(serve, "has_module", lambda name: name == "winloop")
assert serve.available_loops("granian") == ["auto", "asyncio", "winloop"]