From 7183e5f0ca7eb2d40faefc049811f1a305e156a7 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 20 Jun 2026 03:12:14 +0900 Subject: [PATCH] =?UTF-8?q?test(user-creator-chat):=20Redis=20=ED=86=B5?= =?UTF-8?q?=ED=95=A9=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BB=A8=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EC=B6=95=EC=86=8C=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit embedded Redis 포트를 테스트 설정과 공유하도록 공개한다. Redis 통합 테스트 전용 Bean만 로드하도록 TestConfiguration을 추가한다. UserCreatorChat Redis 통합 테스트가 필요한 클래스만 로드하게 제한한다. --- .../support/EmbeddedRedisInitializer.kt | 7 +++- .../support/EmbeddedRedisTestConfiguration.kt | 41 +++++++++++++++++++ .../UserCreatorChatRedisIntegrationTest.kt | 11 ++++- 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisTestConfiguration.kt diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisInitializer.kt b/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisInitializer.kt index 22c17661..c650b251 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisInitializer.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisInitializer.kt @@ -5,13 +5,16 @@ import org.springframework.context.ConfigurableApplicationContext import redis.embedded.RedisServer class EmbeddedRedisInitializer : ApplicationContextInitializer { + companion object { + const val PORT = 16379 + } + override fun initialize(applicationContext: ConfigurableApplicationContext) { EmbeddedRedisHolder.start() } } private object EmbeddedRedisHolder { - private const val PORT = 16379 private var redisServer: RedisServer? = null private var shutdownHookRegistered = false @@ -22,7 +25,7 @@ private object EmbeddedRedisHolder { } redisServer = RedisServer.newRedisServer() - .port(PORT) + .port(EmbeddedRedisInitializer.PORT) .setting("bind 127.0.0.1") .setting("daemonize no") .setting("appendonly no") diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisTestConfiguration.kt b/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisTestConfiguration.kt new file mode 100644 index 00000000..e79fd30c --- /dev/null +++ b/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisTestConfiguration.kt @@ -0,0 +1,41 @@ +package kr.co.vividnext.sodalive.support + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.SerializationFeature +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule +import com.fasterxml.jackson.module.kotlin.KotlinModule +import org.springframework.boot.test.context.TestConfiguration +import org.springframework.context.annotation.Bean +import org.springframework.data.redis.connection.RedisConnectionFactory +import org.springframework.data.redis.connection.RedisStandaloneConfiguration +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory +import org.springframework.data.redis.core.StringRedisTemplate +import org.springframework.data.redis.listener.RedisMessageListenerContainer + +@TestConfiguration +class EmbeddedRedisTestConfiguration { + @Bean + fun redisConnectionFactory(): RedisConnectionFactory { + return LettuceConnectionFactory(RedisStandaloneConfiguration("127.0.0.1", EmbeddedRedisInitializer.PORT)) + } + + @Bean + fun stringRedisTemplate(redisConnectionFactory: RedisConnectionFactory): StringRedisTemplate { + return StringRedisTemplate(redisConnectionFactory) + } + + @Bean + fun redisMessageListenerContainer(redisConnectionFactory: RedisConnectionFactory): RedisMessageListenerContainer { + val container = RedisMessageListenerContainer() + container.setConnectionFactory(redisConnectionFactory) + return container + } + + @Bean + fun objectMapper(): ObjectMapper { + return ObjectMapper() + .registerModule(KotlinModule.Builder().build()) + .registerModule(JavaTimeModule()) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + } +} diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/usercreatorchat/websocket/UserCreatorChatRedisIntegrationTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/usercreatorchat/websocket/UserCreatorChatRedisIntegrationTest.kt index c42d65b8..92326b37 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/v2/usercreatorchat/websocket/UserCreatorChatRedisIntegrationTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/usercreatorchat/websocket/UserCreatorChatRedisIntegrationTest.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.v2.usercreatorchat.websocket import com.fasterxml.jackson.databind.ObjectMapper import kr.co.vividnext.sodalive.support.EmbeddedRedisInitializer +import kr.co.vividnext.sodalive.support.EmbeddedRedisTestConfiguration import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse @@ -22,7 +23,15 @@ import java.time.Instant import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit -@SpringBootTest +@SpringBootTest( + classes = [ + EmbeddedRedisTestConfiguration::class, + UserCreatorChatPresenceService::class, + UserCreatorChatWebSocketSessionRegistry::class, + UserCreatorChatRoomMessageBroker::class, + UserCreatorChatWebSocketServerIdConfig::class + ] +) @ContextConfiguration(initializers = [EmbeddedRedisInitializer::class]) @TestPropertySource(properties = ["user-creator-chat.websocket.server-id=redis-test-server"]) class UserCreatorChatRedisIntegrationTest {