Skip to content

Commit 04b8f53

Browse files
authored
Merge pull request #49 from sacha-development-stuff/revert-48-codex/fix-coverage-threshold-failure-1ymhhc
Revert "Add branch coverage tests for OAuth metadata and refresh handling"
2 parents 27fb312 + 72cca2c commit 04b8f53

File tree

2 files changed

+1
-145
lines changed

2 files changed

+1
-145
lines changed

tests/unit/client/test_oauth2_providers.py

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -829,104 +829,6 @@ async def post(self, url: str, *, data: dict[str, str], headers: dict[str, str])
829829
assert provider.client_metadata.scope is None
830830

831831

832-
@pytest.mark.anyio
833-
async def test_token_exchange_request_token_stops_on_non_authoritative_response(
834-
monkeypatch: pytest.MonkeyPatch,
835-
) -> None:
836-
storage = InMemoryStorage()
837-
client_metadata = OAuthClientMetadata(redirect_uris=_redirect_uris(), scope="alpha")
838-
839-
provider = TokenExchangeProvider(
840-
"https://api.example.com/service",
841-
client_metadata,
842-
storage,
843-
subject_token_supplier=AsyncMock(return_value="subject-token"),
844-
)
845-
846-
metadata_responses = [
847-
_make_response(204),
848-
_make_response(200, json_data=_metadata_json()),
849-
]
850-
registration_response = _make_response(200, json_data=_registration_json())
851-
token_response = _make_response(200, json_data=_token_json("alpha"))
852-
853-
class RecordingAsyncClient(DummyAsyncClient):
854-
def __init__(self, *args: object, **kwargs: object) -> None:
855-
super().__init__(*args, **kwargs)
856-
self.send_calls = 0
857-
858-
async def send(self, request: httpx.Request) -> httpx.Response:
859-
self.send_calls += 1
860-
return await super().send(request)
861-
862-
recording_client = RecordingAsyncClient(send_responses=list(metadata_responses))
863-
clients = [
864-
recording_client,
865-
DummyAsyncClient(send_responses=[registration_response]),
866-
DummyAsyncClient(post_responses=[token_response]),
867-
]
868-
869-
monkeypatch.setattr("mcp.client.auth.oauth2.httpx.AsyncClient", AsyncClientFactory(clients))
870-
871-
await provider._request_token()
872-
873-
assert recording_client.send_calls == 1
874-
assert storage.tokens is not None
875-
assert storage.tokens.scope == "alpha"
876-
assert provider._metadata is None
877-
878-
879-
@pytest.mark.anyio
880-
async def test_token_exchange_request_token_retries_after_invalid_metadata(
881-
monkeypatch: pytest.MonkeyPatch,
882-
) -> None:
883-
storage = InMemoryStorage()
884-
client_metadata = OAuthClientMetadata(redirect_uris=_redirect_uris(), scope="alpha")
885-
886-
provider = TokenExchangeProvider(
887-
"https://api.example.com/service",
888-
client_metadata,
889-
storage,
890-
subject_token_supplier=AsyncMock(return_value="subject-token"),
891-
)
892-
893-
invalid_metadata = _metadata_json()
894-
invalid_metadata.pop("token_endpoint")
895-
896-
metadata_responses = [
897-
_make_response(200, json_data=invalid_metadata),
898-
_make_response(200, json_data=_metadata_json()),
899-
]
900-
registration_response = _make_response(200, json_data=_registration_json())
901-
token_response = _make_response(200, json_data=_token_json("alpha"))
902-
903-
class RecordingAsyncClient(DummyAsyncClient):
904-
def __init__(self, *args: object, **kwargs: object) -> None:
905-
super().__init__(*args, **kwargs)
906-
self.send_calls = 0
907-
908-
async def send(self, request: httpx.Request) -> httpx.Response:
909-
self.send_calls += 1
910-
return await super().send(request)
911-
912-
recording_client = RecordingAsyncClient(send_responses=list(metadata_responses))
913-
clients = [
914-
recording_client,
915-
DummyAsyncClient(send_responses=[registration_response]),
916-
DummyAsyncClient(post_responses=[token_response]),
917-
]
918-
919-
monkeypatch.setattr("mcp.client.auth.oauth2.httpx.AsyncClient", AsyncClientFactory(clients))
920-
921-
await provider._request_token()
922-
923-
assert recording_client.send_calls == 2
924-
assert storage.tokens is not None
925-
assert storage.tokens.scope == "alpha"
926-
assert provider._metadata is not None
927-
assert str(provider._metadata.token_endpoint) == _metadata_json()["token_endpoint"]
928-
929-
930832
@pytest.mark.anyio
931833
async def test_token_exchange_request_token_raises_on_failure(monkeypatch: pytest.MonkeyPatch) -> None:
932834
storage = InMemoryStorage()

tests/unit/server/auth/test_token_handler.py

Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import json
44
import time
55
from collections.abc import Mapping
6-
from types import MethodType, SimpleNamespace
6+
from types import SimpleNamespace
77
from typing import Any, cast
88

99
import pytest
@@ -12,7 +12,6 @@
1212
from mcp.server.auth.handlers.token import (
1313
AuthorizationCodeRequest,
1414
ClientCredentialsRequest,
15-
RefreshTokenRequest,
1615
TokenErrorResponse,
1716
TokenHandler,
1817
TokenSuccessResponse,
@@ -288,51 +287,6 @@ async def test_handle_route_refresh_token_invalid_scope() -> None:
288287
}
289288

290289

291-
@pytest.mark.anyio
292-
async def test_handle_route_refresh_token_dispatches_to_handler(
293-
monkeypatch: pytest.MonkeyPatch,
294-
) -> None:
295-
provider = RefreshTokenProvider()
296-
client_info = OAuthClientInformationFull(
297-
client_id="client",
298-
grant_types=["refresh_token"],
299-
scope="alpha",
300-
)
301-
handler = TokenHandler(
302-
provider=cast(OAuthAuthorizationServerProvider[Any, Any, Any], provider),
303-
client_authenticator=cast(ClientAuthenticator, DummyAuthenticator(client_info)),
304-
)
305-
306-
captured_requests: list[RefreshTokenRequest] = []
307-
308-
async def fake_handle_refresh_token(
309-
self: TokenHandler,
310-
client: OAuthClientInformationFull,
311-
token_request: RefreshTokenRequest,
312-
) -> TokenSuccessResponse:
313-
captured_requests.append(token_request)
314-
return TokenSuccessResponse(root=OAuthToken(access_token="dispatched-token"))
315-
316-
monkeypatch.setattr(
317-
handler,
318-
"_handle_refresh_token",
319-
MethodType(fake_handle_refresh_token, handler),
320-
)
321-
322-
request_data = {
323-
"grant_type": "refresh_token",
324-
"refresh_token": "refresh-token",
325-
"client_id": "client",
326-
"client_secret": "secret",
327-
}
328-
329-
response = await handler.handle(cast(Request, DummyRequest(request_data)))
330-
331-
assert response.status_code == 200
332-
assert captured_requests
333-
assert isinstance(captured_requests[0], RefreshTokenRequest)
334-
335-
336290
@pytest.mark.anyio
337291
async def test_handle_route_token_exchange_branch() -> None:
338292
provider = TokenExchangeProviderStub()

0 commit comments

Comments
 (0)