-
Notifications
You must be signed in to change notification settings - Fork 0
/
GithubCircuitBreakerTest.java
69 lines (61 loc) · 3.34 KB
/
GithubCircuitBreakerTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package fr.jufab.hystrixr4jlab.infrastructure.github;
import fr.jufab.hystrixr4jlab.infrastructure.r4j.CircuitBreakerProducer;
import io.github.resilience4j.circuitbreaker.CallNotPermittedException;
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
import javax.ws.rs.BadRequestException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class GithubCircuitBreakerTest {
public static final String JSON_RESPONSE = "{\"test\": \"test\"}";
CircuitBreakerProducer circuitBreakerProducer = new CircuitBreakerProducer();
@Mock
CircuitBreakerRegistry circuitBreakerRegistry;
@Mock
GithubJufabApi githubJufabApi;
@InjectMocks
GithubCircuitBreaker githubCircuitBreaker;
@Test
@DisplayName("Should execute circuit breaker and return a response")
void shouldExecuteCricuitBreakerAndReturnAResponse() {
when(githubJufabApi.getAJsonRelease()).thenReturn(JSON_RESPONSE);
when(circuitBreakerRegistry.circuitBreaker(anyString())).thenReturn(circuitBreakerProducer.produceCircuitBreakerRegistry().circuitBreaker("circuit-mock"));
assertThat(githubCircuitBreaker.executeJSONRelease()).isEqualTo(JSON_RESPONSE);
}
@Test
@DisplayName("Should execute circuit breaker force open and return a CallNotPermittedException")
void shouldExecuteCricuitBreakerForceOpenAndReturnAnException() {
CircuitBreaker circuitBreakerMock = circuitBreakerProducer.produceCircuitBreakerRegistry().circuitBreaker("circuit-mock");
circuitBreakerMock.transitionToForcedOpenState();
when(circuitBreakerRegistry.circuitBreaker(anyString())).thenReturn(circuitBreakerMock);
assertThatThrownBy(()->githubCircuitBreaker.executeJSONRelease()).isInstanceOf(
CallNotPermittedException.class);
}
@Test
@DisplayName("Should execute circuit breaker and return a BadRequestException")
void shouldExecuteCricuitBreakerAndReturnAnException() {
when(githubJufabApi.getAnException()).thenThrow(BadRequestException.class);
when(circuitBreakerRegistry.circuitBreaker(anyString())).thenReturn(circuitBreakerProducer.produceCircuitBreakerRegistry().circuitBreaker("circuit-mock"));
assertThatThrownBy(()->githubCircuitBreaker.executeException()).isInstanceOf(
BadRequestException.class);
}
@Test
@DisplayName("Should execute circuit breaker force open, execute exception and return a CallNotPermittedException")
void shouldExecuteCricuitBreakerForceOpenExecuteExceptionAndReturnACallNotPermittedException() {
CircuitBreaker circuitBreakerMock = circuitBreakerProducer.produceCircuitBreakerRegistry().circuitBreaker("circuit-mock");
circuitBreakerMock.transitionToForcedOpenState();
when(circuitBreakerRegistry.circuitBreaker(anyString())).thenReturn(circuitBreakerMock);
assertThatThrownBy(()->githubCircuitBreaker.executeException()).isInstanceOf(
CallNotPermittedException.class);
}
}