Exemple #1
0
        static void TestTransitionBrokenStateAfterTimeOutPeriodBackToABrokenStateOnAFailedSingleCallByThread()
        {
            var            validThreshold = 3;
            var            validTimeSpan  = TimeSpan.FromMilliseconds(400);
            var            circuitBreaker = new CircuitBreaker(validThreshold, validTimeSpan);
            var            testMethodCall = new TestMethodCall();
            CircuitBreaker actual         = null;

            for (var errorCount = 1; errorCount <= circuitBreaker.Threshold; errorCount++)
            {
                actual = circuitBreaker.TryInvoke(() => testMethodCall.ErrorProneMethod());
            }

            Thread.Sleep(validTimeSpan);

            actual.Should().NotBeNull();
            var beforeInvokeCallCount = 0;

            actual.BeforeInvoke += (sender, args) =>
            {
                actual.IsMendingAndHalfway.Should().BeTrue();
                beforeInvokeCallCount++;
            };
            actual = actual.TryInvoke(() => testMethodCall.ErrorProneMethod());

            testMethodCall.FailingMethodCallCount.Should().Be(4);
            actual.Failures.Should().Be(4);
            beforeInvokeCallCount.Should().Be(1);
            actual.IsMendingAndHalfway.Should().BeFalse();
            actual.IsHealthyAndClosed.Should().BeFalse();
            actual.IsBrokenAndOpen.Should().BeTrue();
            actual.IsThresholdReached.Should().BeTrue();
            actual.LastError.Should().NotBeNull();
            Debug.WriteLine(Thread.CurrentThread.Name);
        }
Exemple #2
0
 public CircuitBreakerShould()
 {
     validThreshold      = 3;
     validTimeSpan       = TimeSpan.FromMilliseconds(400);
     circuitBreaker      = new CircuitBreaker(validThreshold, validTimeSpan);
     this.testMethodCall = new TestMethodCall();
 }