Exemple #1
0
    def test_circut_success_resets_failures_counter(self):
        circuit_breaker = CircuitBreaker(maximum_failures=3)
        circuit_breaker.record_failure()
        circuit_breaker.record_failure()
        circuit_breaker.record_success()
        circuit_breaker.record_failure()
        circuit_breaker.record_failure()

        assert circuit_breaker.current_state == 'closed'
Exemple #2
0
    def test_circuit_half_opens_and_closes_after_timeout(self, monotonic_mock):
        circuit_breaker = CircuitBreaker(maximum_failures=1, reset_timeout_seconds=20)

        assert circuit_breaker.allows_execution() is True
        assert circuit_breaker.current_state == 'closed'

        monotonic_mock.return_value = 100

        circuit_breaker.record_failure()

        assert circuit_breaker.allows_execution() is False
        assert circuit_breaker.current_state == 'open'

        monotonic_mock.return_value = 130

        assert circuit_breaker.allows_execution() is True
        assert circuit_breaker.current_state == 'half-open'

        circuit_breaker.record_success()

        assert circuit_breaker.allows_execution() is True
        assert circuit_breaker.current_state == 'closed'