def update_token(self):
     try:
         self.session.fetch_token(token_url=self.token_url,
                                  auth=self.auth, timeout=self.request_timeout)
         self.token_cache.add_token(self.grant_client_id, self.token_url, self.session.token)
     except OAuth2Error as oauth2_error:
         raise error.AuthorisationError(str(oauth2_error.args[0]), cause=oauth2_error)
    def test_request_given_server_returns_an_authorisation_error_fetching_the_token_then_error_is_not_retried(
            self):

        mock_auth = Mock()
        mock_session = Mock()
        mock_session.request.side_effect = error.AuthorisationError(
            'Auth error')

        http_executor = http.HttpExecutor(mock_auth,
                                          session=mock_session,
                                          backoff_strategy={
                                              'interval': 0,
                                              'max_tries': 3
                                          })

        with pytest.raises(error.AuthorisationError):
            http_executor.request("GET", "mock://test.com")

        mock_session.request.assert_called_once_with(
            'GET',
            'mock://test.com',
            allow_redirects=False,
            data=None,
            headers={
                'User-Agent': mock.ANY,
                'Content-Type': 'application/vnd.piksel+json',
                'Accept': 'application/vnd.piksel+json',
                'X-Correlation-ID': None
            },
            params=None,
            timeout=240)
    def test_request_given_server_returns_an_authorisation_error_then_fetch_token_does_not_count_as_retry(
            self):

        json_response = 'Error getting resource'

        mock_auth = Mock()
        mock_session = Mock()
        mock_session.request.side_effect = [
            error.AuthorisationError('Auth error'), {
                'text': json_response,
                'status_code': 500
            }, {
                'text': json_response,
                'status_code': 200
            }
        ]

        http_executor = http.HttpExecutor(mock_auth,
                                          session=mock_session,
                                          backoff_strategy={
                                              'interval': 0,
                                              'max_tries': 1
                                          })

        with pytest.raises(error.AuthorisationError) as e:
            http_executor.request("GET", "mock://test.com")

        assert_that(e.value.args[0], is_('Auth error'))

        mock_session.request.assert_called_once_with(
            'GET',
            'mock://test.com',
            allow_redirects=False,
            data=None,
            headers={
                'User-Agent': mock.ANY,
                'Content-Type': 'application/vnd.piksel+json',
                'Accept': 'application/vnd.piksel+json',
                'X-Correlation-ID': None
            },
            params=None,
            timeout=240)