def _configure( self, **kwargs: Any ) -> None: self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) self.authentication_policy = kwargs.get('authentication_policy') if self.credential and not self.authentication_policy: self.authentication_policy = AsyncARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs)
async def test_claims_challenge(): """AsyncAsyncARMChallengeAuthenticationPolicy should pass claims from an authentication challenge to its credential""" first_token = AccessToken("first", int(time.time()) + 3600) second_token = AccessToken("second", int(time.time()) + 3600) tokens = (t for t in (first_token, second_token)) expected_claims = '{"access_token": {"essential": "true"}' expected_scope = "scope" challenge = 'Bearer authorization_uri="https://localhost", error=".", error_description=".", claims="{}"'.format( base64.b64encode(expected_claims.encode()).decode()) responses = (r for r in ( Mock(status_code=401, headers={"WWW-Authenticate": challenge}), Mock(status_code=200))) async def send(request): res = next(responses) if res.status_code == 401: expected_token = first_token.token else: expected_token = second_token.token assert request.headers["Authorization"] == "Bearer " + expected_token return res async def get_token(*scopes, **kwargs): assert scopes == (expected_scope, ) return next(tokens) credential = Mock(get_token=Mock(wraps=get_token)) transport = Mock(send=Mock(wraps=send)) policies = [ AsyncARMChallengeAuthenticationPolicy(credential, expected_scope) ] pipeline = AsyncPipeline(transport=transport, policies=policies) response = await pipeline.run(HttpRequest("GET", "https://localhost")) assert response.http_response.status_code == 200 assert transport.send.call_count == 2 assert credential.get_token.call_count == 2 credential.get_token.assert_called_with(expected_scope, claims=expected_claims) with pytest.raises(StopIteration): next(tokens) with pytest.raises(StopIteration): next(responses)