From e2f77b982b87cd138c6213b0c792e5abdc701ef1 Mon Sep 17 00:00:00 2001 From: pricelees Date: Tue, 29 Jul 2025 15:47:42 +0900 Subject: [PATCH] =?UTF-8?q?test:=20ApiLogMessageConverter=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=9E=98?= =?UTF-8?q?=EB=AA=BB=20=EC=9E=91=EC=84=B1=EB=90=9C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/log/ApiLogMessageConverter.kt | 2 +- .../common/log/ApiLogMessageConverterTest.kt | 63 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/test/kotlin/roomescape/common/log/ApiLogMessageConverterTest.kt diff --git a/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt b/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt index e1b0264f..7cf16685 100644 --- a/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt +++ b/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt @@ -50,7 +50,7 @@ class ApiLogMessageConverter( ?.let { payload["member_id"] = it } ?: run { payload["member_id"] = "NONE" } - request.startTime?.let { payload["start_time"] = it } + request.startTime?.let { payload["duration_ms"] = System.currentTimeMillis() - it } request.body?.let { payload["response_body"] = it } request.exception?.let { payload["exception"] = mapOf( diff --git a/src/test/kotlin/roomescape/common/log/ApiLogMessageConverterTest.kt b/src/test/kotlin/roomescape/common/log/ApiLogMessageConverterTest.kt new file mode 100644 index 00000000..62eea129 --- /dev/null +++ b/src/test/kotlin/roomescape/common/log/ApiLogMessageConverterTest.kt @@ -0,0 +1,63 @@ +package roomescape.common.log + +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import io.kotest.core.spec.style.FunSpec +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe +import io.mockk.every +import io.mockk.mockk +import jakarta.servlet.http.HttpServletRequest +import org.slf4j.MDC +import roomescape.auth.exception.AuthErrorCode +import roomescape.auth.exception.AuthException + +class ApiLogMessageConverterTest : StringSpec({ + val converter = ApiLogMessageConverter(jacksonObjectMapper()) + val request: HttpServletRequest = mockk() + + beforeTest { + MDC.remove("member_id") + MDC.put("member_id", "1") + } + + afterSpec { + MDC.remove("member_id") + } + + "HTTP 요청 메시지를 변환한다." { + val method = "POST".also { every { request.method } returns it } + val requestURI = "/test/sangdol".also { every { request.requestURI } returns it } + val clientIP = "127.0.0.1".also { every { request.remoteAddr } returns it } + val query = "key=value&key1=value1".also { every { request.queryString } returns it } + val userAgent = "Mozilla/5.".also { every { request.getHeader("User-Agent") } returns it } + + converter.convertToHttpRequestMessage(request) shouldBe """ + {"type":"INCOMING_HTTP_REQUEST","method":"$method","uri":"$requestURI","query_params":"$query","client_ip":"$clientIP","user_agent":"$userAgent"} + """.trimIndent() + } + + "Controller 요청 메시지를 변환한다." { + val controllerPayload: Map = mapOf( + "controller_method" to "Controller 요청 메시지를 변환한다.", + "request_body" to mapOf("key1" to "value1") + ) + val method = "POST".also { every { request.method } returns it } + val requestURI = "/test/sangdol".also { every { request.requestURI } returns it } + + converter.convertToControllerInvokedMessage(request, controllerPayload) shouldBe """ + {"type":"CONTROLLER_INVOKED","method":"$method","uri":"$requestURI","member_id":1,"controller_method":"${controllerPayload.get("controller_method")}","request_body":{"key1":"value1"}} + """.trimIndent() + } + + "Controller 응답 메시지를 반환한다." { + val request = ConvertResponseMessageRequest( + type = LogType.CONTROLLER_SUCCESS, + httpStatus = 200, + exception = AuthException(AuthErrorCode.MEMBER_NOT_FOUND, "테스트 메시지!") + ) + + converter.convertToResponseMessage(request) shouldBe """ + {"type":"CONTROLLER_SUCCESS","status_code":200,"member_id":1,"exception":{"class":"AuthException","message":"테스트 메시지!"}} + """.trimIndent() + } +})