Beispiel #1
0
        public void SetUp()
        {
            _options = new HibpClientOptions
            {
                ApiKey = ApiKeys.Valid,
                RetryOnRateLimitExceeded = true
            };

            _sut = new HibpClient(new HttpClient(), _options);
        }
Beispiel #2
0
            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));
            }
Beispiel #3
0
            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));
            }
Beispiel #4
0
        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);
        }