package com.gzzm.lobster.quota;

import org.junit.Test;

import static org.junit.Assert.*;

public class CircuitBreakerRegistryTest {

    @Test
    public void closedAllowsByDefault() {
        CircuitBreakerRegistry r = new CircuitBreakerRegistry(3, 30_000);
        assertTrue(r.allow("svc"));
        assertEquals(CircuitBreakerRegistry.State.CLOSED, r.stateOf("svc"));
    }

    @Test
    public void opensAfterFailuresAndBlocks() {
        CircuitBreakerRegistry r = new CircuitBreakerRegistry(3, 30_000);
        r.recordFailure("svc");
        r.recordFailure("svc");
        r.recordFailure("svc");
        assertEquals(CircuitBreakerRegistry.State.OPEN, r.stateOf("svc"));
        assertFalse(r.allow("svc"));
    }

    @Test
    public void successResetsFailures() {
        CircuitBreakerRegistry r = new CircuitBreakerRegistry(3, 30_000);
        r.recordFailure("svc");
        r.recordFailure("svc");
        r.recordSuccess("svc");
        r.recordFailure("svc");
        r.recordFailure("svc");
        assertEquals(CircuitBreakerRegistry.State.CLOSED, r.stateOf("svc"));
    }
}
