Files
nexus/backend-tests/HealthControllerTests.cs
T
AzuTear cd8c78d165
CI - Build & Test / Backend (.NET) (push) Successful in 45s
CI - Build & Test / Backend integration (PostgreSQL/Toxiproxy) (push) Failing after 1m0s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 2m49s
CI - Build & Test / Security Check (push) Successful in 7s
CI - Build & Test / Deploy Nexus (push) Has been skipped
feat(stability): unify readiness and recovery
2026-08-01 01:21:33 +02:00

70 lines
2.4 KiB
C#

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Nexus.Api.Controllers;
using Xunit;
namespace Nexus.Api.Tests;
public sealed class HealthControllerTests
{
[Fact]
public async Task Ready_Returns200_WhenRequiredChecksAreHealthy()
{
using var provider = BuildProvider(HealthCheckResult.Healthy());
var controller = new HealthController(
runtime: null!,
provider.GetRequiredService<HealthCheckService>());
var result = await controller.Ready(CancellationToken.None);
Assert.Equal(StatusCodes.Status200OK, Assert.IsAssignableFrom<IStatusCodeHttpResult>(result).StatusCode);
}
[Fact]
public async Task Ready_Returns503_WhenRequiredCheckIsUnhealthy()
{
using var provider = BuildProvider(HealthCheckResult.Unhealthy("database unavailable"));
var controller = new HealthController(
runtime: null!,
provider.GetRequiredService<HealthCheckService>());
var result = await controller.Ready(CancellationToken.None);
Assert.Equal(
StatusCodes.Status503ServiceUnavailable,
Assert.IsAssignableFrom<IStatusCodeHttpResult>(result).StatusCode);
}
[Fact]
public async Task Ready_Returns503_WhenPostgreSqlCannotBeReached()
{
var services = new ServiceCollection();
services.AddLogging();
services.AddHealthChecks()
.AddNpgSql(
"Host=127.0.0.1;Port=1;Database=nexus;Username=nexus;Password=unused;Timeout=1;Command Timeout=1",
name: "postgresql",
tags: ["database", "ready"]);
using var provider = services.BuildServiceProvider();
var controller = new HealthController(
runtime: null!,
provider.GetRequiredService<HealthCheckService>());
var result = await controller.Ready(CancellationToken.None);
Assert.Equal(
StatusCodes.Status503ServiceUnavailable,
Assert.IsAssignableFrom<IStatusCodeHttpResult>(result).StatusCode);
}
private static ServiceProvider BuildProvider(HealthCheckResult result)
{
var services = new ServiceCollection();
services.AddLogging();
services.AddHealthChecks()
.AddCheck("required", () => result, tags: ["ready"]);
return services.BuildServiceProvider();
}
}