From cba004c35fb08dcadd5f94d8d68cd911d2828a63 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 25 Jun 2026 13:46:59 +0900 Subject: [PATCH] =?UTF-8?q?test(redis):=20=EB=82=B4=EC=9E=A5=20Redis=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=8F=AC=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EB=8F=99=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/EmbeddedRedisInitializer.kt | 27 ++++++++++++------- .../support/EmbeddedRedisTestConfiguration.kt | 8 ++++-- 2 files changed, 24 insertions(+), 11 deletions(-) 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 c650b251..d13fc92a 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisInitializer.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisInitializer.kt @@ -1,36 +1,42 @@ package kr.co.vividnext.sodalive.support +import org.springframework.boot.test.util.TestPropertyValues import org.springframework.context.ApplicationContextInitializer import org.springframework.context.ConfigurableApplicationContext import redis.embedded.RedisServer +import redis.embedded.core.PortProvider class EmbeddedRedisInitializer : ApplicationContextInitializer { - companion object { - const val PORT = 16379 - } - override fun initialize(applicationContext: ConfigurableApplicationContext) { - EmbeddedRedisHolder.start() + val port = EmbeddedRedisHolder.start() + TestPropertyValues.of( + "spring.redis.host=127.0.0.1", + "spring.redis.port=$port", + "spring.redis.ssl-enabled=false" + ).applyTo(applicationContext.environment) } } private object EmbeddedRedisHolder { private var redisServer: RedisServer? = null + private var port: Int? = null private var shutdownHookRegistered = false @Synchronized - fun start() { - if (redisServer != null) { - return + fun start(): Int { + port?.let { + return it } + val selectedPort = PortProvider.newEphemeralPortProvider().get() redisServer = RedisServer.newRedisServer() - .port(EmbeddedRedisInitializer.PORT) + .port(selectedPort) .setting("bind 127.0.0.1") .setting("daemonize no") .setting("appendonly no") .build() .also { it.start() } + port = selectedPort if (!shutdownHookRegistered) { Runtime.getRuntime().addShutdownHook( @@ -40,11 +46,14 @@ private object EmbeddedRedisHolder { ) shutdownHookRegistered = true } + + return selectedPort } @Synchronized fun stop() { redisServer?.stop() redisServer = null + port = null } } diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisTestConfiguration.kt b/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisTestConfiguration.kt index e79fd30c..fac3acb2 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisTestConfiguration.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/support/EmbeddedRedisTestConfiguration.kt @@ -4,6 +4,7 @@ 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.beans.factory.annotation.Value import org.springframework.boot.test.context.TestConfiguration import org.springframework.context.annotation.Bean import org.springframework.data.redis.connection.RedisConnectionFactory @@ -15,8 +16,11 @@ import org.springframework.data.redis.listener.RedisMessageListenerContainer @TestConfiguration class EmbeddedRedisTestConfiguration { @Bean - fun redisConnectionFactory(): RedisConnectionFactory { - return LettuceConnectionFactory(RedisStandaloneConfiguration("127.0.0.1", EmbeddedRedisInitializer.PORT)) + fun redisConnectionFactory( + @Value("\${spring.redis.host}") host: String, + @Value("\${spring.redis.port}") port: Int + ): RedisConnectionFactory { + return LettuceConnectionFactory(RedisStandaloneConfiguration(host, port)) } @Bean