@Test public void primaryProbeToHealthy() { breaker.requestComplete(false); breaker.requestComplete(false); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(PRIMARY_TRIPPED); executor.tick(PRIMARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(PRIMARY_PROBE); breaker.requestComplete(true); assertThat(breaker.getState()).isEqualTo(SECONDARY_HEALTHY); executor.tick(PRIMARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(PRIMARY_HEALTHY); }
breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(PRIMARY_TRIPPED); executor.tick(PRIMARY_TRIP_TIME - 1); assertThat(breaker.getState()).isEqualTo(PRIMARY_TRIPPED); executor.tick(1); assertThat(breaker.getState()).isEqualTo(PRIMARY_PROBE); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(SECONDARY_TRIPPED); executor.tick(SECONDARY_TRIP_TIME - 1); assertThat(breaker.getState()).isEqualTo(SECONDARY_TRIPPED); executor.tick(1); assertThat(breaker.getState()).isEqualTo(SECONDARY_PROBE); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(TERTIARY_TRIPPED); executor.tick(TERTIARY_TRIP_TIME - 1); assertThat(breaker.getState()).isEqualTo(TERTIARY_TRIPPED); executor.tick(1); assertThat(breaker.getState()).isEqualTo(TERTIARY_PROBE); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(TERTIARY_TRIPPED); executor.tick(TERTIARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(TERTIARY_PROBE); breaker.requestComplete(true); assertThat(breaker.getState()).isEqualTo(TERTIARY_HEALTHY); executor.tick(TERTIARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(SECONDARY_HEALTHY); executor.tick(SECONDARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(PRIMARY_HEALTHY);
breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(PRIMARY_TRIPPED); executor.tick(PRIMARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(PRIMARY_PROBE); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(SECONDARY_TRIPPED); executor.tick(SECONDARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(SECONDARY_PROBE); breaker.requestComplete(true); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(SECONDARY_TRIPPED); executor.tick(SECONDARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(SECONDARY_PROBE); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(TERTIARY_TRIPPED); executor.tick(TERTIARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(TERTIARY_PROBE); breaker.requestComplete(true);
breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(PRIMARY_TRIPPED); executor.tick(PRIMARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(PRIMARY_PROBE); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(SECONDARY_TRIPPED); executor.tick(SECONDARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(SECONDARY_PROBE); breaker.requestComplete(true); breaker.requestComplete(false); breaker.requestComplete(false); executor.tick(PRIMARY_TRIP_TIME); assertThat(executor.scheduledTasks).hasSize(2); executor.tick(PRIMARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(SECONDARY_PROBE); breaker.requestComplete(false); assertThat(breaker.getState()).isEqualTo(TERTIARY_TRIPPED); executor.tick(TERTIARY_TRIP_TIME); assertThat(breaker.getState()).isEqualTo(TERTIARY_PROBE); breaker.requestComplete(true); breaker.requestComplete(false); breaker.requestComplete(false); executor.tick(TERTIARY_TRIP_TIME);