From e7fa0b28304d1f5311b4e78e6c33540486e73d40 Mon Sep 17 00:00:00 2001 From: xiangyan99 Date: Mon, 13 Nov 2023 15:53:36 -0800 Subject: [PATCH 1/5] Fix pylint next --- .../azure/identity/_credentials/shared_cache.py | 11 +++++++---- .../azure/identity/_internal/get_token_mixin.py | 2 -- .../azure/identity/_internal/interactive.py | 11 +++++------ .../azure/identity/aio/_credentials/shared_cache.py | 9 +++++++-- .../azure/identity/aio/_internal/get_token_mixin.py | 2 -- 5 files changed, 19 insertions(+), 16 deletions(-) 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..4ecaca4a6a4d 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/shared_cache.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/shared_cache.py @@ -67,8 +67,6 @@ def get_token( :keyword str claims: additional claims required in the token, such as those returned in a resource provider's claims challenge following an authorization failure :keyword str tenant_id: not used by this credential; any value provided will be ignored. - :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested - token. Defaults to False. :return: An access token with the desired scopes. :rtype: ~azure.core.credentials.AccessToken @@ -102,7 +100,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 +113,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..c1e96c986b2b 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 @@ -66,8 +66,6 @@ def get_token( :keyword str claims: additional claims required in the token, such as those returned in a resource provider's claims challenge following an authorization failure. :keyword str tenant_id: optional tenant to include in the token request. - :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested - token. Defaults to False. :return: An access token with the desired scopes. :rtype: ~azure.core.credentials.AccessToken diff --git a/sdk/identity/azure-identity/azure/identity/_internal/interactive.py b/sdk/identity/azure-identity/azure/identity/_internal/interactive.py index 85b33c8c551a..f3b7a30b7c42 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 @@ -124,8 +124,6 @@ def get_token( :keyword str claims: additional claims required in the token, such as those returned in a resource provider's claims challenge following an authorization failure :keyword str tenant_id: optional tenant to include in the token request. - :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested - token. Defaults to False. :return: An access token with the desired scopes. :rtype: ~azure.core.credentials.AccessToken :raises CredentialUnavailableError: the credential is unable to attempt authentication because it lacks @@ -179,7 +177,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 +192,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 +201,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..cbb5a27f7e28 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 @@ -66,8 +66,6 @@ async def get_token( :keyword str claims: additional claims required in the token, such as those returned in a resource provider's claims challenge following an authorization failure. :keyword str tenant_id: optional tenant to include in the token request. - :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested - token. Defaults to False. :return: An access token with the desired scopes. :rtype: ~azure.core.credentials.AccessToken From aae9ccdea2572e9e54b9f96060b0553cf3aa215c Mon Sep 17 00:00:00 2001 From: xiangyan99 Date: Fri, 1 Dec 2023 15:45:36 -0800 Subject: [PATCH 2/5] address feedback --- .../identity/_credentials/shared_cache.py | 11 ++++++++-- .../identity/_internal/get_token_mixin.py | 21 +++++++++++++++---- .../identity/aio/_internal/get_token_mixin.py | 21 +++++++++++++++---- 3 files changed, 43 insertions(+), 10 deletions(-) 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 4ecaca4a6a4d..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. @@ -67,6 +72,8 @@ def get_token( :keyword str claims: additional claims required in the token, such as those returned in a resource provider's claims challenge following an authorization failure :keyword str tenant_id: not used by this credential; any value provided will be ignored. + :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested + token. Defaults to False. :return: An access token with the desired scopes. :rtype: ~azure.core.credentials.AccessToken @@ -75,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: 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 c1e96c986b2b..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`. @@ -66,6 +71,8 @@ def get_token( :keyword str claims: additional claims required in the token, such as those returned in a resource provider's claims challenge following an authorization failure. :keyword str tenant_id: optional tenant to include in the token request. + :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested + token. Defaults to False. :return: An access token with the desired scopes. :rtype: ~azure.core.credentials.AccessToken @@ -78,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/aio/_internal/get_token_mixin.py b/sdk/identity/azure-identity/azure/identity/aio/_internal/get_token_mixin.py index cbb5a27f7e28..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`. @@ -66,6 +71,8 @@ async def get_token( :keyword str claims: additional claims required in the token, such as those returned in a resource provider's claims challenge following an authorization failure. :keyword str tenant_id: optional tenant to include in the token request. + :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested + token. Defaults to False. :return: An access token with the desired scopes. :rtype: ~azure.core.credentials.AccessToken @@ -78,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( From 43f19e0cf2136c2ac98552de0621c872c8ecf989 Mon Sep 17 00:00:00 2001 From: xiangyan99 Date: Fri, 1 Dec 2023 15:49:19 -0800 Subject: [PATCH 3/5] update --- .../azure/identity/_internal/interactive.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sdk/identity/azure-identity/azure/identity/_internal/interactive.py b/sdk/identity/azure-identity/azure/identity/_internal/interactive.py index f3b7a30b7c42..c4dd6a08fe34 100644 --- a/sdk/identity/azure-identity/azure/identity/_internal/interactive.py +++ b/sdk/identity/azure-identity/azure/identity/_internal/interactive.py @@ -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`. @@ -124,6 +129,8 @@ def get_token( :keyword str claims: additional claims required in the token, such as those returned in a resource provider's claims challenge following an authorization failure :keyword str tenant_id: optional tenant to include in the token request. + :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested + token. Defaults to False. :return: An access token with the desired scopes. :rtype: ~azure.core.credentials.AccessToken :raises CredentialUnavailableError: the credential is unable to attempt authentication because it lacks @@ -140,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 @@ -157,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) From 4e87b2991f70f4eef94f6e265c2f8c42b0a3e035 Mon Sep 17 00:00:00 2001 From: xiangyan99 Date: Fri, 1 Dec 2023 16:04:02 -0800 Subject: [PATCH 4/5] update --- .../tests/test_get_token_mixin.py | 20 +++++++++---------- .../tests/test_get_token_mixin_async.py | 20 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) 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) From 88df026cde3af9bc22be811294755d995fd56e07 Mon Sep 17 00:00:00 2001 From: xiangyan99 Date: Fri, 1 Dec 2023 16:29:00 -0800 Subject: [PATCH 5/5] disable vscodecred tests --- .../tests/test_vscode_credential.py | 18 ++++++++++++++++++ .../tests/test_vscode_credential_async.py | 15 +++++++++++++++ 2 files changed, 33 insertions(+) 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"