コード例 #1
0
        public void TestSetup()
        {
            sessionState = new MockSessionState();
            var circuitBreakerStateStore = new CircuitBreakerStateStore(sessionState);

            circuitBreaker = new CircuitBreaker(circuitBreakerStateStore);
        }
コード例 #2
0
        public void CircuitBreakerStateStore_HasTimeoutCompletedJustTested_ReturnFalse()
        {
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 5);

            cbss.Trip(new InvalidOperationException());

            cbss.HasTimeoutCompleted().Should().BeFalse();
        }
コード例 #3
0
        public void CircuitBreakerStateStore_WhenTrip_LastExceptionSaved()
        {
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 5);

            cbss.Trip(new InvalidOperationException());

            cbss.LastException.Should().BeOfType <InvalidOperationException>();
        }
コード例 #4
0
        public void CircuitBreakerStateStore_WhenTrip_ShouldBeOpen()
        {
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 5);

            cbss.Trip(new Exception());

            cbss.IsClosed.Should().BeFalse();
        }
コード例 #5
0
        public void CircuitBreakerStateStore_CloseCircuitBreakerRunOnce_StayOpen()
        {
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);

            cbss.Trip(new InvalidOperationException());

            cbss.CloseCircuitBreaker();
            cbss.IsClosed.Should().BeFalse();
        }
コード例 #6
0
        public void CircuitBreaker_Execute_ShoulNotThrowException()
        {
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);
            CircuitBreaker           cb   = new CircuitBreaker(cbss);


            Action action = () => cb.Execute(() => { });

            action.ShouldNotThrow();
        }
コード例 #7
0
        public void CircuitBreaker_ExecuteActionThrowsException_ExceptionIsReceived()
        {
            // On lance Execute
            // l'action lève InvalidCastException
            // InvalidCastException est réceptionné

            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);
            CircuitBreaker           cb   = new CircuitBreaker(cbss);

            Action action = () =>
            {
                cb.Execute(() => { throw new InvalidCastException(); });
            };

            action.ShouldThrow <CircuitBreakerOpenException>();
        }
コード例 #8
0
        public void CircuitBreaker_Execute_ActionIsRun()
        {
            // on vérifie qu'Execute sait lancer une action avec disjoncteur fermé

            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);
            CircuitBreaker           cb   = new CircuitBreaker(cbss);
            object testValue = null;

            Action action = () =>
            {
                cb.Execute(() => { testValue = "2"; });
            };

            action();

            testValue.Should().Be("2");
        }
コード例 #9
0
        public void CircuitBreaker_Execute_ThrowCircuitBreakerOpenExceptionIfOpenAndStillInTimeout()
        {
            // disjoncteur ouvert
            // on passe au dessus du timeout
            // on lance l'action 1 fois
            // CircuitBreakerOpenException est levé

            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);

            CircuitBreaker cb     = new CircuitBreaker(cbss);
            Action         action = () =>
            {
                cb.Execute(() => { });
            };

            cbss.Trip(new InvalidOperationException()); // ouvre le disjoncteur et initialise le timeout
            action.ShouldThrow <CircuitBreakerOpenException>();
        }
コード例 #10
0
        public void CircuitBreaker_ExecuteWithStatusOpenAndNotInTimeout_ActionShouldBeRun()
        {
            // disjoncteur ouvert
            // on passe au dessus du timeout
            // l'action doit être exécutée

            object testValue = null;
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);

            CircuitBreaker cb     = new CircuitBreaker(cbss);
            Action         action = () =>
            {
                cb.Execute(() => { testValue = "2"; });
            };

            cbss.Trip(new InvalidOperationException()); // ouvre le disjoncteur et initialise le timeout
            Thread.Sleep(25000);
            action();
            testValue.Should().Be("2");
        }
コード例 #11
0
        public void CircuitBreaker_ExecuteWithStatusOpenAndNotInTimeout_ShouldNotThrowException()
        {
            // disjoncteur ouvert
            // on passe au dessus du timeout
            // on lance l'action 1 fois
            // CircuitBreakerOpenException n'est pas levé

            object testValue = null;
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);

            CircuitBreaker cb     = new CircuitBreaker(cbss);
            Action         action = () =>
            {
                cb.Execute(() => { testValue = "2"; });
            };

            cbss.Trip(new InvalidOperationException()); // ouvre le disjoncteur et initialise le timeout
            Thread.Sleep(25000);
            action.ShouldNotThrow <CircuitBreakerOpenException>();
        }
コード例 #12
0
        public void CircuitBreaker_ExecuteWithStatusOpenAndNotInTimeout_StayClosed()
        {
            // disjoncteur ouvert
            // on passe au dessus du timeout
            // on lance l'action UNE fois
            // le disjoncteur reste ouvert

            object testValue = null;
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);

            CircuitBreaker cb     = new CircuitBreaker(cbss);
            Action         action = () =>
            {
                cb.Execute(() => { testValue = "2"; });
            };

            cbss.Trip(new InvalidOperationException()); // ouvre le disjoncteur et initialise le timeout
            Thread.Sleep(25000);
            action();
            cbss.IsClosed.Should().BeFalse();
        }
コード例 #13
0
        public void CircuitBreaker_ExecuteActionThrowsException_BreakerGoesOpen()
        {
            // On lance Execute
            // l'action lève InvalidCastException
            // Le disjoncteur s'ouvre

            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 2);
            CircuitBreaker           cb   = new CircuitBreaker(cbss);

            Action action = () =>
            {
                cb.Execute(() => { throw new InvalidCastException(); });
            };

            try
            {
                action();
            }
            catch (CircuitBreakerOpenException)
            {
            }

            cbss.IsClosed.Should().BeFalse();
        }
コード例 #14
0
        public void CircuitBreakerStateStore_WhenCreated_ShouldBeClosed()
        {
            CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 5);

            cbss.IsClosed.Should().BeTrue();
        }