diff --git a/vertx-core/src/main/java/io/vertx/core/http/impl/Http1xClientConnection.java b/vertx-core/src/main/java/io/vertx/core/http/impl/Http1xClientConnection.java index fce6fb5f218..64b5a1f1852 100644 --- a/vertx-core/src/main/java/io/vertx/core/http/impl/Http1xClientConnection.java +++ b/vertx-core/src/main/java/io/vertx/core/http/impl/Http1xClientConnection.java @@ -1000,7 +1000,7 @@ synchronized void toWebSocket( WebSocketHandshakeInboundHandler handshakeInboundHandler = new WebSocketHandshakeInboundHandler(handshaker, upgrade); p.addBefore("handler", "handshakeCompleter", handshakeInboundHandler); upgrade.addListener((GenericFutureListener>) future -> { - if (timer > 0L) { + if (timer > -1L) { vertx.cancelTimer(timer); } if (future.isSuccess()) { diff --git a/vertx-core/src/test/java/io/vertx/tests/http/WebSocketTest.java b/vertx-core/src/test/java/io/vertx/tests/http/WebSocketTest.java index a67bc320588..914b1c5e96d 100644 --- a/vertx-core/src/test/java/io/vertx/tests/http/WebSocketTest.java +++ b/vertx-core/src/test/java/io/vertx/tests/http/WebSocketTest.java @@ -1722,7 +1722,7 @@ public List getReceivedExceptions() { } @Test - public void testHandshakeTimeout() throws Exception { + public void testHandshakeTimeoutFires() throws Exception { NetServer server = vertx.createNetServer() .connectHandler(so -> { @@ -1746,6 +1746,32 @@ public void testHandshakeTimeout() throws Exception { } } + @Test + public void testHandshakeTimeoutDoesNotFire() throws Exception { + server = vertx.createHttpServer() + .webSocketHandler(ws -> { + + }); + server + .listen(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST) + .await(); + client = vertx.createWebSocketClient(new WebSocketClientOptions().setConnectTimeout(1000)); + WebSocketConnectOptions options = new WebSocketConnectOptions() + .setPort(DEFAULT_HTTP_PORT) + .setHost(DEFAULT_HTTP_HOST) + .setURI("/") + .setTimeout(1000); + client.connect(options).onComplete(onSuccess(ws -> { + AtomicBoolean closed = new AtomicBoolean(); + ws.closeHandler(v -> closed.set(true)); + vertx.setTimer(1100, id -> { + assertFalse(closed.get()); + testComplete(); + }); + })); + await(); + } + private void connectUntilWebSocketReject(WebSocketClient client, int count, Handler> doneHandler) { vertx.runOnContext(v -> { client.connect(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/some/path").onComplete(ar -> {