def test_get_queue_client_expired_token(self): """ Exception handler should deal with a bad token by clearing cache and retrying. So if we provide a bad token followed by a real one in our mock, we expect it to end up getting the real token. """ real_token = StorageUtilities.get_storage_token(self.session) with patch('c7n_azure.storage_utils.QueueService.create_queue' ) as create_mock: with patch( 'c7n_azure.storage_utils.StorageUtilities.get_storage_token' ) as token_mock: error = AzureHttpError('', 403) error.error_code = 'AuthenticationFailed' # Two side effects: one with a bad token and an error, # and one with a good token and no error create_mock.side_effect = [error, None] token_mock.side_effect = [TokenCredential('fake'), real_token] url = "https://fake.queue.core.windows.net/testcc" queue_service, queue_name = \ StorageUtilities.get_queue_client_by_uri(url, self.session) # We end up with the real token (after a retry) self.assertEqual(real_token, queue_service.authentication)
def _http_error_handler(http_error): ''' Simple error handler for azure.''' message = str(http_error) error_code = None if 'x-ms-error-code' in http_error.respheader: error_code = http_error.respheader['x-ms-error-code'] message += ' ErrorCode: ' + error_code if http_error.respbody is not None: message += '\n' + http_error.respbody.decode('utf-8-sig') ex = AzureHttpError(message, http_error.status) ex.error_code = error_code raise ex