public void TestThresholdReach()
        {
            var breaker = new CircuitBreaker(new CircuitBreakerConfig { ConsecutiveErrorsToBreak = 2, BreakDelayInSeconds = 5 });

            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsTrue(breaker.IsCircuitOpen());
        }
        public void TestThresholdReach()
        {
            var breaker = new CircuitBreaker(new CircuitBreakerConfig {
                ConsecutiveErrorsToBreak = 2, BreakDelayInSeconds = 5
            });

            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsTrue(breaker.IsCircuitOpen());
        }
        public void TestThresholdNotReachedWhenErrorsAreCleared()
        {
            var breaker = new CircuitBreaker(new CircuitBreakerConfig { ConsecutiveErrorsToBreak = 2, BreakDelayInSeconds = 5 });

            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsFalse(breaker.IsCircuitOpen());

            breaker.ClearErrors();
            Assert.IsFalse(breaker.IsCircuitOpen());

            breaker.AddError();
            Assert.IsFalse(breaker.IsCircuitOpen());
        }
        public void TestThresholdNotReachedWhenErrorsAreCleared()
        {
            var breaker = new CircuitBreaker(new CircuitBreakerConfig {
                ConsecutiveErrorsToBreak = 2, BreakDelayInSeconds = 5
            });

            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsFalse(breaker.IsCircuitOpen());

            breaker.ClearErrors();
            Assert.IsFalse(breaker.IsCircuitOpen());

            breaker.AddError();
            Assert.IsFalse(breaker.IsCircuitOpen());
        }
        public void TestWaitForOneSecondUntilCircuitCloses()
        {
            var breaker = new CircuitBreaker(new CircuitBreakerConfig { ConsecutiveErrorsToBreak = 2, BreakDelayInSeconds = 1 });

            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsTrue(breaker.IsCircuitOpen());

            Thread.Sleep(250);
            Assert.IsTrue(breaker.IsCircuitOpen());

            Thread.Sleep(250);
            Assert.IsTrue(breaker.IsCircuitOpen());

            Thread.Sleep(500);
            Assert.IsFalse(breaker.IsCircuitOpen());
        }
        public void TestWaitForOneSecondUntilCircuitCloses()
        {
            var breaker = new CircuitBreaker(new CircuitBreakerConfig {
                ConsecutiveErrorsToBreak = 2, BreakDelayInSeconds = 1
            });

            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsFalse(breaker.IsCircuitOpen());
            breaker.AddError();
            Assert.IsTrue(breaker.IsCircuitOpen());

            Thread.Sleep(250);
            Assert.IsTrue(breaker.IsCircuitOpen());

            Thread.Sleep(250);
            Assert.IsTrue(breaker.IsCircuitOpen());

            Thread.Sleep(500);
            Assert.IsFalse(breaker.IsCircuitOpen());
        }