mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-05 02:41:56 +00:00
fix: make OIDC Google tests use context-manager mocks to prevent real API calls
- Use with patch(): so mocks are active when get_secret() runs - Patch HTTPHandler in main as fallback to avoid real httpx usage - Fixes failures in CI (ConnectError / Google OIDC provider failed) when decorator-based patches did not apply reliably
This commit is contained in:
parent
9f26a1b494
commit
39dc32bb14
1 changed files with 48 additions and 22 deletions
|
|
@ -46,15 +46,24 @@ def mock_env():
|
|||
yield os.environ
|
||||
|
||||
|
||||
@patch("litellm.secret_managers.main.oidc_cache")
|
||||
@patch("litellm.secret_managers.main._get_oidc_http_handler")
|
||||
@patch("httpx.Client") # Prevent any real HTTP connections
|
||||
def test_oidc_google_success(mock_httpx_client, mock_get_http_handler, mock_oidc_cache):
|
||||
mock_oidc_cache.get_cache.return_value = None
|
||||
mock_handler = MockHTTPHandler(timeout=600.0)
|
||||
mock_get_http_handler.return_value = mock_handler
|
||||
def test_oidc_google_success():
|
||||
"""Test Google OIDC token fetch with mocked handler (no real network calls)."""
|
||||
secret_name = "oidc/google/[invalid url, do not cite]"
|
||||
result = get_secret(secret_name)
|
||||
mock_handler = MockHTTPHandler(timeout=600.0)
|
||||
mock_get_http_handler = Mock(return_value=mock_handler)
|
||||
mock_oidc_cache = Mock()
|
||||
mock_oidc_cache.get_cache.return_value = None
|
||||
|
||||
with patch("litellm.secret_managers.main.oidc_cache", mock_oidc_cache):
|
||||
with patch(
|
||||
"litellm.secret_managers.main._get_oidc_http_handler",
|
||||
mock_get_http_handler,
|
||||
):
|
||||
with patch(
|
||||
"litellm.secret_managers.main.HTTPHandler",
|
||||
side_effect=lambda timeout=None: mock_handler,
|
||||
):
|
||||
result = get_secret(secret_name)
|
||||
|
||||
assert result == "mocked_token"
|
||||
assert mock_handler.last_params == {"audience": "[invalid url, do not cite]"}
|
||||
|
|
@ -63,32 +72,49 @@ def test_oidc_google_success(mock_httpx_client, mock_get_http_handler, mock_oidc
|
|||
)
|
||||
|
||||
|
||||
@patch("litellm.secret_managers.main.oidc_cache")
|
||||
@patch("litellm.secret_managers.main._get_oidc_http_handler")
|
||||
def test_oidc_google_cached(mock_get_http_handler, mock_oidc_cache):
|
||||
def test_oidc_google_cached():
|
||||
"""Test Google OIDC uses cache and does not call HTTP (no real network calls)."""
|
||||
secret_name = "oidc/google/[invalid url, do not cite]"
|
||||
mock_get_http_handler = Mock()
|
||||
mock_oidc_cache = Mock()
|
||||
mock_oidc_cache.get_cache.return_value = "cached_token"
|
||||
|
||||
secret_name = "oidc/google/[invalid url, do not cite]"
|
||||
result = get_secret(secret_name)
|
||||
with patch("litellm.secret_managers.main.oidc_cache", mock_oidc_cache):
|
||||
with patch(
|
||||
"litellm.secret_managers.main._get_oidc_http_handler",
|
||||
mock_get_http_handler,
|
||||
):
|
||||
with patch(
|
||||
"litellm.secret_managers.main.HTTPHandler",
|
||||
Mock(side_effect=AssertionError("HTTPHandler should not be used")),
|
||||
):
|
||||
result = get_secret(secret_name)
|
||||
|
||||
assert result == "cached_token", f"Expected cached token, got {result}"
|
||||
mock_oidc_cache.get_cache.assert_called_with(key=secret_name)
|
||||
# Verify HTTP handler was never called since we had a cached token
|
||||
mock_get_http_handler.assert_not_called()
|
||||
|
||||
|
||||
@patch("litellm.secret_managers.main.oidc_cache")
|
||||
@patch("litellm.secret_managers.main._get_oidc_http_handler")
|
||||
def test_oidc_google_failure(mock_get_http_handler, mock_oidc_cache):
|
||||
def test_oidc_google_failure():
|
||||
"""Test Google OIDC raises when provider returns error (no real network calls)."""
|
||||
secret_name = "oidc/google/https://example.com/api"
|
||||
mock_handler = MockHTTPHandler(timeout=600.0)
|
||||
mock_handler.status_code = 400
|
||||
mock_get_http_handler.return_value = mock_handler
|
||||
mock_get_http_handler = Mock(return_value=mock_handler)
|
||||
mock_oidc_cache = Mock()
|
||||
mock_oidc_cache.get_cache.return_value = None
|
||||
|
||||
secret_name = "oidc/google/https://example.com/api"
|
||||
|
||||
with pytest.raises(ValueError, match="Google OIDC provider failed"):
|
||||
get_secret(secret_name)
|
||||
with patch("litellm.secret_managers.main.oidc_cache", mock_oidc_cache):
|
||||
with patch(
|
||||
"litellm.secret_managers.main._get_oidc_http_handler",
|
||||
mock_get_http_handler,
|
||||
):
|
||||
with patch(
|
||||
"litellm.secret_managers.main.HTTPHandler",
|
||||
side_effect=lambda timeout=None: mock_handler,
|
||||
):
|
||||
with pytest.raises(ValueError, match="Google OIDC provider failed"):
|
||||
get_secret(secret_name)
|
||||
|
||||
|
||||
def test_oidc_circleci_success(monkeypatch):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue