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)
示例#2
0
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)