public void SetUp() { _options = new HibpClientOptions { ApiKey = ApiKeys.Valid, RetryOnRateLimitExceeded = true }; _sut = new HibpClient(new HttpClient(), _options); }
public void WhenRateLimitExceeded_AndRetryDisabled_ThenThrowException() { var options = new HibpClientOptions { RetryOnRateLimitExceeded = false }; var sut = new HibpClient(new HttpClient(new Return429RateLimitExceededResponseHandler()), options); Assert.ThrowsAsync <HibpClientException>(() => _ = sut.GetAccountBreachesAsync(EmailAddress)); }
public async Task WhenRateLimitExceededOnlyOnFirstRequest_AndRetryEnabled_ThenReturnOkResponse() { var options = new HibpClientOptions { RetryOnRateLimitExceeded = true }; var sut = new HibpClient(new HttpClient(new Return429RateLimitExceededResponseHandler()), options); var result = await sut.GetAccountBreachesAsync(EmailAddress); Assert.That(result.Count(), Is.EqualTo(3)); }
public static async Task <HttpResponseMessage> ApiGetAsync(this HttpClient source, Uri uri, HibpClientOptions options, CancellationToken cancellationToken) { var requestFactory = new HttpRequestMessageFactory(options.ApiKey); var response = await source.SendAsync(requestFactory.CreateGet(uri), cancellationToken); if (options.RetryOnRateLimitExceeded && response.IsRateLimitedExceeded()) { var rateLimitResponse = await response.DeserializeAsync <ApiRateLimitExceededResponse>(); var seconds = rateLimitResponse.GetRetrySeconds(); await Task.Delay(TimeSpan.FromSeconds(seconds), cancellationToken); response = await source.SendAsync(requestFactory.CreateGet(uri), cancellationToken); } return(response); }