generated from pricelees/issue-pr-template
[#26] 모니터링 환경 구성 #27
@ -50,7 +50,7 @@ class ApiLogMessageConverter(
|
|||||||
?.let { payload["member_id"] = it }
|
?.let { payload["member_id"] = it }
|
||||||
?: run { payload["member_id"] = "NONE" }
|
?: 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.body?.let { payload["response_body"] = it }
|
||||||
request.exception?.let {
|
request.exception?.let {
|
||||||
payload["exception"] = mapOf(
|
payload["exception"] = mapOf(
|
||||||
|
|||||||
@ -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<String, Any> = 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()
|
||||||
|
}
|
||||||
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user