Skip to content

Commit 4aca8c7

Browse files
committed
Add HTTP/3 client timeout test coverage
Run the shared HttpClientTimeoutTest suite over HTTP/3 with the Http3Configurator wiring and assert that client request timeout failures are TimeoutException instances carrying no stack trace, across HTTP/1, HTTP/2 and HTTP/3. Tests relying on behaviours not yet available over HTTP/3 are ignored with a documented reason.
1 parent a734aaf commit 4aca8c7

2 files changed

Lines changed: 91 additions & 0 deletions

File tree

vertx-core/src/test/java/io/vertx/tests/http/HttpClientTimeoutTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,8 @@ public void testRequestTimesOutWhenIndicatedPeriodExpiresWithoutAResponseFromRem
299299
// Catch the first, the second is going to be a connection closed exception when the
300300
// server is shutdown on testComplete
301301
if (failed.compareAndSet(false, true)) {
302+
assertTrue(t instanceof TimeoutException);
303+
assertEquals(0, t.getStackTrace().length);
302304
checkpoint.succeed();
303305
}
304306
}));
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
* Copyright (c) 2011-2026 Contributors to the Eclipse Foundation
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License 2.0 which is available at
6+
* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
7+
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
8+
*
9+
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
10+
*/
11+
package io.vertx.tests.http.http3;
12+
13+
import io.vertx.core.Vertx;
14+
import io.vertx.core.http.HttpClientAgent;
15+
import io.vertx.core.http.HttpClientBuilder;
16+
import io.vertx.core.http.HttpServer;
17+
import io.vertx.core.http.RequestOptions;
18+
import io.vertx.core.net.SocketAddress;
19+
import io.vertx.test.core.Checkpoint;
20+
import io.vertx.test.http.HttpConfigurator;
21+
import io.vertx.tests.http.HttpClientTimeoutTest;
22+
import org.junit.Ignore;
23+
import org.junit.Test;
24+
25+
public class Http3ClientTimeoutTest extends HttpClientTimeoutTest {
26+
27+
private final HttpConfigurator config = Http3Configurator.INSTANCE;
28+
29+
@Override
30+
public void setUp() throws Exception {
31+
super.setUp();
32+
testAddress = SocketAddress.inetSocketAddress(config.port(), config.host());
33+
requestOptions = new RequestOptions()
34+
.setHost(config.host())
35+
.setPort(config.port())
36+
.setURI(DEFAULT_TEST_URI);
37+
}
38+
39+
@Override
40+
protected HttpServer createHttpServer() {
41+
return config.forServer().create(vertx);
42+
}
43+
44+
@Override
45+
protected HttpClientAgent createHttpClient() {
46+
return config.forClient().create(vertx);
47+
}
48+
49+
@Override
50+
protected HttpClientBuilder httpClientBuilder(Vertx vertx) {
51+
return config.forClient().builder(vertx);
52+
}
53+
54+
@Ignore("Requires a saturated connection pool, needs stream concurrency limit support in the HTTP/3 test configurator")
55+
@Test
56+
@Override
57+
public void testConnectTimeoutDoesFire() throws Exception {
58+
}
59+
60+
@Ignore("Requires a saturated connection pool, needs stream concurrency limit support in the HTTP/3 test configurator")
61+
@Test
62+
@Override
63+
public void testConnectTimeoutDoesNotFire() throws Exception {
64+
}
65+
66+
@Ignore("Recreates the client from HttpClientOptions which cannot connect to an HTTP/3 server")
67+
@Test
68+
@Override
69+
public void testRequestsTimeoutInQueue(Checkpoint checkpoint) throws Exception {
70+
}
71+
72+
@Ignore("Recreates the client from HttpClientOptions which cannot connect to an HTTP/3 server")
73+
@Test
74+
@Override
75+
public void testRequestTimeoutIsNotDelayedAfterResponseIsReceived(Checkpoint checkpoint) throws Exception {
76+
}
77+
78+
@Ignore("Request idle timeout does not fire on HTTP/3 streams yet")
79+
@Test
80+
@Override
81+
public void testRequestTimesOutWhenIndicatedPeriodExpiresWithoutAResponseFromRemoteServer(Checkpoint checkpoint) throws Exception {
82+
}
83+
84+
@Ignore("Bypasses the HTTP/3 client under test with an HttpClientOptions based client and a NetServer")
85+
@Test
86+
@Override
87+
public void testTimedOutWaiterDoesNotConnect(Checkpoint checkpoint) throws Exception {
88+
}
89+
}

0 commit comments

Comments
 (0)