45 lines
1.4 KiB
C#
45 lines
1.4 KiB
C#
using System;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using NetClient.Abstractions;
|
|
using NetClient.DependencyInjection;
|
|
|
|
namespace NetClient.Test.Tests;
|
|
|
|
[TestClass]
|
|
public class NetClientRetryTests
|
|
{
|
|
[TestMethod]
|
|
public async Task Retry_On_429_Then_Succeed()
|
|
{
|
|
var services = new ServiceCollection();
|
|
var attempts = 0;
|
|
|
|
var builder = services.AddNetClient(opt =>
|
|
{
|
|
opt.BaseAddress = new Uri("https://retry.test");
|
|
opt.Retry.Enabled = true;
|
|
opt.Retry.MaxRetryAttempts = 2;
|
|
opt.Retry.FirstDelay = TimeSpan.FromMilliseconds(5);
|
|
opt.Retry.Handle429 = true;
|
|
});
|
|
|
|
builder.ConfigurePrimaryHttpMessageHandler(() => new TestDoubles.TestHttpMessageHandler(req =>
|
|
{
|
|
attempts++;
|
|
if (attempts == 1)
|
|
return Task.FromResult(TestDoubles.TestHttpMessageHandler.Text(HttpStatusCode.TooManyRequests, "busy"));
|
|
return Task.FromResult(TestDoubles.TestHttpMessageHandler.Text(HttpStatusCode.OK, "ok"));
|
|
}));
|
|
|
|
var sp = services.BuildServiceProvider();
|
|
var client = sp.GetRequiredService<IHttpClient>();
|
|
|
|
var result = await client.GetStringAsync("/ping");
|
|
|
|
Assert.AreEqual("ok", result);
|
|
Assert.AreEqual(2, attempts);
|
|
}
|
|
} |