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
70 lines
2.4 KiB
C#
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();
|
|
}
|
|
}
|