public void TestSetup() { sessionState = new MockSessionState(); var circuitBreakerStateStore = new CircuitBreakerStateStore(sessionState); circuitBreaker = new CircuitBreaker(circuitBreakerStateStore); }
public void CircuitBreakerStateStore_HasTimeoutCompletedJustTested_ReturnFalse() { CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 5); cbss.Trip(new InvalidOperationException()); cbss.HasTimeoutCompleted().Should().BeFalse(); }
public void CircuitBreakerStateStore_WhenTrip_LastExceptionSaved() { CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 5); cbss.Trip(new InvalidOperationException()); cbss.LastException.Should().BeOfType <InvalidOperationException>(); }
public void CircuitBreakerStateStore_WhenTrip_ShouldBeOpen() { CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 5); cbss.Trip(new Exception()); cbss.IsClosed.Should().BeFalse(); }
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(); }
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(); }
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>(); }
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"); }
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>(); }
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"); }
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>(); }
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(); }
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(); }
public void CircuitBreakerStateStore_WhenCreated_ShouldBeClosed() { CircuitBreakerStateStore cbss = new CircuitBreakerStateStore(new TimeSpan(0, 0, 10), 5); cbss.IsClosed.Should().BeTrue(); }