diff --git a/spring-cloud-circuitbreaker-resilience4j/src/test/java/org/springframework/cloud/circuitbreaker/resilience4j/Resilience4JCircuitBreakerIntegrationTest.java b/spring-cloud-circuitbreaker-resilience4j/src/test/java/org/springframework/cloud/circuitbreaker/resilience4j/Resilience4JCircuitBreakerIntegrationTest.java index 07baad6..dc0ebd3 100644 --- a/spring-cloud-circuitbreaker-resilience4j/src/test/java/org/springframework/cloud/circuitbreaker/resilience4j/Resilience4JCircuitBreakerIntegrationTest.java +++ b/spring-cloud-circuitbreaker-resilience4j/src/test/java/org/springframework/cloud/circuitbreaker/resilience4j/Resilience4JCircuitBreakerIntegrationTest.java @@ -17,11 +17,16 @@ package org.springframework.cloud.circuitbreaker.resilience4j; import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig; +import io.github.resilience4j.circuitbreaker.event.CircuitBreakerOnErrorEvent; +import io.github.resilience4j.circuitbreaker.event.CircuitBreakerOnSuccessEvent; +import io.github.resilience4j.core.EventConsumer; import io.github.resilience4j.timelimiter.TimeLimiterConfig; import java.time.Duration; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; @@ -37,6 +42,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.internal.verification.VerificationModeFactory.times; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; /** @@ -47,6 +55,16 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @DirtiesContext public class Resilience4JCircuitBreakerIntegrationTest { + + @Mock + static EventConsumer slowErrorConsumer; + @Mock + static EventConsumer slowSuccessConsumer; + @Mock + static EventConsumer normalErrorConsumer; + @Mock + static EventConsumer normalSuccessConsumer; + @Configuration @EnableAutoConfiguration @RestController @@ -71,6 +89,12 @@ public class Resilience4JCircuitBreakerIntegrationTest { .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build()) .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults()) .build()); + factory.addCircuitBreakerCustomizer(circuitBreaker -> + circuitBreaker.getEventPublisher().onError(slowErrorConsumer).onSuccess(slowSuccessConsumer), + "slow" ); + factory.addCircuitBreakerCustomizer( + circuitBreaker -> circuitBreaker.getEventPublisher().onError(normalErrorConsumer).onSuccess(normalSuccessConsumer), + "normal"); }; } @@ -100,10 +124,14 @@ public class Resilience4JCircuitBreakerIntegrationTest { @Test public void testSlow() { assertEquals("fallback", service.slow()); + verify(slowErrorConsumer, times(1)).consumeEvent(any()); + verify(slowSuccessConsumer, times(0)).consumeEvent(any()); } @Test public void testNormal() { assertEquals("normal", service.normal()); + verify(normalErrorConsumer, times(0)).consumeEvent(any()); + verify(normalSuccessConsumer, times(1)).consumeEvent(any()); } }