platanus-kr/plata-anywhere-chat

message: WebSocket 테스트

Closed this issue · 0 comments

웹소켓 인수 테스트

시작 전 생각 했던 것

1) 예상

  • 일반 REST API는 RestAssured 로 검증하는데 WebSocket같은 stateful 프로토콜은 어떻게 검증하지?

2) 예상과 달랐던 점

  • 테스트 환경을 위해서 @Value로 가져오던 설정을 동적으로 대응할 수 있게 바꿔야 한다. RANDOM_PORT 사용 할 것이기 때문.
  • 리엑터 여전히 쉽지않네..

3) 정말로 필요했던 것

  • 프로파일 분리
  • 리엑터 다시 공부하기
  • netty 기반 웹소켓 클라이언트

이 티켓에서 실제로 한 것

SimpleMessageWebSocketHandler와 StandaloneMessageWebSocketHandler 인수 테스트 작성

웹소켓의 인수 테스트 작성

  • ReactorNettyWebSocketClient 를 사용하여 채팅방 구독과 메시지 수발신 검증

세션 유효성 검사 Fake 컨트롤러 작성

  • 채팅방 진입시 세션 유효성 검사를 위해 web의 /api/v1/auth/validate 를 호출하는데 test용 Fake 컨트롤러 작성

테스트를 위한 프로파일 정리

정적 프로퍼티를 동적으로 주입할 수 있게 변경

  • 기존 @Value 로 값을 가져오는 부분을 Environment 빈으로 대체
  • 대체된 빈으로 정적 프로퍼티로 가져오던 값을 동적으로 가져오도록 변경
  • 스프링 통합 테스트 선언시 @TestPropertySourceRANDOM_PORT 등록

이후 구현할 내용

  • Spring Boot 3.1 업데이트
  • 그리고 testcontainers를 도입하여 단독으로 인수테스트 가능하도록 만들기.