generated from pricelees/issue-pr-template
<!-- 제목 양식 --> <!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) --> ## 📝 관련 이슈 및 PR **PR과 관련된 이슈 번호** - #26 ## ✨ 작업 내용 <!-- 어떤 작업을 했는지 알려주세요! --> - actuator, micrometer tracing / datasource 추가 - 로그에 traceId, spanId 추가 - 로깅 방식 개선: 필터가 http 요청 기록 -> 컨트롤러 요청 / 응답은 AOP를 이용하여 기록 ## 🧪 테스트 <!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! --> - 로그 메시지를 만들고, 마스킹하는 두 클래스에 대한 테스트 완료 - 전체 테스트 정상 통과 확인 ## 📚 참고 자료 및 기타 <!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! --> Reviewed-on: #27 Co-authored-by: pricelees <priceelees@gmail.com> Co-committed-by: pricelees <priceelees@gmail.com>
78 lines
2.7 KiB
Kotlin
78 lines
2.7 KiB
Kotlin
package roomescape.common.log
|
|
|
|
import ch.qos.logback.classic.spi.ILoggingEvent
|
|
import io.kotest.assertions.assertSoftly
|
|
import io.kotest.core.spec.style.FunSpec
|
|
import io.kotest.matchers.equals.shouldBeEqual
|
|
import io.kotest.matchers.string.shouldContain
|
|
import io.mockk.every
|
|
import io.mockk.mockk
|
|
|
|
class RoomescapeLogMaskingConverterTest : FunSpec({
|
|
|
|
val converter = RoomescapeLogMaskingConverter()
|
|
val event: ILoggingEvent = mockk()
|
|
|
|
context("평문 로그에서는 key=value 형식을 처리한다.") {
|
|
|
|
test("2글자 초과이면 맨 앞, 맨 뒤를 제외한 나머지를 가린다.") {
|
|
val email = "a@a.a"
|
|
val password = "password12"
|
|
val accessToken = "accessToken12"
|
|
|
|
every {
|
|
event.formattedMessage
|
|
} returns "email=${email}, password=${password}, accessToken = $accessToken"
|
|
|
|
assertSoftly(converter.convert(event)) {
|
|
this shouldContain "email=${email}"
|
|
this shouldContain "password=${password.first()}****${password.last()}"
|
|
this shouldContain "accessToken = ${accessToken.first()}****${accessToken.last()}"
|
|
}
|
|
|
|
}
|
|
|
|
test("2글자 이하이면 전부 가린다.") {
|
|
val email = "a@a.a"
|
|
val password = "pa"
|
|
val accessToken = "a"
|
|
|
|
every {
|
|
event.formattedMessage
|
|
} returns "email=${email}, password=${password}, accessToken = ${accessToken}"
|
|
|
|
assertSoftly(converter.convert(event)) {
|
|
this shouldContain "email=${email}"
|
|
this shouldContain "password=****"
|
|
this shouldContain "accessToken = ****"
|
|
}
|
|
}
|
|
}
|
|
|
|
context("JSON 형식 로그를 처리한다.") {
|
|
val json = "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"password12\"}}"
|
|
|
|
test("2글자 초과이면 맨 앞, 맨 뒤를 제외한 나머지를 가린다.") {
|
|
val password = "password12"
|
|
val json = "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"${password}\"}}"
|
|
|
|
every {
|
|
event.formattedMessage
|
|
} returns json
|
|
|
|
converter.convert(event) shouldBeEqual "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"${password.first()}****${password.last()}\"}}"
|
|
}
|
|
|
|
test("2글자 이하이면 전부 가린다.") {
|
|
val password = "pa"
|
|
val json = "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"${password}\"}}"
|
|
|
|
every {
|
|
event.formattedMessage
|
|
} returns json
|
|
|
|
converter.convert(event) shouldBeEqual "{\"request_body\":{\"email\":\"a@a.a\",\"password\":\"****\"}}"
|
|
}
|
|
}
|
|
})
|