diff --git a/vertx-core/src/test/java/io/vertx/tests/http/Http2Test.java b/vertx-core/src/test/java/io/vertx/tests/http/Http2Test.java index 2e193a3b1bd..9eb263bd32b 100644 --- a/vertx-core/src/test/java/io/vertx/tests/http/Http2Test.java +++ b/vertx-core/src/test/java/io/vertx/tests/http/Http2Test.java @@ -39,6 +39,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -1096,4 +1097,36 @@ private void request() { await(); } + + @Test + public void testClientKeepAliveTimeoutNoStreams() throws Exception { + server.close(); + server = vertx.createHttpServer(createBaseServerOptions().setInitialSettings(new Http2Settings().setMaxConcurrentStreams(0))); + server.requestHandler(req -> { + req.response().end(); + }); + startServer(); + client.close(); + AtomicBoolean closed = new AtomicBoolean(); + client = vertx + .httpClientBuilder() + .withConnectHandler(conn -> { + conn.closeHandler(v -> { + // We will have retry when the connection is closed + if (closed.compareAndSet(false, true)) { + client.close().onComplete(v2 -> { + testComplete(); + }); + } + }); + }) + .with(createBaseClientOptions().setHttp2KeepAliveTimeout(1)) + .build(); + client.request(requestOptions).onComplete(ar -> { + if (ar.succeeded()) { + ar.result().send(); + } + }); + await(); + } }