diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/shared_cache.py b/sdk/identity/azure-identity/azure/identity/_credentials/shared_cache.py index 8bac28dc809f..943fec26efed 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/shared_cache.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/shared_cache.py @@ -53,7 +53,12 @@ def close(self) -> None: @log_get_token("SharedTokenCacheCredential") def get_token( - self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None, **kwargs: Any + self, + *scopes: str, + claims: Optional[str] = None, + tenant_id: Optional[str] = None, + enable_cae: bool = False, + **kwargs: Any ) -> AccessToken: """Get an access token for `scopes` from the shared cache. @@ -77,7 +82,7 @@ def get_token( :raises ~azure.core.exceptions.ClientAuthenticationError: authentication failed. The error's ``message`` attribute gives a reason. """ - return self._credential.get_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + return self._credential.get_token(*scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs) @staticmethod def supported() -> bool: @@ -102,7 +107,12 @@ def __exit__(self, *args): self._client.__exit__(*args) def get_token( - self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None, **kwargs: Any + self, + *scopes: str, + claims: Optional[str] = None, + tenant_id: Optional[str] = None, + enable_cae: bool = False, + **kwargs: Any ) -> AccessToken: if not scopes: raise ValueError("'get_token' requires at least one scope") @@ -110,7 +120,7 @@ def get_token( if not self._client_initialized: self._initialize_client() - is_cae = bool(kwargs.get("enable_cae", False)) + is_cae = enable_cae token_cache = self._cae_cache if is_cae else self._cache # Try to load the cache if it is None. diff --git a/sdk/identity/azure-identity/azure/identity/_internal/get_token_mixin.py b/sdk/identity/azure-identity/azure/identity/_internal/get_token_mixin.py index a3dc76ce507b..7e14cb55caef 100644 --- a/sdk/identity/azure-identity/azure/identity/_internal/get_token_mixin.py +++ b/sdk/identity/azure-identity/azure/identity/_internal/get_token_mixin.py @@ -54,7 +54,12 @@ def _should_refresh(self, token: AccessToken) -> bool: return True def get_token( - self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None, **kwargs: Any + self, + *scopes: str, + claims: Optional[str] = None, + tenant_id: Optional[str] = None, + enable_cae: bool = False, + **kwargs: Any ) -> AccessToken: """Request an access token for `scopes`. @@ -80,14 +85,20 @@ def get_token( raise ValueError('"get_token" requires at least one scope') try: - token = self._acquire_token_silently(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + token = self._acquire_token_silently( + *scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs + ) if not token: self._last_request_time = int(time.time()) - token = self._request_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + token = self._request_token( + *scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs + ) elif self._should_refresh(token): try: self._last_request_time = int(time.time()) - token = self._request_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + token = self._request_token( + *scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs + ) except Exception: # pylint:disable=broad-except pass _LOGGER.log( diff --git a/sdk/identity/azure-identity/azure/identity/_internal/interactive.py b/sdk/identity/azure-identity/azure/identity/_internal/interactive.py index 85b33c8c551a..c4dd6a08fe34 100644 --- a/sdk/identity/azure-identity/azure/identity/_internal/interactive.py +++ b/sdk/identity/azure-identity/azure/identity/_internal/interactive.py @@ -9,7 +9,7 @@ import json import logging import time -from typing import Any, Optional +from typing import Any, Optional, Iterable from urllib.parse import urlparse from azure.core.credentials import AccessToken @@ -112,7 +112,12 @@ def __init__( super(InteractiveCredential, self).__init__(**kwargs) def get_token( - self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None, **kwargs: Any + self, + *scopes: str, + claims: Optional[str] = None, + tenant_id: Optional[str] = None, + enable_cae: bool = False, + **kwargs: Any ) -> AccessToken: """Request an access token for `scopes`. @@ -142,7 +147,9 @@ def get_token( allow_prompt = kwargs.pop("_allow_prompt", not self._disable_automatic_authentication) try: - token = self._acquire_token_silent(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + token = self._acquire_token_silent( + *scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs + ) _LOGGER.info("%s.get_token succeeded", self.__class__.__name__) return token except Exception as ex: # pylint:disable=broad-except @@ -159,7 +166,7 @@ def get_token( now = int(time.time()) try: - result = self._request_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + result = self._request_token(*scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs) if "access_token" not in result: message = "Authentication failed: {}".format(result.get("error_description") or result.get("error")) response = self._client.get_error_response(result) @@ -179,7 +186,9 @@ def get_token( _LOGGER.info("%s.get_token succeeded", self.__class__.__name__) return AccessToken(result["access_token"], now + int(result["expires_in"])) - def authenticate(self, **kwargs: Any) -> AuthenticationRecord: + def authenticate( + self, *, scopes: Optional[Iterable[str]] = None, claims: Optional[str] = None, **kwargs: Any + ) -> AuthenticationRecord: """Interactively authenticate a user. :keyword Iterable[str] scopes: scopes to request during authentication, such as those provided by @@ -192,7 +201,6 @@ def authenticate(self, **kwargs: Any) -> AuthenticationRecord: attribute gives a reason. """ - scopes = kwargs.pop("scopes", None) if not scopes: if self._authority not in _DEFAULT_AUTHENTICATE_SCOPES: # the credential is configured to use a cloud whose ARM scope we can't determine @@ -202,7 +210,7 @@ def authenticate(self, **kwargs: Any) -> AuthenticationRecord: scopes = _DEFAULT_AUTHENTICATE_SCOPES[self._authority] - _ = self.get_token(*scopes, _allow_prompt=True, **kwargs) + _ = self.get_token(*scopes, _allow_prompt=True, claims=claims, **kwargs) return self._auth_record # type: ignore @wrap_exceptions diff --git a/sdk/identity/azure-identity/azure/identity/aio/_credentials/shared_cache.py b/sdk/identity/azure-identity/azure/identity/aio/_credentials/shared_cache.py index d30304df4ce7..765f56bdf7be 100644 --- a/sdk/identity/azure-identity/azure/identity/aio/_credentials/shared_cache.py +++ b/sdk/identity/azure-identity/azure/identity/aio/_credentials/shared_cache.py @@ -43,7 +43,12 @@ async def close(self) -> None: @log_get_token_async async def get_token( - self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None, **kwargs: Any + self, + *scopes: str, + claims: Optional[str] = None, + tenant_id: Optional[str] = None, + enable_cae: bool = False, + **kwargs: Any ) -> AccessToken: """Get an access token for `scopes` from the shared cache. @@ -74,7 +79,7 @@ async def get_token( if not self._client_initialized: self._initialize_client() - is_cae = bool(kwargs.get("enable_cae", False)) + is_cae = enable_cae token_cache = self._cae_cache if is_cae else self._cache # Try to load the cache if it is None. diff --git a/sdk/identity/azure-identity/azure/identity/aio/_internal/get_token_mixin.py b/sdk/identity/azure-identity/azure/identity/aio/_internal/get_token_mixin.py index 162e6a51da57..58cec3adb273 100644 --- a/sdk/identity/azure-identity/azure/identity/aio/_internal/get_token_mixin.py +++ b/sdk/identity/azure-identity/azure/identity/aio/_internal/get_token_mixin.py @@ -54,7 +54,12 @@ def _should_refresh(self, token: AccessToken) -> bool: return True async def get_token( - self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None, **kwargs: Any + self, + *scopes: str, + claims: Optional[str] = None, + tenant_id: Optional[str] = None, + enable_cae: bool = False, + **kwargs: Any ) -> AccessToken: """Request an access token for `scopes`. @@ -80,14 +85,20 @@ async def get_token( raise ValueError('"get_token" requires at least one scope') try: - token = await self._acquire_token_silently(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + token = await self._acquire_token_silently( + *scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs + ) if not token: self._last_request_time = int(time.time()) - token = await self._request_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + token = await self._request_token( + *scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs + ) elif self._should_refresh(token): try: self._last_request_time = int(time.time()) - token = await self._request_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs) + token = await self._request_token( + *scopes, claims=claims, tenant_id=tenant_id, enable_cae=enable_cae, **kwargs + ) except Exception: # pylint:disable=broad-except pass _LOGGER.log( diff --git a/sdk/identity/azure-identity/tests/test_get_token_mixin.py b/sdk/identity/azure-identity/tests/test_get_token_mixin.py index 0deee7ec8a9d..e3326b8f5cca 100644 --- a/sdk/identity/azure-identity/tests/test_get_token_mixin.py +++ b/sdk/identity/azure-identity/tests/test_get_token_mixin.py @@ -40,8 +40,8 @@ def test_no_cached_token(): credential = MockCredential() token = credential.get_token(SCOPE) - credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, tenant_id=None) - credential.request_token.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) + credential.request_token.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) assert token.token == MockCredential.NEW_TOKEN.token @@ -61,7 +61,7 @@ def test_token_acquisition_failure(): with pytest.raises(Exception): credential.get_token(SCOPE) assert credential.request_token.call_count == i + 1 - credential.request_token.assert_called_with(SCOPE, claims=None, tenant_id=None) + credential.request_token.assert_called_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) def test_expired_token(): @@ -71,8 +71,8 @@ def test_expired_token(): credential = MockCredential(cached_token=AccessToken(CACHED_TOKEN, now - 1)) token = credential.get_token(SCOPE) - credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, tenant_id=None) - credential.request_token.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) + credential.request_token.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) assert token.token == MockCredential.NEW_TOKEN.token @@ -82,7 +82,7 @@ def test_cached_token_outside_refresh_window(): credential = MockCredential(cached_token=AccessToken(CACHED_TOKEN, time.time() + DEFAULT_REFRESH_OFFSET + 1)) token = credential.get_token(SCOPE) - credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) assert credential.request_token.call_count == 0 assert token.token == CACHED_TOKEN @@ -93,8 +93,8 @@ def test_cached_token_within_refresh_window(): credential = MockCredential(cached_token=AccessToken(CACHED_TOKEN, time.time() + DEFAULT_REFRESH_OFFSET - 1)) token = credential.get_token(SCOPE) - credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, tenant_id=None) - credential.request_token.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) + credential.request_token.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) assert token.token == MockCredential.NEW_TOKEN.token @@ -109,5 +109,5 @@ def test_retry_delay(): for i in range(4): token = credential.get_token(SCOPE) assert token.token == CACHED_TOKEN - credential.acquire_token_silently.assert_called_with(SCOPE, claims=None, tenant_id=None) - credential.request_token.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) + credential.request_token.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) diff --git a/sdk/identity/azure-identity/tests/test_get_token_mixin_async.py b/sdk/identity/azure-identity/tests/test_get_token_mixin_async.py index 1b84608dfb30..3db422190714 100644 --- a/sdk/identity/azure-identity/tests/test_get_token_mixin_async.py +++ b/sdk/identity/azure-identity/tests/test_get_token_mixin_async.py @@ -43,8 +43,8 @@ async def test_no_cached_token(): credential = MockCredential() token = await credential.get_token(SCOPE) - credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, tenant_id=None) - credential.request_token.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) + credential.request_token.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) assert token.token == MockCredential.NEW_TOKEN.token @@ -64,7 +64,7 @@ async def test_token_acquisition_failure(): with pytest.raises(Exception): await credential.get_token(SCOPE) assert credential.request_token.call_count == i + 1 - credential.request_token.assert_called_with(SCOPE, claims=None, tenant_id=None) + credential.request_token.assert_called_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) async def test_expired_token(): @@ -74,8 +74,8 @@ async def test_expired_token(): credential = MockCredential(cached_token=AccessToken(CACHED_TOKEN, now - 1)) token = await credential.get_token(SCOPE) - credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, tenant_id=None) - credential.request_token.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) + credential.request_token.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) assert token.token == MockCredential.NEW_TOKEN.token @@ -85,7 +85,7 @@ async def test_cached_token_outside_refresh_window(): credential = MockCredential(cached_token=AccessToken(CACHED_TOKEN, time.time() + DEFAULT_REFRESH_OFFSET + 1)) token = await credential.get_token(SCOPE) - credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) assert credential.request_token.call_count == 0 assert token.token == CACHED_TOKEN @@ -96,8 +96,8 @@ async def test_cached_token_within_refresh_window(): credential = MockCredential(cached_token=AccessToken(CACHED_TOKEN, time.time() + DEFAULT_REFRESH_OFFSET - 1)) token = await credential.get_token(SCOPE) - credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, tenant_id=None) - credential.request_token.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) + credential.request_token.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) assert token.token == MockCredential.NEW_TOKEN.token @@ -112,5 +112,5 @@ async def test_retry_delay(): for i in range(4): token = await credential.get_token(SCOPE) assert token.token == CACHED_TOKEN - credential.acquire_token_silently.assert_called_with(SCOPE, claims=None, tenant_id=None) - credential.request_token.assert_called_once_with(SCOPE, claims=None, tenant_id=None) + credential.acquire_token_silently.assert_called_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) + credential.request_token.assert_called_once_with(SCOPE, claims=None, enable_cae=False, tenant_id=None) diff --git a/sdk/identity/azure-identity/tests/test_vscode_credential.py b/sdk/identity/azure-identity/tests/test_vscode_credential.py index 3cc495122afd..a2e5b37e5925 100644 --- a/sdk/identity/azure-identity/tests/test_vscode_credential.py +++ b/sdk/identity/azure-identity/tests/test_vscode_credential.py @@ -25,12 +25,14 @@ GET_USER_SETTINGS = VisualStudioCodeCredential.__module__ + ".get_user_settings" +@pytest.mark.skip(reason="VS code credential is disabled") def get_credential(user_settings=None, **kwargs): # defaulting to empty user settings ensures tests work when real user settings are available with mock.patch(GET_USER_SETTINGS, lambda: user_settings or {}): return VisualStudioCodeCredential(**kwargs) +@pytest.mark.skip(reason="VS code credential is disabled") def test_tenant_id(): def get_transport(expected_tenant): return validating_transport( @@ -63,6 +65,7 @@ def get_transport(expected_tenant): assert transport.send.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") def test_tenant_id_validation(): """The credential should raise ValueError when given an invalid tenant_id""" @@ -76,6 +79,7 @@ def test_tenant_id_validation(): get_credential(tenant_id=tenant) +@pytest.mark.skip(reason="VS code credential is disabled") def test_no_scopes(): """The credential should raise ValueError when get_token is called with no scopes""" @@ -84,6 +88,7 @@ def test_no_scopes(): credential.get_token() +@pytest.mark.skip(reason="VS code credential is disabled") def test_policies_configurable(): policy = mock.Mock(spec_set=SansIOHTTPPolicy, on_request=mock.Mock()) @@ -100,6 +105,7 @@ def send(*_, **kwargs): assert policy.on_request.called +@pytest.mark.skip(reason="VS code credential is disabled") def test_user_agent(): transport = validating_transport( requests=[Request(required_headers={"User-Agent": USER_AGENT})], @@ -110,6 +116,7 @@ def test_user_agent(): credential.get_token("scope") +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.parametrize("authority", ("localhost", "https://localhost")) def test_request_url(authority): """the credential should accept an authority, with or without scheme, as an argument or environment variable""" @@ -141,6 +148,7 @@ def mock_send(request, **kwargs): assert token.token == access_token +@pytest.mark.skip(reason="VS code credential is disabled") def test_credential_unavailable_error(): credential = get_credential() with mock.patch(GET_REFRESH_TOKEN, return_value=None): @@ -148,6 +156,7 @@ def test_credential_unavailable_error(): credential.get_token("scope") +@pytest.mark.skip(reason="VS code credential is disabled") def test_redeem_token(): expected_token = AccessToken("token", 42) expected_value = "value" @@ -166,6 +175,7 @@ def test_redeem_token(): assert mock_client.obtain_token_by_refresh_token.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") def test_cache_refresh_token(): expected_token = AccessToken("token", 42) @@ -184,6 +194,7 @@ def test_cache_refresh_token(): assert mock_get_credentials.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") def test_no_obtain_token_if_cached(): expected_token = AccessToken("token", time.time() + 3600) @@ -204,6 +215,7 @@ def test_no_obtain_token_if_cached(): assert token.expires_on == expected_token.expires_on +@pytest.mark.skip(reason="VS code credential is disabled") def test_native_adapter(): """Exercise the native adapter for the current OS""" @@ -221,6 +233,7 @@ def test_native_adapter(): get_refresh_token("AzureCloud") +@pytest.mark.skip(reason="VS code credential is disabled") def test_adfs(): """The credential should raise CredentialUnavailableError when configured for ADFS""" @@ -230,6 +243,7 @@ def test_adfs(): assert "adfs" in ex.value.message.lower() +@pytest.mark.skip(reason="VS code credential is disabled") def test_custom_cloud_no_authority(): """The credential is unavailable when VS Code is configured to use a custom cloud with no known authority""" @@ -239,6 +253,7 @@ def test_custom_cloud_no_authority(): credential.get_token("scope") +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.parametrize( "cloud,authority", ( @@ -267,6 +282,7 @@ def test_reads_cloud_settings(cloud, authority): assert transport.send.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") def test_no_user_settings(): """the credential should default to Public Cloud and "organizations" tenant when it can't read VS Code settings""" @@ -282,6 +298,7 @@ def test_no_user_settings(): assert transport.send.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") def test_multitenant_authentication(): first_tenant = "first-tenant" first_token = "***" @@ -317,6 +334,7 @@ def send(request, **kwargs): assert token.token == first_token +@pytest.mark.skip(reason="VS code credential is disabled") def test_multitenant_authentication_not_allowed(): expected_tenant = "expected-tenant" expected_token = "***" diff --git a/sdk/identity/azure-identity/tests/test_vscode_credential_async.py b/sdk/identity/azure-identity/tests/test_vscode_credential_async.py index c6bb7c8eef20..bca4a4c992b9 100644 --- a/sdk/identity/azure-identity/tests/test_vscode_credential_async.py +++ b/sdk/identity/azure-identity/tests/test_vscode_credential_async.py @@ -26,6 +26,7 @@ def get_credential(user_settings=None, **kwargs): return VisualStudioCodeCredential(**kwargs) +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_tenant_id(): def get_transport(expected_tenant): @@ -59,6 +60,7 @@ def get_transport(expected_tenant): assert transport.send.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") def test_tenant_id_validation(): """The credential should raise ValueError when given an invalid tenant_id""" @@ -72,6 +74,7 @@ def test_tenant_id_validation(): get_credential(tenant_id=tenant) +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_no_scopes(): """The credential should raise ValueError when get_token is called with no scopes""" @@ -81,6 +84,7 @@ async def test_no_scopes(): await credential.get_token() +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_policies_configurable(): policy = mock.Mock(spec_set=SansIOHTTPPolicy, on_request=mock.Mock()) @@ -98,6 +102,7 @@ async def send(*_, **kwargs): assert policy.on_request.called +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_user_agent(): transport = async_validating_transport( @@ -109,6 +114,7 @@ async def test_user_agent(): await credential.get_token("scope") +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio @pytest.mark.parametrize("authority", ("localhost", "https://localhost")) async def test_request_url(authority): @@ -141,6 +147,7 @@ async def mock_send(request, **kwargs): assert token.token == access_token +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_credential_unavailable_error(): credential = get_credential() @@ -149,6 +156,7 @@ async def test_credential_unavailable_error(): await credential.get_token("scope") +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_redeem_token(): expected_token = AccessToken("token", 42) @@ -184,6 +192,7 @@ async def test_cache_refresh_token(): assert mock_get_credentials.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_no_obtain_token_if_cached(): expected_token = AccessToken("token", time.time() + 3600) @@ -206,6 +215,7 @@ async def test_no_obtain_token_if_cached(): assert token.expires_on == expected_token.expires_on +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_adfs(): """The credential should raise CredentialUnavailableError when configured for ADFS""" @@ -216,6 +226,7 @@ async def test_adfs(): assert "adfs" in ex.value.message.lower() +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_custom_cloud_no_authority(): """The credential is unavailable when VS Code is configured to use a cloud with no known authority""" @@ -226,6 +237,7 @@ async def test_custom_cloud_no_authority(): await credential.get_token("scope") +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio @pytest.mark.parametrize( "cloud,authority", @@ -254,6 +266,7 @@ async def test_reads_cloud_settings(cloud, authority): assert transport.send.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_no_user_settings(): """the credential should default to Public Cloud and "organizations" tenant when it can't read VS Code settings""" @@ -270,6 +283,7 @@ async def test_no_user_settings(): assert transport.send.call_count == 1 +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_multitenant_authentication(): first_tenant = "first-tenant" @@ -306,6 +320,7 @@ async def send(request, **kwargs): assert token.token == first_token +@pytest.mark.skip(reason="VS code credential is disabled") @pytest.mark.asyncio async def test_multitenant_authentication_not_allowed(): expected_tenant = "expected-tenant"