@@ -531,6 +531,24 @@ def test_resolve_token_azure_ad_network_error_returns_none(self, monkeypatch):
531531 side_effect = urllib .error .URLError ("connection refused" )):
532532 assert AzureDevOpsAuth ().resolve_token (entry ) is None
533533
534+ def test_resolve_token_azure_ad_invalid_utf8_returns_none (self , monkeypatch ):
535+ """azure-ad returns None when the token response is not valid UTF-8."""
536+ from unittest .mock import MagicMock , patch
537+ monkeypatch .setenv ("MY_SECRET" , "secret-value" )
538+ entry = AuthConfigEntry (
539+ hosts = ("dev.azure.com" ,), provider = "azure-devops" , auth = "azure-ad" ,
540+ tenant_id = "tid" , client_id = "cid" , client_secret_env = "MY_SECRET" ,
541+ )
542+ mock_resp = MagicMock ()
543+ mock_resp .read .side_effect = io .BytesIO (b"\xff " ).read
544+ mock_resp .__enter__ = lambda s : s
545+ mock_resp .__exit__ = MagicMock (return_value = False )
546+ mock_opener = MagicMock ()
547+ mock_opener .open .return_value = mock_resp
548+
549+ with patch ("urllib.request.build_opener" , return_value = mock_opener ):
550+ assert AzureDevOpsAuth ().resolve_token (entry ) is None
551+
534552
535553# ---------------------------------------------------------------------------
536554# open_url / build_request — positive tests
0 commit comments