fix(r2-10): breaker-close marker + IsBreakerOpen on ResilienceStatusSnapshot

This commit is contained in:
Joseph Doherty
2026-07-13 10:35:41 -04:00
parent 46fedda3e4
commit 205d398055
3 changed files with 77 additions and 8 deletions
@@ -55,6 +55,41 @@ public sealed class DriverResilienceStatusTrackerTests
tracker.TryGet("drv", "host")!.LastBreakerOpenUtc.ShouldBe(Now);
}
/// <summary>Verifies that RecordBreakerClose stamps the close timestamp.</summary>
[Fact]
public void RecordBreakerClose_StampsCloseTime()
{
var tracker = new DriverResilienceStatusTracker();
tracker.RecordBreakerOpen("drv", "host", Now);
tracker.RecordBreakerClose("drv", "host", Now.AddSeconds(20));
tracker.TryGet("drv", "host")!.LastBreakerClosedUtc.ShouldBe(Now.AddSeconds(20));
}
/// <summary>Verifies that IsBreakerOpen tracks open → close → reopen transitions.</summary>
[Fact]
public void IsBreakerOpen_TracksOpenCloseReopen()
{
var tracker = new DriverResilienceStatusTracker();
// A snapshot with no breaker event is never "open".
tracker.RecordFailure("drv", "host", Now);
tracker.TryGet("drv", "host")!.IsBreakerOpen.ShouldBeFalse();
// Opened.
tracker.RecordBreakerOpen("drv", "host", Now.AddSeconds(1));
tracker.TryGet("drv", "host")!.IsBreakerOpen.ShouldBeTrue();
// Closed later → no longer open.
tracker.RecordBreakerClose("drv", "host", Now.AddSeconds(2));
tracker.TryGet("drv", "host")!.IsBreakerOpen.ShouldBeFalse();
// Re-opened after the last close → open again.
tracker.RecordBreakerOpen("drv", "host", Now.AddSeconds(3));
tracker.TryGet("drv", "host")!.IsBreakerOpen.ShouldBeTrue();
}
/// <summary>Verifies that RecordRecycle populates the LastRecycleUtc timestamp.</summary>
[Fact]
public void RecordRecycle_Populates_LastRecycleUtc()