From 773c466e8cda8a364ada9c89e1f01fe0ea191809 Mon Sep 17 00:00:00 2001 From: Martin Tomka Date: Wed, 29 Nov 2023 07:43:58 +0100 Subject: [PATCH] Add a test that demonstrates how to track the states of circuit breaker --- ...sTests.CircuitBreakerStateRegistry_1828.cs | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/Polly.Core.Tests/Issues/IssuesTests.CircuitBreakerStateRegistry_1828.cs diff --git a/test/Polly.Core.Tests/Issues/IssuesTests.CircuitBreakerStateRegistry_1828.cs b/test/Polly.Core.Tests/Issues/IssuesTests.CircuitBreakerStateRegistry_1828.cs new file mode 100644 index 00000000000..6243a287e08 --- /dev/null +++ b/test/Polly.Core.Tests/Issues/IssuesTests.CircuitBreakerStateRegistry_1828.cs @@ -0,0 +1,47 @@ +using Polly.CircuitBreaker; +using Polly.Registry; + +namespace Polly.Core.Tests.Issues; + +public partial class IssuesTests +{ + [Fact] + public void CircuitBreakerStateRegistry_1828() + { + // Arrange + var states = new ConcurrentBag(); + using var registry = new ResiliencePipelineRegistry(); + + // Act + _ = registry.GetOrAddPipeline("A", builder => + { + var stateProvider = new CircuitBreakerStateProvider(); + builder.AddCircuitBreaker(new() { StateProvider = stateProvider }); + states.Add(stateProvider); + }); + + _ = registry.GetOrAddPipeline("B", builder => + { + var stateProvider = new CircuitBreakerStateProvider(); + builder.AddCircuitBreaker(new() { StateProvider = stateProvider }); + states.Add(stateProvider); + }); + + _ = registry.TryAddBuilder("C", (builder, _) => + { + var stateProvider = new CircuitBreakerStateProvider(); + builder.AddCircuitBreaker(new() { StateProvider = stateProvider }); + states.Add(stateProvider); + }); + + // Assert + states.Should().HaveCount(2); + registry.GetPipeline("C"); + states.Should().HaveCount(3); + + foreach (var state in states) + { + state.CircuitState.Should().Be(CircuitState.Closed); + } + } +}