fix(gateway): cap adapter disconnect during stop

This commit is contained in:
LeonSGP43 2026-05-05 10:18:06 +08:00 committed by Teknium
parent 524cbabd89
commit dccf1fb6e0
4 changed files with 79 additions and 2 deletions

View file

@ -10,6 +10,8 @@ The fix: gateway/run.py wraps each adapter connect() with a safety-net
call to _safe_adapter_disconnect() in the failure branches.
"""
import asyncio
import logging
from unittest.mock import AsyncMock, MagicMock
import pytest
@ -57,3 +59,21 @@ async def test_safe_disconnect_handles_none_platform(bare_runner):
await bare_runner._safe_adapter_disconnect(adapter, None)
adapter.disconnect.assert_awaited_once()
@pytest.mark.asyncio
async def test_safe_disconnect_times_out_and_continues(bare_runner, monkeypatch, caplog):
"""A wedged adapter disconnect must not block gateway shutdown."""
monkeypatch.setenv("HERMES_GATEWAY_ADAPTER_DISCONNECT_TIMEOUT", "0.001")
adapter = MagicMock()
async def hang():
await asyncio.sleep(60)
adapter.disconnect = AsyncMock(side_effect=hang)
with caplog.at_level(logging.WARNING, logger="gateway.run"):
await bare_runner._safe_adapter_disconnect(adapter, Platform.FEISHU)
adapter.disconnect.assert_awaited_once()
assert "Timed out after 0.0s while disconnecting feishu adapter" in caplog.text