mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-04 23:17:20 +08:00
fix(agent): close chat lifecycle safely
This commit is contained in:
@@ -571,7 +571,7 @@ def test_stop_modules_continues_after_internal_owner_failures(monkeypatch):
|
||||
|
||||
|
||||
def test_stop_modules_drains_web_agent_tasks_before_persistence(monkeypatch):
|
||||
"""关闭时先关闭持久化准入,再收口 Web Agent 和已有写入。"""
|
||||
"""关闭时先收口 Web Agent,再关闭持久化准入和数据库任务。"""
|
||||
order = []
|
||||
monkeypatch.setattr(modules_initializer, "stop_agent", AsyncMock())
|
||||
dependencies = _patch_module_shutdown_dependencies(monkeypatch)
|
||||
@@ -599,12 +599,53 @@ def test_stop_modules_drains_web_agent_tasks_before_persistence(monkeypatch):
|
||||
|
||||
asyncio.run(modules_initializer.stop_modules())
|
||||
|
||||
assert order == [
|
||||
"persistence-admission",
|
||||
"web-agent",
|
||||
"persistence",
|
||||
"database",
|
||||
]
|
||||
assert order == ["web-agent", "persistence-admission", "persistence", "database"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_shutdown_timeout_does_not_skip_database_worker_cleanup(monkeypatch):
|
||||
"""模块关闭超时取消当前步骤后仍应继续收口数据库 worker。"""
|
||||
started = asyncio.Event()
|
||||
|
||||
async def blocked_web_agent_shutdown():
|
||||
started.set()
|
||||
await asyncio.Event().wait()
|
||||
|
||||
monkeypatch.setattr(modules_initializer, "stop_agent", AsyncMock())
|
||||
_patch_module_shutdown_dependencies(monkeypatch)
|
||||
monkeypatch.setattr(
|
||||
modules_initializer,
|
||||
"shutdown_web_agent_background_tasks",
|
||||
blocked_web_agent_shutdown,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
modules_initializer,
|
||||
"wait_web_agent_background_tasks",
|
||||
AsyncMock(),
|
||||
)
|
||||
persistence = MagicMock()
|
||||
persistence.begin_shutdown = MagicMock()
|
||||
persistence.shutdown = AsyncMock()
|
||||
monkeypatch.setattr(
|
||||
modules_initializer,
|
||||
"get_configured_agent_chat_persistence",
|
||||
MagicMock(return_value=persistence),
|
||||
)
|
||||
stop_database_worker = AsyncMock()
|
||||
monkeypatch.setattr(modules_initializer, "stop_database_worker", stop_database_worker)
|
||||
monkeypatch.setattr(modules_initializer, "_database_worker", object())
|
||||
|
||||
shutdown = asyncio.create_task(
|
||||
lifecycle.run_shutdown_step(
|
||||
"模块服务",
|
||||
modules_initializer.stop_modules,
|
||||
timeout_seconds=0.01,
|
||||
)
|
||||
)
|
||||
await started.wait()
|
||||
await shutdown
|
||||
|
||||
stop_database_worker.assert_awaited_once_with()
|
||||
|
||||
|
||||
def _patch_module_shutdown_dependencies(monkeypatch) -> dict:
|
||||
|
||||
Reference in New Issue
Block a user