From fd0235295b870c21532b77ab7e05ed0a3ba8aae4 Mon Sep 17 00:00:00 2001 From: Tamil Adhavan S K <99407456+adhavan18@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:06:21 +0000 Subject: [PATCH] test(caching): add regression tests for disconnect() when async_redis_conn_pool is None --- .../caching/test_redis_connection_pool.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/test_litellm/caching/test_redis_connection_pool.py b/tests/test_litellm/caching/test_redis_connection_pool.py index c824d3e7a0e..bb288b1f4c9 100644 --- a/tests/test_litellm/caching/test_redis_connection_pool.py +++ b/tests/test_litellm/caching/test_redis_connection_pool.py @@ -128,3 +128,29 @@ async def test_disconnect_idempotent(): await cache.disconnect() await cache.disconnect() # should not raise + + +@pytest.mark.asyncio +async def test_disconnect_when_async_pool_is_none(): + """Regression: disconnect() must not raise AttributeError when + async_redis_conn_pool is None (cluster-mode path sets it to None).""" + cache, mock_sync_client, _ = _make_redis_cache() + # Simulate cluster mode: connection pool is None after construction + cache.async_redis_conn_pool = None + + # Should complete without raising AttributeError + await cache.disconnect() + + # Sync client cleanup is still attempted + mock_sync_client.close.assert_called_once() + + +@pytest.mark.asyncio +async def test_disconnect_with_pool_calls_pool_disconnect(): + """Happy path: when async_redis_conn_pool is present, disconnect() + forwards the call with inuse_connections=True.""" + cache, mock_sync_client, mock_async_pool = _make_redis_cache() + await cache.disconnect() + + mock_async_pool.disconnect.assert_awaited_once_with(inuse_connections=True) + mock_sync_client.close.assert_called_once()