본문 바로가기

개발이야기

MockMvc Test 대신 실제 Url 호출 테스트 (서블릿 필터 테스트)

반응형

서블릿 필터를 테스트 하고 싶었는데 ... 
mockMvc 테스트로는 제대로 호출을 할수가 안됨. 

@SpringBootTest를 이용해 랜덤포트로 띄우고 restTemplate 으로 호출하면 되더라. 
간단한건데 바로 생각이 안나서 좀 삽질했음. 

@ActiveProfiles("sandbox")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class FilterTest @Autowired constructor(
    val restTemplate: TestRestTemplate
) {
    val internalUrl = "/api/v1/internal/use"

    @Test
    @DisplayName("appGw 통해서 internal api 호출시 403 응답 ")
    fun callInternalApiWithExternalHeader() {
        //Set the headers you need send
        val headers = HttpHeaders()
        headers.set(APP_GW_CHECK_HEADER, "{'id':'test'}")

        //Create a new HttpEntity
        val entity: HttpEntity<String> = HttpEntity<String>(headers)

        //Execute the method writing your HttpEntity to the request
        val response = restTemplate.exchange(
            internalUrl, HttpMethod.GET, entity,
            String::class.java
        )
        println(response.body)
        assertEquals(403, response.statusCode.value())
    }

    @Test
    @DisplayName("appGw 헤더 없이 internal api 호출시 200 응답 ")
    fun callInternalApiWithoutExternalHeader() {
        val response =
            restTemplate.postForEntity(
                internalUrl, "body", String::class.java
            )

        println(response.body)
        assertEquals(200, response.statusCode.value())
    }
}
반응형