chore: add hrynco common library solution
- add the standalone HrynCo.Common solution and projects - include the shared common library source and tests - add package metadata and a repo gitignore
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
namespace HrynCo.Common.Tests;
|
||||
|
||||
using HrynCo.Common.HealthChecks;
|
||||
using HrynCo.Common.HealthChecks.Defaults;
|
||||
using HrynCo.Common.HealthChecks.Interfaces;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
||||
using Xunit;
|
||||
|
||||
public sealed class HealthChecksTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task CompositeHealthCheck_ShouldUseConfigurationCheckWhenConfiguredForConfigOnly()
|
||||
{
|
||||
var configCheck = new FakeConfigurationCheck();
|
||||
var serviceCheck = new FakeServiceHealthCheck();
|
||||
var healthCheck = new CompositeHealthCheck(configCheck, serviceCheck, configOnly: true);
|
||||
|
||||
HealthCheckResult result = await healthCheck.CheckHealthAsync(new HealthCheckContext(), default);
|
||||
|
||||
result.Status.Should().Be(HealthStatus.Healthy);
|
||||
configCheck.Called.Should().BeTrue();
|
||||
serviceCheck.Called.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CompositeHealthCheck_ShouldUseServiceCheckWhenNotConfigOnly()
|
||||
{
|
||||
var configCheck = new FakeConfigurationCheck();
|
||||
var serviceCheck = new FakeServiceHealthCheck();
|
||||
var healthCheck = new CompositeHealthCheck(configCheck, serviceCheck, configOnly: false);
|
||||
|
||||
HealthCheckResult result = await healthCheck.CheckHealthAsync(new HealthCheckContext(), default);
|
||||
|
||||
result.Status.Should().Be(HealthStatus.Healthy);
|
||||
configCheck.Called.Should().BeFalse();
|
||||
serviceCheck.Called.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DbServiceHealthCheck_ShouldReturnHealthyWhenConnectionSucceeds()
|
||||
{
|
||||
var check = new DbServiceHealthCheck(new FakeDatabaseConnectionChecker(true));
|
||||
|
||||
HealthCheckResult result = await check.CheckHealthAsync(default);
|
||||
|
||||
result.Status.Should().Be(HealthStatus.Healthy);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DbServiceHealthCheck_ShouldReturnUnhealthyWhenConnectionFails()
|
||||
{
|
||||
var check = new DbServiceHealthCheck(new FakeDatabaseConnectionChecker(false));
|
||||
|
||||
HealthCheckResult result = await check.CheckHealthAsync(default);
|
||||
|
||||
result.Status.Should().Be(HealthStatus.Unhealthy);
|
||||
}
|
||||
|
||||
private sealed class FakeConfigurationCheck : IConfigurationCheck
|
||||
{
|
||||
public bool Called { get; private set; }
|
||||
|
||||
public Task<HealthCheckResult> CheckConfigurationAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_ = cancellationToken;
|
||||
Called = true;
|
||||
return Task.FromResult(HealthCheckResult.Healthy("config"));
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class FakeServiceHealthCheck : IServiceHealthCheck
|
||||
{
|
||||
public bool Called { get; private set; }
|
||||
|
||||
public Task<HealthCheckResult> CheckHealthAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_ = cancellationToken;
|
||||
Called = true;
|
||||
return Task.FromResult(HealthCheckResult.Healthy("service"));
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class FakeDatabaseConnectionChecker : IDatabaseConnectionChecker
|
||||
{
|
||||
private readonly bool _canConnect;
|
||||
|
||||
public FakeDatabaseConnectionChecker(bool canConnect)
|
||||
{
|
||||
_canConnect = canConnect;
|
||||
}
|
||||
|
||||
public Task<bool> CanConnectAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_ = cancellationToken;
|
||||
return Task.FromResult(_canConnect);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user