@@ -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
931833async def test_token_exchange_request_token_raises_on_failure (monkeypatch : pytest .MonkeyPatch ) -> None :
932834 storage = InMemoryStorage ()
0 commit comments