Работа моего сервера Vert.x, когда он получает недопустимые запросы, состоит в том, чтобы НЕ отправлять ответ, а только увеличивать связанную метрику. Как я могу проверить это?
Следующий код не работает, потому что, поскольку мы никогда не получаем ответ, код обработчика никогда не выполняется — я только что опубликовал его, чтобы показать вам, что я хочу в своем тесте.
@Test
void invalidUrlTest(Vertx vertx, VertxTestContext testContext) {
HttpRequest<String> request = WebClient
.create(vertx, this.webClientOptions)
.get(8080, "localhost", "/someinvalidaddress/")
.as(BodyCodec.string());
request.send(s -> {assertThat(meterRegistry.counter("invalid.request.counter")).isEqualTo(1.0);
});
Не уверен, почему ваш дескриптор не вызывается (может быть, ваш тест проваливается из-за отсутствия ctx.async()?) Но в любом случае вы можете попытаться использовать httpClient для своего вызова и установить обработчик исключений, когда вы делаете свое утверждение:
@Test
void invalidUrlTest(Vertx vertx, VertxTestContext ctx) {
Async async = ctx.async();
HttpClient client = vertx.createHttpClient();
client.get(8080,"localhost","/someinvalidaddress/")
.exceptionHandler(ex -> {
assertThat(meterRegistry.counter("invalid.request.counter")).isEqualTo(1.0);
async.complete();
}).end();
}
в этом случае проще всего установить тайм-аут для запроса. Таким образом, по истечении тайм-аута вы попадаете в обработчик исключений. клиент.получить(...).setTimeout()
Логика моего сервера такова: если он получает правильные запросы, он отправляет какой-то ответ. Если он получает неверный запрос, он не отправляет обратно никакого запроса. Как я понимаю, обработчик вызывается только после получения какого-то ответа. Но в моем случае, если запрос недействителен, ответ никогда не приходит, поэтому обработчик никогда не вызывается - это ответ на ваш вопрос, по крайней мере, я считаю, что так оно и работает :-)