using Xunit;
using OpenHarbor.MCP.Gateway.Infrastructure.Health;
using OpenHarbor.MCP.Gateway.Core.Models;
namespace OpenHarbor.MCP.Gateway.Infrastructure.Tests.Health;
///
/// Unit tests for CircuitBreaker following TDD approach.
/// Tests circuit breaker states: Closed, Open, HalfOpen.
///
public class CircuitBreakerTests
{
[Fact]
public async Task ExecuteAsync_InClosedState_AllowsExecution()
{
// Arrange
var breaker = new CircuitBreaker
{
FailureThreshold = 3
};
var executed = false;
// Act
await breaker.ExecuteAsync(async () =>
{
executed = true;
await Task.CompletedTask;
});
// Assert
Assert.True(executed);
Assert.Equal(CircuitBreakerState.Closed, breaker.State);
}
[Fact]
public async Task ExecuteAsync_AfterMultipleFailures_OpensCircuit()
{
// Arrange
var breaker = new CircuitBreaker
{
FailureThreshold = 3,
OpenTimeout = TimeSpan.FromSeconds(1)
};
// Act - trigger 3 failures
for (int i = 0; i < 3; i++)
{
try
{
await breaker.ExecuteAsync