Skip to content

Commit

Permalink
Merge pull request #22 from KU-Taverse/test/circuitbreaker
Browse files Browse the repository at this point in the history
[Test] circuitbreaker test
  • Loading branch information
david-parkk authored Sep 21, 2024
2 parents 68134fb + 494cec3 commit 973a8c6
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/main/java/ku/user/user/service/TestService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ku.user.user.service;

import ku.user.client.GameServiceClient;
import lombok.RequiredArgsConstructor;
import org.springframework.cloud.client.circuitbreaker.CircuitBreaker;
import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class TestService {
private final GameServiceClient gameServiceClient;
private final CircuitBreakerFactory circuitBreakerFactory;


public String getResult(String memberId) {
CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitBreaker");
String result = circuitBreaker.run(()->gameServiceClient.getGameResults("1234"), throwable -> "1234");
return result;
}

}
11 changes: 11 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,18 @@ management:
web:
exposure:
include: prometheus
endpoint:
prometheus:
enabled: true

token:
expiration_time: 86400000
secret: ${SECRET}

resilience4j:
circuitbreaker:
instances:
gameService:
slidingWindowSize: 10 # 설정할 호출 수
failureRateThreshold: 50 # 실패율 50% 이상
waitDurationInOpenState: 30s # Open 상태에서 대기 시간
54 changes: 54 additions & 0 deletions src/test/java/ku/user/client/GameServiceClientTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package ku.user.client;

import ku.user.user.service.TestService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.web.client.RestClientException;


import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.given;

@SpringBootTest(properties = "spring.profiles.active=local")
class GameServiceClientTest {

@MockBean
private GameServiceClient gameServiceClient;

@Autowired
private TestService testService;

@Test
void 요청_시간이_초과되면_예외를_발생시킨다() {
// Given: 예외를 던지도록 Mock 설정
given(gameServiceClient.getGameResults(anyString()))
.willThrow(new RestClientException("Timeout"));

// When & Then
try {
gameServiceClient.getGameResults("1234");
} catch (RestClientException e) {
assertThat(e.getMessage()).contains("Timeout");
}
}

@Test
void CircuitBreaker가_실패_fallback이_호출된다() {
// Given
given(gameServiceClient.getGameResults(anyString()))
.willThrow(new RuntimeException("Service unavailable"));


// When
String result = testService.getResult("testUser");

// Then
assertThat(result).isEqualTo("1234"); // Fallback 결과를 확인
}



}

0 comments on commit 973a8c6

Please sign in to comment.