feat(health): core review fixes (async writer, gRPC cancellation, validation, configurable retry-after)
This commit is contained in:
@@ -14,14 +14,15 @@ public sealed class GrpcDependencyHealthCheckTests
|
||||
{
|
||||
private static readonly GrpcChannel Channel = GrpcChannel.ForAddress("http://localhost");
|
||||
|
||||
private static async Task<HealthCheckResult> RunAsync(GrpcDependencyOptions options)
|
||||
private static async Task<HealthCheckResult> RunAsync(
|
||||
GrpcDependencyOptions options, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var check = new GrpcDependencyHealthCheck(Channel, options);
|
||||
var context = new HealthCheckContext
|
||||
{
|
||||
Registration = new HealthCheckRegistration("grpc-dep", check, HealthStatus.Unhealthy, tags: null),
|
||||
};
|
||||
return await check.CheckHealthAsync(context, CancellationToken.None);
|
||||
return await check.CheckHealthAsync(context, cancellationToken);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -69,4 +70,38 @@ public sealed class GrpcDependencyHealthCheckTests
|
||||
Assert.Equal(HealthStatus.Unhealthy, result.Status);
|
||||
Assert.Contains("mxaccessgw worker", result.Description);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ProbeExceedsTimeout_Unhealthy()
|
||||
{
|
||||
var result = await RunAsync(new GrpcDependencyOptions
|
||||
{
|
||||
Timeout = TimeSpan.FromMilliseconds(50),
|
||||
Probe = static async (_, ct) =>
|
||||
{
|
||||
await Task.Delay(Timeout.Infinite, ct);
|
||||
return true;
|
||||
},
|
||||
});
|
||||
|
||||
Assert.Equal(HealthStatus.Unhealthy, result.Status);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ExternalCancellation_Throws()
|
||||
{
|
||||
using var cts = new CancellationTokenSource();
|
||||
await cts.CancelAsync();
|
||||
|
||||
await Assert.ThrowsAnyAsync<OperationCanceledException>(() => RunAsync(
|
||||
new GrpcDependencyOptions
|
||||
{
|
||||
Probe = static async (_, ct) =>
|
||||
{
|
||||
await Task.Delay(Timeout.Infinite, ct);
|
||||
return true;
|
||||
},
|
||||
},
|
||||
cts.Token));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user