Files
sharp-basic/test/NetClient.Test/Tests/NetClientRetryTests.cs
T
2025-12-30 09:17:25 +08:00

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);
}
}