Я установил тайм-аут для Netty на основе этого ответа , и он работает. Ниже я использую декларацию ChannelDuplexHandler
, которая немного отличается от предыдущего ответа, так что она возвращает 504 вместо 500:
fun channelDuplexHandler() = object : ChannelDuplexHandler() {
override fun userEventTriggered(ctx: ChannelHandlerContext, evt: Any) {
if (evt is IdleStateEvent) {
val connection = Connection.from(ctx.channel())
val ops = connection as ChannelOperations<*, *>?
if (ops != null) {
val response = DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.GATEWAY_TIMEOUT)
response.headers()
.setInt(HttpHeaderNames.CONTENT_LENGTH, 0)
.set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE)
ops.channel().writeAndFlush(response)
.addListener(ChannelFutureListener.CLOSE)
} else {
ctx.fireExceptionCaught(HttpServerErrorException(HttpStatus.GATEWAY_TIMEOUT))
ctx.close()
}
}
}
}
Теперь проблема, с которой я сталкиваюсь, заключается в написании интеграционный тест для проверки поведения. Действительно, когда я использую WebTestClient
для совершения вызова, initChannel
logi c никогда не достигается.
Почему поведение во время тестов отличается? Есть ли способ проверить этот лог c?