mirror of
https://github.com/openjdk/jdk.git
synced 2026-06-06 10:42:45 +00:00
8378565: Refactor test/jdk/java/net/httpclient/http3/*.java TestNG tests to JUnit
Reviewed-by: vyazici
This commit is contained in:
parent
da99f1a330
commit
7b5b70c9cb
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,7 +26,7 @@
|
||||
* @bug 8157105
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @run testng/othervm/timeout=60 -Djavax.net.debug=ssl -Djdk.httpclient.HttpClient.log=all BadCipherSuiteErrorTest
|
||||
* @run junit/othervm/timeout=60 -Djavax.net.debug=ssl -Djdk.httpclient.HttpClient.log=all BadCipherSuiteErrorTest
|
||||
* @summary check exception thrown when bad TLS parameters selected
|
||||
*/
|
||||
|
||||
@ -49,7 +49,7 @@ import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* When selecting an unacceptable cipher suite the TLS handshake will fail.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2018, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,17 +27,13 @@
|
||||
* @build jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* jdk.test.lib.net.SimpleSSLContext
|
||||
* @compile ../ReferenceTracker.java
|
||||
* @run testng/othervm -Djdk.internal.httpclient.debug=true H3BadHeadersTest
|
||||
* @run junit/othervm -Djdk.internal.httpclient.debug=true H3BadHeadersTest
|
||||
* @summary this test verifies the behaviour of the HttpClient when presented
|
||||
* with bad headers
|
||||
*/
|
||||
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.annotations.Test;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -57,10 +53,17 @@ import java.util.concurrent.ExecutionException;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static java.util.List.of;
|
||||
import static java.util.Map.entry;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
|
||||
@ -76,14 +79,13 @@ public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
static final ReferenceTracker TRACKER = ReferenceTracker.INSTANCE;
|
||||
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
HttpTestServer http3TestServer; // HTTP/3 ( h3 only )
|
||||
HttpTestServer https2TestServer; // HTTP/2 ( h2 + h3 )
|
||||
String http3URI;
|
||||
String https2URI;
|
||||
private static HttpTestServer http3TestServer; // HTTP/3 ( h3 only )
|
||||
private static HttpTestServer https2TestServer; // HTTP/2 ( h2 + h3 )
|
||||
private static String http3URI;
|
||||
private static String https2URI;
|
||||
|
||||
|
||||
@DataProvider(name = "variants")
|
||||
public Object[][] variants() {
|
||||
public static Object[][] variants() {
|
||||
return new Object[][] {
|
||||
{ http3URI, false},
|
||||
{ https2URI, false},
|
||||
@ -93,7 +95,8 @@ public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
|
||||
@Test(dataProvider = "variants")
|
||||
@ParameterizedTest
|
||||
@MethodSource("variants")
|
||||
void test(String uri,
|
||||
boolean sameClient)
|
||||
throws Exception
|
||||
@ -126,8 +129,8 @@ public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
.HEAD().setOption(H3_DISCOVERY, config).build();
|
||||
System.out.println("\nSending HEAD request: " + head);
|
||||
var headResponse = client.send(head, BodyHandlers.ofString());
|
||||
assertEquals(headResponse.statusCode(), 200);
|
||||
assertEquals(headResponse.version(), Version.HTTP_2);
|
||||
assertEquals(200, headResponse.statusCode());
|
||||
assertEquals(Version.HTTP_2, headResponse.version());
|
||||
}
|
||||
|
||||
URI uriWithQuery = URI.create(uri + "?BAD_HEADERS=" + i);
|
||||
@ -163,7 +166,8 @@ public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
System.err.printf("%ntest %s, %s, DONE%n%n", uri, sameClient);
|
||||
}
|
||||
|
||||
@Test(dataProvider = "variants")
|
||||
@ParameterizedTest
|
||||
@MethodSource("variants")
|
||||
void testAsync(String uri,
|
||||
boolean sameClient) throws Exception
|
||||
{
|
||||
@ -199,8 +203,8 @@ public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
System.out.println("\nSending HEAD request: " + head);
|
||||
|
||||
var headResponse = client.send(head, BodyHandlers.ofString());
|
||||
assertEquals(headResponse.statusCode(), 200);
|
||||
assertEquals(headResponse.version(), Version.HTTP_2);
|
||||
assertEquals(200, headResponse.statusCode());
|
||||
assertEquals(Version.HTTP_2, headResponse.version());
|
||||
}
|
||||
|
||||
URI uriWithQuery = URI.create(uri + "?BAD_HEADERS=" + i);
|
||||
@ -246,8 +250,7 @@ public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
// sync with implementation.
|
||||
static void assertDetailMessage(Throwable throwable, int iterationIndex) {
|
||||
try {
|
||||
assertTrue(throwable instanceof IOException,
|
||||
"Expected IOException, got, " + throwable);
|
||||
assertInstanceOf(IOException.class, throwable, "Expected IOException, got, " + throwable);
|
||||
assertNotNull(throwable.getMessage(), "No message for " + throwable);
|
||||
assertTrue(throwable.getMessage().contains("malformed response"),
|
||||
"Expected \"malformed response\" in: " + throwable.getMessage());
|
||||
@ -269,8 +272,8 @@ public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
}
|
||||
}
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws Exception {
|
||||
@BeforeAll
|
||||
public static void setup() throws Exception {
|
||||
System.out.println("creating servers");
|
||||
http3TestServer = HttpTestServer.create(Http3DiscoveryMode.HTTP_3_URI_ONLY, sslContext);
|
||||
http3TestServer.addHandler(new BadHeadersHandler(), "/http3/echo");
|
||||
@ -285,8 +288,8 @@ public class H3BadHeadersTest implements HttpServerAdapters {
|
||||
System.out.println("server started");
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void teardown() throws Exception {
|
||||
@AfterAll
|
||||
public static void teardown() throws Exception {
|
||||
System.err.println("\n\n**** stopping servers\n");
|
||||
System.out.println("stopping servers");
|
||||
http3TestServer.stop();
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
* jdk.test.lib.Asserts
|
||||
* jdk.test.lib.Utils
|
||||
* jdk.test.lib.net.SimpleSSLContext
|
||||
* @run testng/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors
|
||||
* @run junit/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* H3BasicTest
|
||||
*/
|
||||
@ -60,7 +60,6 @@ import jdk.httpclient.test.lib.http2.Http2TestServer;
|
||||
import jdk.httpclient.test.lib.http3.Http3TestServer;
|
||||
import jdk.test.lib.RandomFactory;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.Test;
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.ALT_SVC;
|
||||
@ -70,6 +69,8 @@ import static jdk.test.lib.Asserts.assertFileContentsEqual;
|
||||
import static jdk.test.lib.Utils.createTempFile;
|
||||
import static jdk.test.lib.Utils.createTempFileOfSize;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3BasicTest implements HttpServerAdapters {
|
||||
|
||||
private static final Random RANDOM = RandomFactory.getRandom();
|
||||
@ -151,7 +152,7 @@ public class H3BasicTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void test() throws Exception {
|
||||
public void test() throws Exception {
|
||||
try {
|
||||
initialize();
|
||||
System.out.println("servers initialized");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=errors,requests,responses,trace
|
||||
* -Djdk.httpclient.http3.maxConcurrentPushStreams=45
|
||||
@ -73,17 +73,18 @@ import java.util.function.Supplier;
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.internal.net.http.common.Utils;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.ALT_SVC;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.ANY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
|
||||
@ -92,7 +93,7 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
static final PrintStream err = System.err;
|
||||
static final PrintStream out = System.out;
|
||||
|
||||
static Map<String,String> PUSH_PROMISES = Map.of(
|
||||
static final Map<String,String> PUSH_PROMISES = Map.of(
|
||||
"/x/y/z/1", "the first push promise body",
|
||||
"/x/y/z/2", "the second push promise body",
|
||||
"/x/y/z/3", "the third push promise body",
|
||||
@ -105,13 +106,13 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
);
|
||||
static final String MAIN_RESPONSE_BODY = "the main response body";
|
||||
|
||||
HttpTestServer server;
|
||||
URI uri;
|
||||
URI headURI;
|
||||
ServerPushHandler pushHandler;
|
||||
private static HttpTestServer server;
|
||||
private static URI uri;
|
||||
private static URI headURI;
|
||||
private static ServerPushHandler pushHandler;
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws Exception {
|
||||
@BeforeAll
|
||||
public static void setup() throws Exception {
|
||||
server = HttpTestServer.create(ANY, SimpleSSLContext.findSSLContext());
|
||||
pushHandler = new ServerPushHandler(MAIN_RESPONSE_BODY, PUSH_PROMISES);
|
||||
server.addHandler(pushHandler, "/push/");
|
||||
@ -122,14 +123,14 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
headURI = new URI("https://" + server.serverAuthority() + "/head/x");
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void teardown() {
|
||||
@AfterAll
|
||||
public static void teardown() {
|
||||
server.stop();
|
||||
}
|
||||
|
||||
static <T> HttpResponse<T> assert200ResponseCode(HttpResponse<T> response) {
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -137,8 +138,8 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
HttpRequest headRequest = HttpRequest.newBuilder(headURI)
|
||||
.HEAD().version(Version.HTTP_2).build();
|
||||
var headResponse = client.send(headRequest, BodyHandlers.ofString());
|
||||
assertEquals(headResponse.statusCode(), 200);
|
||||
assertEquals(headResponse.version(), Version.HTTP_2);
|
||||
assertEquals(200, headResponse.statusCode());
|
||||
assertEquals(Version.HTTP_2, headResponse.version());
|
||||
}
|
||||
|
||||
static final class TestPushPromiseHandler<T> implements PushPromiseHandler<T> {
|
||||
@ -233,16 +234,16 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
|
||||
promises.forEach((request, value) -> {
|
||||
HttpResponse<String> response = value.join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(200, response.statusCode());
|
||||
if (PUSH_PROMISES.containsKey(request.uri().getPath())) {
|
||||
assertEquals(response.body(), PUSH_PROMISES.get(request.uri().getPath()));
|
||||
assertEquals(PUSH_PROMISES.get(request.uri().getPath()), response.body());
|
||||
} else {
|
||||
assertEquals(response.body(), MAIN_RESPONSE_BODY);
|
||||
assertEquals(MAIN_RESPONSE_BODY, response.body());
|
||||
}
|
||||
});
|
||||
|
||||
int expectedPushes = Math.min(PUSH_PROMISES.size(), maxPushes) + 5;
|
||||
assertEquals(promises.size(), expectedPushes);
|
||||
assertEquals(expectedPushes, promises.size());
|
||||
|
||||
promises.clear();
|
||||
|
||||
@ -251,12 +252,12 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
client.sendAsync(HttpRequest.newBuilder(uri).build(), BodyHandlers.ofString())
|
||||
.thenApply(H3ConcurrentPush::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
} catch (CompletionException c) {
|
||||
throw new AssertionError(c.getCause());
|
||||
}
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
|
||||
// Send with no promise handler, but use pushId bigger than allowed.
|
||||
// This should cause the connection to get closed
|
||||
@ -268,7 +269,7 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
client.sendAsync(bigger, BodyHandlers.ofString())
|
||||
.thenApply(H3ConcurrentPush::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
throw new AssertionError("Expected IOException not thrown");
|
||||
} catch (CompletionException c) {
|
||||
@ -287,7 +288,7 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
throw new AssertionError("Unexpected exception: " + c.getCause(), c.getCause());
|
||||
}
|
||||
}
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
|
||||
// the next time around we should have a new connection,
|
||||
// so we can restart from scratch
|
||||
@ -298,7 +299,7 @@ public class H3ConcurrentPush implements HttpServerAdapters {
|
||||
var error = errors.stream().findFirst().orElse(null);
|
||||
if (error != null) throw error;
|
||||
var notified = custom.notified;
|
||||
assertEquals(notified.size(), 9*4*2, "Unexpected notification: " + notified);
|
||||
assertEquals(9*4*2, notified.size(), "Unexpected notification: " + notified);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
* jdk.test.lib.Asserts
|
||||
* jdk.test.lib.Utils
|
||||
* jdk.test.lib.net.SimpleSSLContext
|
||||
* @run testng/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors,http3,quic:hs
|
||||
* @run junit/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors,http3,quic:hs
|
||||
* -Djdk.internal.httpclient.debug=false
|
||||
* H3ConnectionPoolTest
|
||||
*/
|
||||
@ -53,7 +53,6 @@ import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.httpclient.test.lib.http2.Http2TestServer;
|
||||
import jdk.httpclient.test.lib.http3.Http3TestServer;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpClient.Version.HTTP_2;
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
@ -65,6 +64,8 @@ import static jdk.test.lib.Asserts.assertEquals;
|
||||
import static jdk.test.lib.Asserts.assertNotEquals;
|
||||
import static jdk.test.lib.Asserts.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3ConnectionPoolTest implements HttpServerAdapters {
|
||||
|
||||
private static final String CLASS_NAME = H3ConnectionPoolTest.class.getSimpleName();
|
||||
@ -172,7 +173,7 @@ public class H3ConnectionPoolTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testH3Only() throws Exception {
|
||||
public void testH3Only() throws Exception {
|
||||
System.out.println("\nTesting HTTP/3 only");
|
||||
initialize(true);
|
||||
try (HttpClient client = getClient()) {
|
||||
@ -212,12 +213,12 @@ public class H3ConnectionPoolTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testH2H3WithTwoAltSVC() throws Exception {
|
||||
public void testH2H3WithTwoAltSVC() throws Exception {
|
||||
testH2H3(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testH2H3WithAltSVCOnSamePort() throws Exception {
|
||||
public void testH2H3WithAltSVCOnSamePort() throws Exception {
|
||||
testH2H3(true);
|
||||
}
|
||||
|
||||
@ -309,7 +310,7 @@ public class H3ConnectionPoolTest implements HttpServerAdapters {
|
||||
// fourth request with HTTP_3_URI_ONLY should reuse the first connection,
|
||||
// and not reuse the second.
|
||||
HttpRequest request4 = req1Builder.copy().build();
|
||||
HttpResponse<String> response4 = client.send(request1, BodyHandlers.ofString());
|
||||
HttpResponse<String> response4 = client.send(request4, BodyHandlers.ofString());
|
||||
assertEquals(HTTP_3, response4.version());
|
||||
assertEquals(response4.connectionLabel().get(), response1.connectionLabel().get());
|
||||
assertNotEquals(response4.connectionLabel().get(), response3.connectionLabel().get());
|
||||
@ -345,12 +346,12 @@ public class H3ConnectionPoolTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testParallelH2H3WithTwoAltSVC() throws Exception {
|
||||
public void testParallelH2H3WithTwoAltSVC() throws Exception {
|
||||
testH2H3Concurrent(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testParallelH2H3WithAltSVCOnSamePort() throws Exception {
|
||||
public void testParallelH2H3WithAltSVCOnSamePort() throws Exception {
|
||||
testH2H3Concurrent(true);
|
||||
}
|
||||
|
||||
|
||||
@ -36,7 +36,7 @@
|
||||
* JTreg on Tier 7 so that, if the client becomes wedged again, the
|
||||
* JTreg timeout handlers can collect more diagnostic information.
|
||||
*
|
||||
* @run testng/othervm -Djdk.internal.httpclient.debug=err
|
||||
* @run junit/othervm -Djdk.internal.httpclient.debug=err
|
||||
* -Djdk.httpclient.HttpClient.log=ssl,headers,requests,responses,errors
|
||||
* -Djdk.httpclient.quic.idleTimeout=666666
|
||||
* -Djdk.test.server.quic.idleTimeout=666666
|
||||
@ -69,7 +69,7 @@ import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static jdk.test.lib.Asserts.assertFileContentsEqual;
|
||||
import static jdk.test.lib.Utils.createTempFileOfSize;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3FixedThreadPoolTest implements HttpServerAdapters {
|
||||
|
||||
@ -118,7 +118,7 @@ public class H3FixedThreadPoolTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void test() throws Exception {
|
||||
public void test() throws Exception {
|
||||
try {
|
||||
initialize();
|
||||
simpleTest(false);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2022, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,7 +29,6 @@ import java.net.http.HttpClient.Version;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.net.http.HttpResponse.BodyHandlers;
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
@ -39,16 +38,16 @@ import jdk.httpclient.test.lib.http3.Http3TestServer;
|
||||
import jdk.httpclient.test.lib.quic.QuicServer;
|
||||
import jdk.internal.net.http.Http3ConnectionAccess;
|
||||
import jdk.internal.net.http.http3.ConnectionSettings;
|
||||
import jdk.test.lib.Utils;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @summary Verifies that the HTTP client respects the SETTINGS_MAX_FIELD_SECTION_SIZE setting on HTTP3 connection
|
||||
@ -57,7 +56,7 @@ import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @build java.net.http/jdk.internal.net.http.Http3ConnectionAccess
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=requests,responses,errors H3HeaderSizeLimitTest
|
||||
*/
|
||||
@ -65,11 +64,11 @@ public class H3HeaderSizeLimitTest implements HttpServerAdapters {
|
||||
|
||||
private static final long HEADER_SIZE_LIMIT_BYTES = 1024;
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
private HttpTestServer h3Server;
|
||||
private String requestURIBase;
|
||||
private static HttpTestServer h3Server;
|
||||
private static String requestURIBase;
|
||||
|
||||
@BeforeClass
|
||||
public void beforeClass() throws Exception {
|
||||
@BeforeAll
|
||||
public static void beforeClass() throws Exception {
|
||||
final QuicServer quicServer = Http3TestServer.quicServerBuilder()
|
||||
.sslContext(sslContext)
|
||||
.build();
|
||||
@ -82,8 +81,8 @@ public class H3HeaderSizeLimitTest implements HttpServerAdapters {
|
||||
.port(h3Server.getAddress().getPort()).build().toString();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void afterClass() throws Exception {
|
||||
@AfterAll
|
||||
public static void afterClass() throws Exception {
|
||||
if (h3Server != null) {
|
||||
System.out.println("Stopping server " + h3Server.getAddress());
|
||||
h3Server.stop();
|
||||
@ -111,7 +110,7 @@ public class H3HeaderSizeLimitTest implements HttpServerAdapters {
|
||||
final HttpResponse<Void> response = client.send(
|
||||
reqBuilder.build(),
|
||||
BodyHandlers.discarding());
|
||||
Assert.assertEquals(response.statusCode(), 200, "Unexpected status code");
|
||||
Assertions.assertEquals(200, response.statusCode(), "Unexpected status code");
|
||||
if (i == 3) {
|
||||
var cf = Http3ConnectionAccess.peerSettings(client, response);
|
||||
if (!cf.isDone()) {
|
||||
@ -131,14 +130,14 @@ public class H3HeaderSizeLimitTest implements HttpServerAdapters {
|
||||
}
|
||||
final HttpRequest request = reqBuilder.build();
|
||||
System.out.println("Issuing request to " + reqURI);
|
||||
final IOException thrown = Assert.expectThrows(ProtocolException.class,
|
||||
final IOException thrown = Assertions.assertThrows(ProtocolException.class,
|
||||
() -> client.send(request, BodyHandlers.discarding()));
|
||||
if (!thrown.getMessage().equals("Request headers size exceeds limit set by peer")) {
|
||||
throw thrown;
|
||||
}
|
||||
// test same with async
|
||||
System.out.println("Issuing async request to " + reqURI);
|
||||
final ExecutionException asyncThrown = Assert.expectThrows(ExecutionException.class,
|
||||
final ExecutionException asyncThrown = Assertions.assertThrows(ExecutionException.class,
|
||||
() -> client.sendAsync(request, BodyHandlers.discarding()).get());
|
||||
if (!(asyncThrown.getCause() instanceof ProtocolException)) {
|
||||
System.err.println("Received unexpected cause");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,7 +27,7 @@
|
||||
* @build jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* jdk.test.lib.net.SimpleSSLContext
|
||||
* @compile ../ReferenceTracker.java
|
||||
* @run testng/othervm -Djdk.httpclient.qpack.encoderTableCapacityLimit=4096
|
||||
* @run junit/othervm -Djdk.httpclient.qpack.encoderTableCapacityLimit=4096
|
||||
* -Djdk.httpclient.qpack.decoderMaxTableCapacity=4096
|
||||
* -Dhttp3.test.server.encoderAllowedHeaders=*
|
||||
* -Dhttp3.test.server.decoderMaxTableCapacity=4096
|
||||
@ -40,9 +40,6 @@
|
||||
|
||||
import jdk.test.lib.RandomFactory;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.IOException;
|
||||
@ -72,17 +69,21 @@ import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static jdk.httpclient.test.lib.common.HttpServerAdapters.*;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3HeadersEncoding {
|
||||
|
||||
private static final int REQUESTS_COUNT = 500;
|
||||
private static final int HEADERS_PER_REQUEST = 20;
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
HttpTestServer http3TestServer;
|
||||
HeadersHandler serverHeadersHandler;
|
||||
String http3URI;
|
||||
private static HttpTestServer http3TestServer;
|
||||
private static HeadersHandler serverHeadersHandler;
|
||||
private static String http3URI;
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws Exception {
|
||||
@BeforeAll
|
||||
public static void setup() throws Exception {
|
||||
System.out.println("Creating servers");
|
||||
http3TestServer = HttpTestServer.create(Http3DiscoveryMode.HTTP_3_URI_ONLY, sslContext);
|
||||
serverHeadersHandler = new HeadersHandler();
|
||||
@ -92,8 +93,8 @@ public class H3HeadersEncoding {
|
||||
http3TestServer.start();
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void tearDown() {
|
||||
@AfterAll
|
||||
public static void tearDown() {
|
||||
http3TestServer.stop();
|
||||
}
|
||||
|
||||
@ -272,7 +273,7 @@ public class H3HeadersEncoding {
|
||||
}
|
||||
|
||||
|
||||
private class HeadersHandler implements HttpTestHandler {
|
||||
private static class HeadersHandler implements HttpTestHandler {
|
||||
@Override
|
||||
public void handle(HttpTestExchange t) throws IOException {
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=errors,requests,responses,trace
|
||||
* H3ImplicitPushCancel
|
||||
@ -56,17 +56,18 @@ import java.util.concurrent.ConcurrentMap;
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.internal.net.http.common.Utils;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.ANY;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3ImplicitPushCancel implements HttpServerAdapters {
|
||||
|
||||
static Map<String,String> PUSH_PROMISES = Map.of(
|
||||
static final Map<String,String> PUSH_PROMISES = Map.of(
|
||||
"/x/y/z/1", "the first push promise body",
|
||||
"/x/y/z/2", "the second push promise body",
|
||||
"/x/y/z/3", "the third push promise body",
|
||||
@ -79,12 +80,12 @@ public class H3ImplicitPushCancel implements HttpServerAdapters {
|
||||
);
|
||||
static final String MAIN_RESPONSE_BODY = "the main response body";
|
||||
|
||||
HttpTestServer server;
|
||||
URI uri;
|
||||
URI headURI;
|
||||
private static HttpTestServer server;
|
||||
private static URI uri;
|
||||
private static URI headURI;
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws Exception {
|
||||
@BeforeAll
|
||||
public static void setup() throws Exception {
|
||||
server = HttpTestServer.create(ANY, SimpleSSLContext.findSSLContext());
|
||||
HttpTestHandler pushHandler = new ServerPushHandler(MAIN_RESPONSE_BODY,
|
||||
PUSH_PROMISES);
|
||||
@ -96,14 +97,14 @@ public class H3ImplicitPushCancel implements HttpServerAdapters {
|
||||
headURI = new URI("https://" + server.serverAuthority() + "/head/x");
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void teardown() {
|
||||
@AfterAll
|
||||
public static void teardown() {
|
||||
server.stop();
|
||||
}
|
||||
|
||||
static <T> HttpResponse<T> assert200ResponseCode(HttpResponse<T> response) {
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -111,8 +112,8 @@ public class H3ImplicitPushCancel implements HttpServerAdapters {
|
||||
HttpRequest headRequest = HttpRequest.newBuilder(headURI)
|
||||
.HEAD().version(Version.HTTP_2).build();
|
||||
var headResponse = client.send(headRequest, BodyHandlers.ofString());
|
||||
assertEquals(headResponse.statusCode(), 200);
|
||||
assertEquals(headResponse.version(), Version.HTTP_2);
|
||||
assertEquals(200, headResponse.statusCode());
|
||||
assertEquals(Version.HTTP_2, headResponse.version());
|
||||
}
|
||||
|
||||
/*
|
||||
@ -136,7 +137,7 @@ public class H3ImplicitPushCancel implements HttpServerAdapters {
|
||||
.build(), BodyHandlers.ofString())
|
||||
.thenApply(H3ImplicitPushCancel::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
System.out.println("Got result before error was raised");
|
||||
throw new AssertionError("should have failed");
|
||||
@ -171,14 +172,14 @@ public class H3ImplicitPushCancel implements HttpServerAdapters {
|
||||
promises.putIfAbsent(main.request(), CompletableFuture.completedFuture(main));
|
||||
promises.forEach((request, value) -> {
|
||||
HttpResponse<String> response = value.join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(200, response.statusCode());
|
||||
if (PUSH_PROMISES.containsKey(request.uri().getPath())) {
|
||||
assertEquals(response.body(), PUSH_PROMISES.get(request.uri().getPath()));
|
||||
assertEquals(PUSH_PROMISES.get(request.uri().getPath()), response.body());
|
||||
} else {
|
||||
assertEquals(response.body(), MAIN_RESPONSE_BODY);
|
||||
assertEquals(MAIN_RESPONSE_BODY, response.body());
|
||||
}
|
||||
});
|
||||
assertEquals(promises.size(), PUSH_PROMISES.size() + 1);
|
||||
assertEquals(PUSH_PROMISES.size() + 1, promises.size());
|
||||
|
||||
promises.clear();
|
||||
|
||||
@ -187,13 +188,13 @@ public class H3ImplicitPushCancel implements HttpServerAdapters {
|
||||
client.sendAsync(HttpRequest.newBuilder(uri).build(), BodyHandlers.ofString())
|
||||
.thenApply(H3ImplicitPushCancel::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
} catch (CompletionException c) {
|
||||
throw new AssertionError(c.getCause());
|
||||
}
|
||||
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,13 +27,8 @@ import jdk.httpclient.test.lib.quic.QuicServer;
|
||||
import jdk.internal.net.http.http3.ConnectionSettings;
|
||||
import jdk.internal.net.http.qpack.Encoder;
|
||||
import jdk.internal.net.http.qpack.TableEntry;
|
||||
import jdk.test.lib.Utils;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.IOException;
|
||||
@ -44,12 +39,16 @@ import java.net.http.HttpClient;
|
||||
import java.net.http.HttpClient.Version;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse.BodyHandlers;
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @summary Verifies that the HTTP client respects the maxLiteralWithIndexing
|
||||
@ -59,7 +58,7 @@ import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @build java.net.http/jdk.internal.net.http.Http3ConnectionAccess
|
||||
* @run testng/othervm -Djdk.httpclient.qpack.encoderTableCapacityLimit=4096
|
||||
* @run junit/othervm -Djdk.httpclient.qpack.encoderTableCapacityLimit=4096
|
||||
* -Djdk.internal.httpclient.qpack.allowBlockingEncoding=true
|
||||
* -Djdk.httpclient.qpack.decoderMaxTableCapacity=4096
|
||||
* -Djdk.httpclient.qpack.decoderBlockedStreams=1024
|
||||
@ -75,8 +74,8 @@ public class H3InsertionsLimitTest implements HttpServerAdapters {
|
||||
private static final long HEADER_SIZE_LIMIT_BYTES = 8192;
|
||||
private static final long MAX_SERVER_DT_CAPACITY = 4096;
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
private HttpTestServer h3Server;
|
||||
private String requestURIBase;
|
||||
private static HttpTestServer h3Server;
|
||||
private static String requestURIBase;
|
||||
public static final long MAX_LITERALS_WITH_INDEXING = 32L;
|
||||
private static final CountDownLatch WAIT_FOR_FAILURE = new CountDownLatch(1);
|
||||
|
||||
@ -120,8 +119,8 @@ public class H3InsertionsLimitTest implements HttpServerAdapters {
|
||||
exchange.sendResponseHeaders(200, 0);
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public void beforeClass() throws Exception {
|
||||
@BeforeAll
|
||||
public static void beforeClass() throws Exception {
|
||||
final QuicServer quicServer = Http3TestServer.quicServerBuilder()
|
||||
.bindAddress(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0))
|
||||
.sslContext(sslContext)
|
||||
@ -138,8 +137,8 @@ public class H3InsertionsLimitTest implements HttpServerAdapters {
|
||||
.port(h3Server.getAddress().getPort()).build().toString();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void afterClass() throws Exception {
|
||||
@AfterAll
|
||||
public static void afterClass() throws Exception {
|
||||
if (h3Server != null) {
|
||||
System.out.println("Stopping server " + h3Server.getAddress());
|
||||
h3Server.stop();
|
||||
@ -161,10 +160,10 @@ public class H3InsertionsLimitTest implements HttpServerAdapters {
|
||||
System.out.println("Issuing request to " + reqURI);
|
||||
try {
|
||||
client.send(request, BodyHandlers.discarding());
|
||||
Assert.fail("IOException expected");
|
||||
Assertions.fail("IOException expected");
|
||||
} catch (IOException ioe) {
|
||||
System.out.println("Got IOException: " + ioe);
|
||||
Assert.assertTrue(ioe.getMessage()
|
||||
Assertions.assertTrue(ioe.getMessage()
|
||||
.contains("Too many literal with indexing"));
|
||||
} finally {
|
||||
WAIT_FOR_FAILURE.countDown();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2025, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,10 +24,8 @@
|
||||
import java.io.IOException;
|
||||
import java.net.BindException;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpOption;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.net.http.HttpResponse.BodyHandlers;
|
||||
@ -44,16 +42,16 @@ import javax.net.ssl.SSLContext;
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.internal.net.http.quic.QuicConnectionImpl;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpClient.Builder.NO_PROXY;
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/*
|
||||
* @test
|
||||
@ -63,7 +61,7 @@ import static org.testng.Assert.*;
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.httpclient.HttpClient.log=errors
|
||||
* H3LogHandshakeErrors
|
||||
*/
|
||||
@ -71,14 +69,14 @@ import static org.testng.Assert.*;
|
||||
public class H3LogHandshakeErrors implements HttpServerAdapters {
|
||||
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
private HttpTestServer h3Server;
|
||||
private ServerSocket tcpServerSocket = null;
|
||||
private Thread tcpServerThread = null;
|
||||
private String requestURI;
|
||||
private static HttpTestServer h3Server;
|
||||
private static ServerSocket tcpServerSocket = null;
|
||||
private static Thread tcpServerThread = null;
|
||||
private static String requestURI;
|
||||
private static Logger clientLogger;
|
||||
|
||||
@BeforeClass
|
||||
public void beforeClass() throws Exception {
|
||||
@BeforeAll
|
||||
public static void beforeClass() throws Exception {
|
||||
// create an H3 only server
|
||||
h3Server = HttpTestServer.create(HTTP_3_URI_ONLY, sslContext);
|
||||
h3Server.addHandler((exchange) -> exchange.sendResponseHeaders(200, 0), "/hello");
|
||||
@ -113,8 +111,8 @@ public class H3LogHandshakeErrors implements HttpServerAdapters {
|
||||
}
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void afterClass() throws Exception {
|
||||
@AfterAll
|
||||
public static void afterClass() throws Exception {
|
||||
if (h3Server != null) {
|
||||
System.out.println("Stopping server " + h3Server.getAddress());
|
||||
h3Server.stop();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -30,9 +30,6 @@ import jdk.internal.net.http.quic.streams.QuicBidiStream;
|
||||
import jdk.internal.net.quic.QuicVersion;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.IOException;
|
||||
@ -52,7 +49,11 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/*
|
||||
* @test
|
||||
@ -62,7 +63,7 @@ import static org.testng.Assert.*;
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @build java.net.http/jdk.internal.net.http.Http3ConnectionAccess
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=requests,responses,errors
|
||||
* -Djdk.httpclient.quic.maxStreamInitialData=16384
|
||||
@ -71,11 +72,11 @@ import static org.testng.Assert.*;
|
||||
public class H3MemoryHandlingTest implements HttpServerAdapters {
|
||||
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
private QuicStandaloneServer server;
|
||||
private String requestURIBase;
|
||||
private static QuicStandaloneServer server;
|
||||
private static String requestURIBase;
|
||||
|
||||
@BeforeClass
|
||||
public void beforeClass() throws Exception {
|
||||
@BeforeAll
|
||||
public static void beforeClass() throws Exception {
|
||||
server = QuicStandaloneServer.newBuilder()
|
||||
.availableVersions(new QuicVersion[]{QuicVersion.QUIC_V1})
|
||||
.sslContext(sslContext)
|
||||
@ -87,8 +88,8 @@ public class H3MemoryHandlingTest implements HttpServerAdapters {
|
||||
.port(server.getAddress().getPort()).build().toString();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void afterClass() throws Exception {
|
||||
@AfterAll
|
||||
public static void afterClass() throws Exception {
|
||||
if (server != null) {
|
||||
System.out.println("Stopping server " + server.getAddress());
|
||||
server.close();
|
||||
@ -125,19 +126,16 @@ public class H3MemoryHandlingTest implements HttpServerAdapters {
|
||||
serverAllWritesDone.complete(false);
|
||||
}
|
||||
});
|
||||
HttpClient client = getHttpClient();
|
||||
try {
|
||||
try (HttpClient client = getHttpClient()) {
|
||||
HttpRequest request = getRequest();
|
||||
final HttpResponse<InputStream> response1 = client.send(
|
||||
request, BodyHandlers.ofInputStream());
|
||||
assertEquals(response1.statusCode(), 200);
|
||||
assertEquals(200, response1.statusCode());
|
||||
assertFalse(errorCF.isDone(), "Expected the connection to be open");
|
||||
assertFalse(serverAllWritesDone.isDone());
|
||||
response1.body().close();
|
||||
final boolean done = serverAllWritesDone.get(10, TimeUnit.SECONDS);
|
||||
assertFalse(done, "Too much data was buffered by the client");
|
||||
} finally {
|
||||
client.close();
|
||||
}
|
||||
}
|
||||
|
||||
@ -176,12 +174,12 @@ public class H3MemoryHandlingTest implements HttpServerAdapters {
|
||||
handlerCF.completeExceptionally(e);
|
||||
}
|
||||
});
|
||||
HttpClient client = getHttpClient();
|
||||
try {
|
||||
|
||||
try (HttpClient client = getHttpClient()) {
|
||||
HttpRequest request = getRequest();
|
||||
final HttpResponse<InputStream> response1 = client.send(
|
||||
request, BodyHandlers.ofInputStream());
|
||||
assertEquals(response1.statusCode(), 200);
|
||||
request, BodyHandlers.ofInputStream());
|
||||
assertEquals(200, response1.statusCode());
|
||||
assertFalse(errorCF.isDone(), "Expected the connection to be open");
|
||||
assertFalse(handlerCF.isDone());
|
||||
assertTrue(writerBlocked.await(10, TimeUnit.SECONDS),
|
||||
@ -191,10 +189,8 @@ public class H3MemoryHandlingTest implements HttpServerAdapters {
|
||||
try (InputStream body = response1.body()) {
|
||||
receivedResponse = body.readAllBytes();
|
||||
}
|
||||
assertEquals(receivedResponse.length, 32768,
|
||||
assertEquals(32768, receivedResponse.length,
|
||||
"Unexpected response length");
|
||||
} finally {
|
||||
client.close();
|
||||
}
|
||||
assertTrue(handlerCF.get(10, TimeUnit.SECONDS),
|
||||
"Unexpected result");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,7 +29,7 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=360 -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=360 -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.httpclient.quic.minPtoBackoffTime=60
|
||||
* -Djdk.httpclient.quic.maxPtoBackoffTime=90
|
||||
* -Djdk.httpclient.quic.maxPtoBackoff=10
|
||||
@ -52,7 +52,7 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=360 -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=360 -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.httpclient.quic.minPtoBackoffTime=45
|
||||
* -Djdk.httpclient.quic.maxPtoBackoffTime=60
|
||||
* -Djdk.httpclient.quic.maxPtoBackoff=9
|
||||
@ -75,7 +75,7 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=360 -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=360 -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.httpclient.quic.idleTimeout=120
|
||||
* -Djdk.httpclient.keepalive.timeout.h3=120
|
||||
* -Djdk.test.server.quic.idleTimeout=90
|
||||
@ -100,7 +100,7 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=360 -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=360 -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.httpclient.quic.idleTimeout=120
|
||||
* -Djdk.httpclient.keepalive.timeout.h3=120
|
||||
* -Djdk.test.server.quic.idleTimeout=90
|
||||
@ -161,14 +161,15 @@ import javax.net.ssl.SSLContext;
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.internal.net.http.common.Utils;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static jdk.internal.net.http.Http3ClientProperties.MAX_STREAM_LIMIT_WAIT_TIMEOUT;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3MultipleConnectionsToSameHost implements HttpServerAdapters {
|
||||
static HttpTestServer httpsServer;
|
||||
static HttpClient client = null;
|
||||
@ -223,11 +224,11 @@ public class H3MultipleConnectionsToSameHost implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
test();
|
||||
new H3MultipleConnectionsToSameHost().test();
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void test() throws Exception {
|
||||
public void test() throws Exception {
|
||||
try {
|
||||
long prestart = System.nanoTime();
|
||||
initialize();
|
||||
@ -244,7 +245,7 @@ public class H3MultipleConnectionsToSameHost implements HttpServerAdapters {
|
||||
.GET().build();
|
||||
long start = System.nanoTime();
|
||||
var resp = client.send(request, BodyHandlers.ofByteArrayConsumer(b-> {}));
|
||||
Assert.assertEquals(resp.statusCode(), 200);
|
||||
Assertions.assertEquals(200, resp.statusCode());
|
||||
long elapsed = System.nanoTime() - start;
|
||||
System.out.println("First request took: " + elapsed + " nanos (" + TimeUnit.NANOSECONDS.toMillis(elapsed) + " ms)");
|
||||
final int max = property("simpleget.requests", 50);
|
||||
@ -298,7 +299,7 @@ public class H3MultipleConnectionsToSameHost implements HttpServerAdapters {
|
||||
|
||||
}
|
||||
}
|
||||
list.forEach((cf) -> Assert.assertEquals(cf.join().statusCode(), 200));
|
||||
list.forEach((cf) -> Assertions.assertEquals(200, cf.join().statusCode()));
|
||||
client.close();
|
||||
} catch (Throwable tt) {
|
||||
System.err.println("tt caught");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=errors,requests,responses,trace
|
||||
* -Djdk.httpclient.http3.maxConcurrentPushStreams=5
|
||||
@ -69,18 +69,19 @@ import java.util.function.Function;
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.internal.net.http.common.Utils;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.ANY;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3PushCancel implements HttpServerAdapters {
|
||||
|
||||
static Map<String,String> PUSH_PROMISES = Map.of(
|
||||
static final Map<String,String> PUSH_PROMISES = Map.of(
|
||||
"/x/y/z/1", "the first push promise body",
|
||||
"/x/y/z/2", "the second push promise body",
|
||||
"/x/y/z/3", "the third push promise body",
|
||||
@ -93,13 +94,13 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
);
|
||||
static final String MAIN_RESPONSE_BODY = "the main response body";
|
||||
|
||||
HttpTestServer server;
|
||||
URI uri;
|
||||
URI headURI;
|
||||
ServerPushHandler pushHandler;
|
||||
private static HttpTestServer server;
|
||||
private static URI uri;
|
||||
private static URI headURI;
|
||||
private static ServerPushHandler pushHandler;
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws Exception {
|
||||
@BeforeAll
|
||||
public static void setup() throws Exception {
|
||||
server = HttpTestServer.create(ANY, SimpleSSLContext.findSSLContext());
|
||||
pushHandler = new ServerPushHandler(MAIN_RESPONSE_BODY, PUSH_PROMISES);
|
||||
server.addHandler(pushHandler, "/push/");
|
||||
@ -110,14 +111,14 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
headURI = new URI("https://" + server.serverAuthority() + "/head/x");
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void teardown() {
|
||||
@AfterAll
|
||||
public static void teardown() {
|
||||
server.stop();
|
||||
}
|
||||
|
||||
static <T> HttpResponse<T> assert200ResponseCode(HttpResponse<T> response) {
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -125,8 +126,8 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
HttpRequest headRequest = HttpRequest.newBuilder(headURI)
|
||||
.HEAD().version(Version.HTTP_2).build();
|
||||
var headResponse = client.send(headRequest, BodyHandlers.ofString());
|
||||
assertEquals(headResponse.statusCode(), 200);
|
||||
assertEquals(headResponse.version(), Version.HTTP_2);
|
||||
assertEquals(200, headResponse.statusCode());
|
||||
assertEquals(Version.HTTP_2, headResponse.version());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -173,14 +174,14 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
promises.putIfAbsent(main.request(), CompletableFuture.completedFuture(main));
|
||||
promises.forEach((request, value) -> {
|
||||
HttpResponse<String> response = value.join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(200, response.statusCode());
|
||||
if (PUSH_PROMISES.containsKey(request.uri().getPath())) {
|
||||
assertEquals(response.body(), PUSH_PROMISES.get(request.uri().getPath()));
|
||||
assertEquals(PUSH_PROMISES.get(request.uri().getPath()), response.body());
|
||||
} else {
|
||||
assertEquals(response.body(), MAIN_RESPONSE_BODY);
|
||||
assertEquals(MAIN_RESPONSE_BODY, response.body());
|
||||
}
|
||||
});
|
||||
assertEquals(promises.size(), Math.min(PUSH_PROMISES.size(), maxPushes) + 1);
|
||||
assertEquals(Math.min(PUSH_PROMISES.size(), maxPushes) + 1, promises.size());
|
||||
|
||||
promises.clear();
|
||||
}
|
||||
@ -190,12 +191,12 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
client.sendAsync(HttpRequest.newBuilder(uri).build(), BodyHandlers.ofString())
|
||||
.thenApply(H3PushCancel::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
} catch (CompletionException c) {
|
||||
throw new AssertionError(c.getCause());
|
||||
}
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
|
||||
// Send with no promise handler, but use pushId bigger than allowed.
|
||||
// This should cause the connection to get closed
|
||||
@ -207,7 +208,7 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
client.sendAsync(bigger, BodyHandlers.ofString())
|
||||
.thenApply(H3PushCancel::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
throw new AssertionError("Expected IOException not thrown");
|
||||
} catch (CompletionException c) {
|
||||
@ -226,7 +227,7 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
throw new AssertionError("Unexpected exception: " + c.getCause(), c.getCause());
|
||||
}
|
||||
}
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
|
||||
// the next time around we should have a new connection
|
||||
// so we can restart from scratch
|
||||
@ -315,16 +316,16 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
promises.putIfAbsent(main.request(), CompletableFuture.completedFuture(main));
|
||||
promises.forEach((request, value) -> {
|
||||
HttpResponse<String> response = value.join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(200, response.statusCode());
|
||||
if (PUSH_PROMISES.containsKey(request.uri().getPath())) {
|
||||
assertEquals(response.body(), PUSH_PROMISES.get(request.uri().getPath()));
|
||||
assertEquals(PUSH_PROMISES.get(request.uri().getPath()), response.body());
|
||||
} else {
|
||||
assertEquals(response.body(), MAIN_RESPONSE_BODY);
|
||||
assertEquals(MAIN_RESPONSE_BODY, response.body());
|
||||
}
|
||||
});
|
||||
int expectedPushes = Math.min(PUSH_PROMISES.size(), maxPushes) + 1;
|
||||
if (i == 0) expectedPushes--; // pushId == 1 was cancelled
|
||||
assertEquals(promises.size(), expectedPushes);
|
||||
assertEquals(expectedPushes, promises.size());
|
||||
|
||||
promises.clear();
|
||||
}
|
||||
@ -334,12 +335,12 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
client.sendAsync(HttpRequest.newBuilder(uri).build(), BodyHandlers.ofString())
|
||||
.thenApply(H3PushCancel::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
} catch (CompletionException c) {
|
||||
throw new AssertionError(c.getCause());
|
||||
}
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
|
||||
// Send with no promise handler, but use pushId bigger than allowed.
|
||||
// This should cause the connection to get closed
|
||||
@ -351,7 +352,7 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
client.sendAsync(bigger, BodyHandlers.ofString())
|
||||
.thenApply(H3PushCancel::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body ->assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body ->assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
throw new AssertionError("Expected IOException not thrown");
|
||||
} catch (CompletionException c) {
|
||||
@ -370,7 +371,7 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
throw new AssertionError("Unexpected exception: " + c.getCause(), c.getCause());
|
||||
}
|
||||
}
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
|
||||
// the next time around we should have a new connection
|
||||
// so we can restart from scratch
|
||||
@ -379,7 +380,7 @@ public class H3PushCancel implements HttpServerAdapters {
|
||||
errors.forEach(t -> t.printStackTrace(System.out));
|
||||
var error = errors.stream().findFirst().orElse(null);
|
||||
if (error != null) throw error;
|
||||
assertEquals(notified.size(), 0, "Unexpected notification: " + notified);
|
||||
assertEquals(0, notified.size(), "Unexpected notification: " + notified);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -28,7 +28,7 @@
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.TestUtil
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @compile ../ReferenceTracker.java
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.httpclient.HttpClient.log=frames,ssl,requests,responses,errors
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* H3RedirectTest
|
||||
@ -50,11 +50,12 @@ import javax.net.ssl.SSLContext;
|
||||
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.Test;
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3RedirectTest implements HttpServerAdapters {
|
||||
static int httpPort;
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
@ -135,7 +136,7 @@ public class H3RedirectTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void test() throws Exception {
|
||||
public void test() throws Exception {
|
||||
try {
|
||||
initialize();
|
||||
simpleTest();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,7 +29,7 @@
|
||||
* jdk.httpclient.test.lib.http2.PushHandler
|
||||
* jdk.test.lib.Utils
|
||||
* jdk.test.lib.net.SimpleSSLContext
|
||||
* @run testng/othervm/timeout=960
|
||||
* @run junit/othervm/timeout=960
|
||||
* -Djdk.httpclient.HttpClient.log=errors,requests,headers
|
||||
* -Djdk.internal.httpclient.debug=false
|
||||
* H3ServerPush
|
||||
@ -66,13 +66,14 @@ import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.httpclient.test.lib.http2.Http2TestServer;
|
||||
import jdk.httpclient.test.lib.http2.PushHandler;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static jdk.test.lib.Utils.createTempFileOfSize;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3ServerPush implements HttpServerAdapters {
|
||||
|
||||
@ -81,14 +82,14 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
static final int LOOPS = 13;
|
||||
static final int FILE_SIZE = 512 * 1024 + 343;
|
||||
|
||||
static Path tempFile;
|
||||
private static Path tempFile;
|
||||
|
||||
HttpTestServer server;
|
||||
URI uri;
|
||||
URI headURI;
|
||||
private static HttpTestServer server;
|
||||
private static URI uri;
|
||||
private static URI headURI;
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws Exception {
|
||||
@BeforeAll
|
||||
public static void setup() throws Exception {
|
||||
tempFile = createTempFileOfSize(CLASS_NAME, ".dat", FILE_SIZE);
|
||||
var sslContext = SimpleSSLContext.findSSLContext();
|
||||
var h2Server = new Http2TestServer(true, sslContext);
|
||||
@ -109,12 +110,12 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
HttpRequest headRequest = HttpRequest.newBuilder(headURI)
|
||||
.HEAD().version(Version.HTTP_2).build();
|
||||
var headResponse = client.send(headRequest, BodyHandlers.ofString());
|
||||
assertEquals(headResponse.statusCode(), 200);
|
||||
assertEquals(headResponse.version(), Version.HTTP_2);
|
||||
assertEquals(200, headResponse.statusCode());
|
||||
assertEquals(Version.HTTP_2, headResponse.version());
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void teardown() {
|
||||
@AfterAll
|
||||
public static void teardown() {
|
||||
server.stop();
|
||||
}
|
||||
|
||||
@ -144,7 +145,7 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
resultMap.put(request, cf);
|
||||
System.out.println("waiting for response");
|
||||
var resp = cf.join();
|
||||
assertEquals(resp.version(), Version.HTTP_3);
|
||||
assertEquals(Version.HTTP_3, resp.version());
|
||||
var seen = new HashSet<>();
|
||||
resultMap.forEach((k, v) -> {
|
||||
if (seen.add(k)) {
|
||||
@ -158,16 +159,16 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
for (HttpRequest r : resultMap.keySet()) {
|
||||
System.out.println("Checking " + r);
|
||||
HttpResponse<String> response = resultMap.get(r).join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(response.body(), tempFileAsString);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
assertEquals(tempFileAsString, response.body());
|
||||
}
|
||||
resultMap.forEach((k, v) -> {
|
||||
if (seen.add(k)) {
|
||||
System.out.println("Got " + v.join());
|
||||
}
|
||||
});
|
||||
assertEquals(resultMap.size(), LOOPS + 1);
|
||||
assertEquals(LOOPS + 1, resultMap.size());
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,11 +195,11 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
System.err.println("results.size: " + resultMap.size());
|
||||
for (HttpRequest r : resultMap.keySet()) {
|
||||
HttpResponse<String> response = resultMap.get(r).join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(response.body(), tempFileAsString);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
assertEquals(tempFileAsString, response.body());
|
||||
}
|
||||
assertEquals(resultMap.size(), LOOPS + 1);
|
||||
assertEquals(LOOPS + 1, resultMap.size());
|
||||
}
|
||||
}
|
||||
|
||||
@ -242,12 +243,12 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
resultsMap.put(request, cf);
|
||||
for (HttpRequest r : resultsMap.keySet()) {
|
||||
HttpResponse<Path> response = resultsMap.get(r).join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
String fileAsString = Files.readString(response.body());
|
||||
assertEquals(fileAsString, tempFileAsString);
|
||||
assertEquals(tempFileAsString, fileAsString);
|
||||
}
|
||||
assertEquals(resultsMap.size(), LOOPS + 1);
|
||||
assertEquals(LOOPS + 1, resultsMap.size());
|
||||
}
|
||||
}
|
||||
|
||||
@ -274,12 +275,12 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
resultsMap.put(request, cf);
|
||||
for (HttpRequest r : resultsMap.keySet()) {
|
||||
HttpResponse<Path> response = resultsMap.get(r).join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
String fileAsString = Files.readString(response.body());
|
||||
assertEquals(fileAsString, tempFileAsString);
|
||||
assertEquals(tempFileAsString, fileAsString);
|
||||
}
|
||||
assertEquals(resultsMap.size(), LOOPS + 1);
|
||||
assertEquals(LOOPS + 1, resultsMap.size());
|
||||
}
|
||||
}
|
||||
|
||||
@ -340,13 +341,13 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
resultsMap.put(request, cf);
|
||||
for (HttpRequest r : resultsMap.keySet()) {
|
||||
HttpResponse<Void> response = resultsMap.get(r).join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
byte[] ba = byteArrayConsumerMap.get(r).getAccumulatedBytes();
|
||||
String result = new String(ba, UTF_8);
|
||||
assertEquals(result, tempFileAsString);
|
||||
assertEquals(tempFileAsString, result);
|
||||
}
|
||||
assertEquals(resultsMap.size(), LOOPS + 1);
|
||||
assertEquals(LOOPS + 1, resultsMap.size());
|
||||
}
|
||||
}
|
||||
|
||||
@ -384,13 +385,13 @@ public class H3ServerPush implements HttpServerAdapters {
|
||||
resultsMap.put(request, cf);
|
||||
for (HttpRequest r : resultsMap.keySet()) {
|
||||
HttpResponse<Void> response = resultsMap.get(r).join();
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), Version.HTTP_3);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(Version.HTTP_3, response.version());
|
||||
byte[] ba = byteArrayConsumerMap.get(r).getAccumulatedBytes();
|
||||
String result = new String(ba, UTF_8);
|
||||
assertEquals(result, tempFileAsString);
|
||||
assertEquals(tempFileAsString, result);
|
||||
}
|
||||
assertEquals(resultsMap.size(), LOOPS + 1);
|
||||
assertEquals(LOOPS + 1, resultsMap.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=errors,requests,responses,trace
|
||||
* -Djdk.httpclient.http3.maxConcurrentPushStreams=45
|
||||
@ -73,9 +73,6 @@ import java.util.function.Supplier;
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.internal.net.http.common.Utils;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpClient.Version.HTTP_2;
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
@ -83,10 +80,14 @@ import static java.net.http.HttpOption.Http3DiscoveryMode.ALT_SVC;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.ANY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
|
||||
@ -95,7 +96,7 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
static final PrintStream err = System.err;
|
||||
static final PrintStream out = System.out;
|
||||
|
||||
static Map<String,String> PUSH_PROMISES = Map.of(
|
||||
static final Map<String,String> PUSH_PROMISES = Map.of(
|
||||
"/x/y/z/1", "the first push promise body",
|
||||
"/x/y/z/2", "the second push promise body",
|
||||
"/x/y/z/3", "the third push promise body",
|
||||
@ -109,13 +110,13 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
static final String MAIN_RESPONSE_BODY = "the main response body";
|
||||
static final int REQUESTS = 5;
|
||||
|
||||
HttpTestServer server;
|
||||
URI uri;
|
||||
URI headURI;
|
||||
ServerPushHandler pushHandler;
|
||||
private static HttpTestServer server;
|
||||
private static URI uri;
|
||||
private static URI headURI;
|
||||
private static ServerPushHandler pushHandler;
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws Exception {
|
||||
@BeforeAll
|
||||
public static void setup() throws Exception {
|
||||
server = HttpTestServer.create(ANY, SimpleSSLContext.findSSLContext());
|
||||
pushHandler = new ServerPushHandler(MAIN_RESPONSE_BODY, PUSH_PROMISES);
|
||||
server.addHandler(pushHandler, "/push/");
|
||||
@ -126,14 +127,14 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
headURI = new URI("https://" + server.serverAuthority() + "/head/x");
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void teardown() {
|
||||
@AfterAll
|
||||
public static void teardown() {
|
||||
server.stop();
|
||||
}
|
||||
|
||||
static <T> HttpResponse<T> assert200ResponseCode(HttpResponse<T> response) {
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.version(), HTTP_3);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(HTTP_3, response.version());
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -141,8 +142,8 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
HttpRequest headRequest = HttpRequest.newBuilder(headURI)
|
||||
.HEAD().version(HTTP_2).build();
|
||||
var headResponse = client.send(headRequest, BodyHandlers.ofString());
|
||||
assertEquals(headResponse.statusCode(), 200);
|
||||
assertEquals(headResponse.version(), HTTP_2);
|
||||
assertEquals(200, headResponse.statusCode());
|
||||
assertEquals(HTTP_2, headResponse.version());
|
||||
}
|
||||
|
||||
static final class TestPushPromiseHandler<T> implements PushPromiseHandler<T> {
|
||||
@ -283,14 +284,14 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
throw new AssertionError("Unexpected message: " + msg, ex);
|
||||
}
|
||||
} else {
|
||||
assertEquals(join(value).body(), PUSH_PROMISES.get(request.uri().getPath()));
|
||||
assertEquals(PUSH_PROMISES.get(request.uri().getPath()), join(value).body());
|
||||
}
|
||||
expectedPushIds.add(pushId);
|
||||
} else assertEquals(pushId.getClass(), Http3PushId.class);
|
||||
} else assertEquals(Http3PushId.class, pushId.getClass());
|
||||
} else {
|
||||
HttpResponse<String> response = join(value);
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.body(), MAIN_RESPONSE_BODY);
|
||||
assertEquals(200, response.statusCode());
|
||||
assertEquals(MAIN_RESPONSE_BODY, response.body());
|
||||
}
|
||||
});
|
||||
|
||||
@ -311,12 +312,12 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
client.sendAsync(HttpRequest.newBuilder(uri).build(), BodyHandlers.ofString())
|
||||
.thenApply(H3ServerPushCancel::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
} catch (CompletionException c) {
|
||||
throw new AssertionError(c.getCause());
|
||||
}
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
|
||||
// Send with no promise handler, but use pushId bigger than allowed.
|
||||
// This should cause the connection to get closed
|
||||
@ -328,7 +329,7 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
client.sendAsync(bigger, BodyHandlers.ofString())
|
||||
.thenApply(H3ServerPushCancel::assert200ResponseCode)
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> assertEquals(body, MAIN_RESPONSE_BODY))
|
||||
.thenAccept(body -> assertEquals(MAIN_RESPONSE_BODY, body))
|
||||
.join();
|
||||
throw new AssertionError("Expected IOException not thrown");
|
||||
} catch (CompletionException c) {
|
||||
@ -347,7 +348,7 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
throw new AssertionError("Unexpected exception: " + c.getCause(), c.getCause());
|
||||
}
|
||||
}
|
||||
assertEquals(promises.size(), 0);
|
||||
assertEquals(0, promises.size());
|
||||
|
||||
// the next time around we should have a new connection,
|
||||
// so we can restart from scratch
|
||||
@ -408,7 +409,7 @@ public class H3ServerPushCancel implements HttpServerAdapters {
|
||||
// excluding those that got cancelled,
|
||||
// we should have received REQUEST-1 notifications
|
||||
// per push promise and per connection
|
||||
assertEquals(count, (PUSH_PROMISES.size()-3)*2*(REQUESTS-1),
|
||||
assertEquals((PUSH_PROMISES.size()-3)*2*(REQUESTS-1), count,
|
||||
"Unexpected notification: " + notified);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=errors,requests,responses
|
||||
* H3ServerPushWithDiffTypes
|
||||
@ -65,11 +65,12 @@ import java.util.function.BiPredicate;
|
||||
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.ANY;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3ServerPushWithDiffTypes implements HttpServerAdapters {
|
||||
|
||||
@ -89,8 +90,8 @@ public class H3ServerPushWithDiffTypes implements HttpServerAdapters {
|
||||
HttpRequest headRequest = HttpRequest.newBuilder(headURI)
|
||||
.HEAD().version(Version.HTTP_2).build();
|
||||
var headResponse = client.send(headRequest, BodyHandlers.ofString());
|
||||
assertEquals(headResponse.statusCode(), 200);
|
||||
assertEquals(headResponse.version(), Version.HTTP_2);
|
||||
assertEquals(200, headResponse.statusCode());
|
||||
assertEquals(Version.HTTP_2, headResponse.version());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -127,13 +128,13 @@ public class H3ServerPushWithDiffTypes implements HttpServerAdapters {
|
||||
results.put(request, cf);
|
||||
cf.join();
|
||||
|
||||
assertEquals(results.size(), PUSH_PROMISES.size() + 1);
|
||||
assertEquals(PUSH_PROMISES.size() + 1, results.size());
|
||||
|
||||
for (HttpRequest r : results.keySet()) {
|
||||
URI u = r.uri();
|
||||
var resp = results.get(r).get();
|
||||
assertEquals(resp.statusCode(), 200);
|
||||
assertEquals(resp.version(), Version.HTTP_3);
|
||||
assertEquals(200, resp.statusCode());
|
||||
assertEquals(Version.HTTP_3, resp.version());
|
||||
BodyAndType<?> body = resp.body();
|
||||
String result;
|
||||
// convert all body types to String for easier comparison
|
||||
@ -153,7 +154,7 @@ public class H3ServerPushWithDiffTypes implements HttpServerAdapters {
|
||||
String expected = PUSH_PROMISES.get(r.uri().getPath());
|
||||
if (expected == null)
|
||||
expected = "the main response body";
|
||||
assertEquals(result, expected);
|
||||
assertEquals(expected, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -30,14 +30,14 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.TestUtil
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.httpclient.retryOnStreamlimit=20
|
||||
* -Djdk.httpclient.redirects.retrylimit=21
|
||||
* -Dsimpleget.repeat=1 -Dsimpleget.chunks=1 -Dsimpleget.requests=1000
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Dsimpleget.requests=150
|
||||
* -Dsimpleget.chunks=16384
|
||||
* -Djdk.httpclient.retryOnStreamlimit=5
|
||||
@ -53,14 +53,14 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.TestUtil
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.httpclient.retryOnStreamlimit=20
|
||||
* -Djdk.httpclient.redirects.retrylimit=21
|
||||
* -Dsimpleget.repeat=1 -Dsimpleget.chunks=1 -Dsimpleget.requests=1000
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Dsimpleget.requests=150
|
||||
* -Dsimpleget.chunks=16384
|
||||
* -Djdk.httpclient.retryOnStreamlimit=5
|
||||
@ -77,16 +77,16 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.TestUtil
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -XX:+UnlockExperimentalVMOptions -XX:-VMContinuations
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -XX:+UnlockExperimentalVMOptions -XX:-VMContinuations
|
||||
* -Djdk.httpclient.retryOnStreamlimit=20
|
||||
* -Djdk.httpclient.redirects.retrylimit=21
|
||||
* -Dsimpleget.repeat=1 -Dsimpleget.chunks=1 -Dsimpleget.requests=1000
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -XX:+UnlockExperimentalVMOptions -XX:-VMContinuations
|
||||
* -Dsimpleget.requests=150
|
||||
* -Dsimpleget.chunks=16384
|
||||
@ -103,16 +103,16 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.TestUtil
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.internal.httpclient.quic.useNioSelector=true
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.internal.httpclient.quic.useNioSelector=true
|
||||
* -Djdk.httpclient.retryOnStreamlimit=20
|
||||
* -Djdk.httpclient.redirects.retrylimit=21
|
||||
* -Dsimpleget.repeat=1 -Dsimpleget.chunks=1 -Dsimpleget.requests=1000
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.internal.httpclient.quic.useNioSelector=true
|
||||
* -Dsimpleget.requests=150
|
||||
* -Dsimpleget.chunks=16384
|
||||
@ -129,16 +129,16 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.TestUtil
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.internal.httpclient.quic.useNioSelector=true
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.internal.httpclient.quic.useNioSelector=true
|
||||
* -Djdk.httpclient.retryOnStreamlimit=20
|
||||
* -Djdk.httpclient.redirects.retrylimit=21
|
||||
* -Dsimpleget.repeat=1 -Dsimpleget.chunks=1 -Dsimpleget.requests=1000
|
||||
* H3SimpleGet
|
||||
* @run testng/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* @run junit/othervm/timeout=480 -XX:+HeapDumpOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
|
||||
* -Djdk.internal.httpclient.quic.useNioSelector=true
|
||||
* -Dsimpleget.requests=150
|
||||
* -Dsimpleget.chunks=16384
|
||||
@ -154,7 +154,7 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.TestUtil
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=480 -Djdk.internal.httpclient.quic.congestionController=reno
|
||||
* @run junit/othervm/timeout=480 -Djdk.internal.httpclient.quic.congestionController=reno
|
||||
* H3SimpleGet
|
||||
* @summary send multiple GET requests using Reno congestion controller
|
||||
*/
|
||||
@ -198,13 +198,14 @@ import javax.net.ssl.SSLContext;
|
||||
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3SimpleGet implements HttpServerAdapters {
|
||||
static HttpTestServer httpsServer;
|
||||
static HttpClient client = null;
|
||||
@ -261,13 +262,13 @@ public class H3SimpleGet implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
test();
|
||||
new H3SimpleGet().test();
|
||||
}
|
||||
|
||||
static volatile boolean waitBeforeTest = false;
|
||||
|
||||
@Test
|
||||
public static void test() throws Exception {
|
||||
public void test() throws Exception {
|
||||
try {
|
||||
if (waitBeforeTest) {
|
||||
Thread.sleep(20000);
|
||||
@ -283,7 +284,7 @@ public class H3SimpleGet implements HttpServerAdapters {
|
||||
.GET().build();
|
||||
long start = System.nanoTime();
|
||||
var resp = client.send(request, BodyHandlers.ofByteArrayConsumer(b-> {}));
|
||||
Assert.assertEquals(resp.statusCode(), 200);
|
||||
Assertions.assertEquals(200, resp.statusCode());
|
||||
long elapsed = System.nanoTime() - start;
|
||||
System.out.println("Stat: First request took: " + elapsed
|
||||
+ " nanos (" + TimeUnit.NANOSECONDS.toMillis(elapsed) + " ms)");
|
||||
@ -314,7 +315,7 @@ public class H3SimpleGet implements HttpServerAdapters {
|
||||
+ connections.size() + " connections");
|
||||
}
|
||||
}
|
||||
list.forEach((cf) -> Assert.assertEquals(cf.join().statusCode(), 200));
|
||||
list.forEach((cf) -> Assertions.assertEquals(200, cf.join().statusCode()));
|
||||
} catch (Throwable tt) {
|
||||
System.err.println("tt caught");
|
||||
tt.printStackTrace();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,7 +27,7 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext jdk.httpclient.test.lib.common.TestUtil
|
||||
* jdk.httpclient.test.lib.http2.Http2TestServer
|
||||
* @run testng/othervm/timeout=480 H3SimplePost
|
||||
* @run junit/othervm/timeout=480 H3SimplePost
|
||||
*/
|
||||
// -Djdk.httpclient.HttpClient.log=requests,errors,quic
|
||||
// -Djdk.httpclient.quic.defaultMTU=64000
|
||||
@ -37,8 +37,6 @@
|
||||
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.IOException;
|
||||
@ -61,6 +59,9 @@ import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3SimplePost implements HttpServerAdapters {
|
||||
static HttpTestServer httpsServer;
|
||||
static HttpClient client = null;
|
||||
@ -115,11 +116,11 @@ public class H3SimplePost implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
test();
|
||||
new H3SimplePost().test();
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void test() throws Exception {
|
||||
public void test() throws Exception {
|
||||
try {
|
||||
long prestart = System.nanoTime();
|
||||
initialize();
|
||||
@ -140,7 +141,7 @@ public class H3SimplePost implements HttpServerAdapters {
|
||||
.build();
|
||||
long start = System.nanoTime();
|
||||
var resp = client.send(getRequest, BodyHandlers.ofByteArrayConsumer(b-> {}));
|
||||
Assert.assertEquals(resp.statusCode(), 200);
|
||||
Assertions.assertEquals(200, resp.statusCode());
|
||||
long elapsed = System.nanoTime() - start;
|
||||
System.out.println("First GET request took: " + elapsed + " nanos (" + TimeUnit.NANOSECONDS.toMillis(elapsed) + " ms)");
|
||||
final int max = 50;
|
||||
@ -155,7 +156,7 @@ public class H3SimplePost implements HttpServerAdapters {
|
||||
System.out.println("Next " + max + " POST requests took: " + elapsed2 + " nanos ("
|
||||
+ TimeUnit.NANOSECONDS.toMillis(elapsed2) + "ms for " + max + " requests): "
|
||||
+ elapsed2 / max + " nanos per request (" + TimeUnit.NANOSECONDS.toMillis(elapsed2) / max + " ms)");
|
||||
list.forEach((cf) -> Assert.assertEquals(cf.join().statusCode(), 200));
|
||||
list.forEach((cf) -> Assertions.assertEquals(200, cf.join().statusCode()));
|
||||
} catch (Throwable tt) {
|
||||
System.err.println("tt caught");
|
||||
tt.printStackTrace();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -32,16 +32,17 @@ import javax.net.ssl.SSLContext;
|
||||
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpClient.Builder.NO_PROXY;
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @summary Basic test to verify that simple GET/POST/HEAD
|
||||
@ -50,21 +51,21 @@ import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=requests,responses,errors
|
||||
* H3SimpleTest
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=requests,responses,errors
|
||||
* -Djava.net.preferIPv6Addresses=true
|
||||
* H3SimpleTest
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=requests,responses,errors
|
||||
* -Djava.net.preferIPv4Stack=true
|
||||
* H3SimpleTest
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=requests,responses,errors
|
||||
* -Djdk.internal.httpclient.quic.congestionController=reno
|
||||
@ -74,11 +75,11 @@ import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
public class H3SimpleTest implements HttpServerAdapters {
|
||||
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
private HttpTestServer h3Server;
|
||||
private String requestURI;
|
||||
private static HttpTestServer h3Server;
|
||||
private static String requestURI;
|
||||
|
||||
@BeforeClass
|
||||
public void beforeClass() throws Exception {
|
||||
@BeforeAll
|
||||
public static void beforeClass() throws Exception {
|
||||
// create an H3 only server
|
||||
h3Server = HttpTestServer.create(HTTP_3_URI_ONLY, sslContext);
|
||||
h3Server.addHandler((exchange) -> exchange.sendResponseHeaders(200, 0), "/hello");
|
||||
@ -87,8 +88,8 @@ public class H3SimpleTest implements HttpServerAdapters {
|
||||
requestURI = "https://" + h3Server.serverAuthority() + "/hello";
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void afterClass() throws Exception {
|
||||
@AfterAll
|
||||
public static void afterClass() throws Exception {
|
||||
if (h3Server != null) {
|
||||
System.out.println("Stopping server " + h3Server.getAddress());
|
||||
h3Server.stop();
|
||||
@ -113,18 +114,18 @@ public class H3SimpleTest implements HttpServerAdapters {
|
||||
final HttpRequest req1 = reqBuilder.copy().GET().build();
|
||||
System.out.println("Issuing request: " + req1);
|
||||
final HttpResponse<Void> resp1 = client.send(req1, BodyHandlers.discarding());
|
||||
Assert.assertEquals(resp1.statusCode(), 200, "unexpected response code for GET request");
|
||||
Assertions.assertEquals(200, resp1.statusCode(), "unexpected response code for GET request");
|
||||
|
||||
// POST
|
||||
final HttpRequest req2 = reqBuilder.copy().POST(BodyPublishers.ofString("foo")).build();
|
||||
System.out.println("Issuing request: " + req2);
|
||||
final HttpResponse<Void> resp2 = client.send(req2, BodyHandlers.discarding());
|
||||
Assert.assertEquals(resp2.statusCode(), 200, "unexpected response code for POST request");
|
||||
Assertions.assertEquals(200, resp2.statusCode(), "unexpected response code for POST request");
|
||||
|
||||
// HEAD
|
||||
final HttpRequest req3 = reqBuilder.copy().HEAD().build();
|
||||
System.out.println("Issuing request: " + req3);
|
||||
final HttpResponse<Void> resp3 = client.send(req3, BodyHandlers.discarding());
|
||||
Assert.assertEquals(resp3.statusCode(), 200, "unexpected response code for HEAD request");
|
||||
Assertions.assertEquals(200, resp3.statusCode(), "unexpected response code for HEAD request");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,7 +26,7 @@
|
||||
* @summary Verifies that the client reacts correctly to the receipt of a STOP_SENDING frame.
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @build jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @run testng/othervm/timeout=40 -Djdk.internal.httpclient.debug=true -Djdk.httpclient.HttpClient.log=trace,errors,headers
|
||||
* @run junit/othervm/timeout=40 -Djdk.internal.httpclient.debug=true -Djdk.httpclient.HttpClient.log=trace,errors,headers
|
||||
* H3StopSendingTest
|
||||
*/
|
||||
|
||||
@ -35,9 +35,6 @@ import jdk.httpclient.test.lib.common.HttpServerAdapters.HttpTestHandler;
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters.HttpTestServer;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import jdk.internal.net.http.http3.Http3Error;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.IOException;
|
||||
@ -53,14 +50,18 @@ import java.util.concurrent.ExecutionException;
|
||||
import static java.net.http.HttpClient.Builder.NO_PROXY;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3StopSendingTest {
|
||||
|
||||
HttpTestServer h3TestServer;
|
||||
HttpRequest postRequestNoError, postRequestError;
|
||||
HttpRequest postRequestNoErrorWithData, postRequestErrorWithData;
|
||||
URI h3TestServerUriNoError, h3TestServerUriError;
|
||||
private static HttpTestServer h3TestServer;
|
||||
private static HttpRequest postRequestNoError, postRequestError;
|
||||
private static HttpRequest postRequestNoErrorWithData, postRequestErrorWithData;
|
||||
private static URI h3TestServerUriNoError, h3TestServerUriError;
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
|
||||
static final String TEST_ROOT_PATH = "/h3_stop_sending_test";
|
||||
@ -81,13 +82,13 @@ public class H3StopSendingTest {
|
||||
err.println(resp.headers());
|
||||
err.println(resp.body());
|
||||
err.println(resp.statusCode());
|
||||
assertEquals(resp.statusCode(), 200);
|
||||
assertEquals(200, resp.statusCode());
|
||||
resp = client.sendAsync(postRequestNoErrorWithData, HttpResponse.BodyHandlers.ofString()).get();
|
||||
err.println(resp.headers());
|
||||
err.println(resp.body());
|
||||
err.println(resp.statusCode());
|
||||
assertEquals(resp.statusCode(), 200);
|
||||
assertEquals(resp.body(), RESPONSE_MESSAGE.repeat(MESSAGE_REPEAT));
|
||||
assertEquals(200, resp.statusCode());
|
||||
assertEquals(RESPONSE_MESSAGE.repeat(MESSAGE_REPEAT), resp.body());
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,8 +126,8 @@ public class H3StopSendingTest {
|
||||
}
|
||||
}
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws IOException {
|
||||
@BeforeAll
|
||||
public static void setup() throws IOException {
|
||||
|
||||
h3TestServer = HttpTestServer.create(HTTP_3_URI_ONLY, sslContext);
|
||||
h3TestServer.addHandler(new ServerRequestStopSendingHandler(), TEST_ROOT_PATH);
|
||||
@ -162,8 +163,8 @@ public class H3StopSendingTest {
|
||||
.build();
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void afterTest() {
|
||||
@AfterAll
|
||||
public static void afterTest() {
|
||||
h3TestServer.stop();
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2025, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -46,7 +46,7 @@
|
||||
* jdk.test.lib.Asserts
|
||||
* jdk.test.lib.Utils
|
||||
* jdk.test.lib.net.SimpleSSLContext
|
||||
* @run testng/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors,http3,quic:control
|
||||
* @run junit/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors,http3,quic:control
|
||||
* -Djdk.internal.httpclient.debug=false
|
||||
* -Djdk.internal.httpclient.quic.maxBidiStreams=1
|
||||
* H3StreamLimitReachedTest
|
||||
@ -77,7 +77,7 @@
|
||||
* jdk.test.lib.Asserts
|
||||
* jdk.test.lib.Utils
|
||||
* jdk.test.lib.net.SimpleSSLContext
|
||||
* @run testng/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors,http3,quic:control
|
||||
* @run junit/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors,http3,quic:control
|
||||
* -Djdk.internal.httpclient.debug=false
|
||||
* -Djdk.internal.httpclient.quic.maxBidiStreams=1
|
||||
* -Djdk.httpclient.http3.maxStreamLimitTimeout=0
|
||||
@ -114,7 +114,6 @@ import jdk.httpclient.test.lib.http2.Http2TestExchange;
|
||||
import jdk.httpclient.test.lib.http2.Http2TestServer;
|
||||
import jdk.httpclient.test.lib.http3.Http3TestServer;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpClient.Version.HTTP_2;
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
@ -125,7 +124,9 @@ import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static jdk.test.lib.Asserts.assertEquals;
|
||||
import static jdk.test.lib.Asserts.assertNotEquals;
|
||||
import static jdk.test.lib.Asserts.assertTrue;
|
||||
import static org.testng.Assert.assertFalse;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class H3StreamLimitReachedTest implements HttpServerAdapters {
|
||||
|
||||
@ -329,7 +330,7 @@ public class H3StreamLimitReachedTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testH3Only() throws Exception {
|
||||
public void testH3Only() throws Exception {
|
||||
System.out.println("\nTesting HTTP/3 only");
|
||||
initialize(true);
|
||||
try (HttpClient client = getClient()) {
|
||||
@ -402,12 +403,12 @@ public class H3StreamLimitReachedTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testH2H3WithTwoAltSVC() throws Exception {
|
||||
public void testH2H3WithTwoAltSVC() throws Exception {
|
||||
testH2H3(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testH2H3WithAltSVCOnSamePort() throws Exception {
|
||||
public void testH2H3WithAltSVCOnSamePort() throws Exception {
|
||||
testH2H3(true);
|
||||
}
|
||||
|
||||
@ -627,12 +628,12 @@ public class H3StreamLimitReachedTest implements HttpServerAdapters {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testParallelH2H3WithTwoAltSVC() throws Exception {
|
||||
public void testParallelH2H3WithTwoAltSVC() throws Exception {
|
||||
testH2H3Concurrent(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void testParallelH2H3WithAltSVCOnSamePort() throws Exception {
|
||||
public void testParallelH2H3WithAltSVCOnSamePort() throws Exception {
|
||||
testH2H3Concurrent(true);
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,7 +29,7 @@
|
||||
* jdk.httpclient.test.lib.http3.Http3TestServer
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @compile ../ReferenceTracker.java
|
||||
* @run testng/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors
|
||||
* @run junit/othervm -Djdk.httpclient.HttpClient.log=ssl,requests,responses,errors
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
* HTTP3NoBodyTest
|
||||
* @summary this is a copy of http2/NoBodyTest over HTTP/3
|
||||
@ -38,8 +38,7 @@
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.*;
|
||||
import javax.net.ssl.*;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpHeaders;
|
||||
import java.net.http.HttpRequest;
|
||||
@ -48,9 +47,12 @@ import java.net.http.HttpOption.Http3DiscoveryMode;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.net.http.HttpResponse.BodyHandlers;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
|
||||
import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.httpclient.test.lib.http2.Http2TestServer;
|
||||
import jdk.httpclient.test.lib.http2.Http2TestExchange;
|
||||
@ -58,7 +60,6 @@ import jdk.httpclient.test.lib.http2.Http2Handler;
|
||||
import jdk.httpclient.test.lib.http3.Http3TestServer;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import jdk.test.lib.RandomFactory;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.ALT_SVC;
|
||||
@ -66,7 +67,8 @@ import static java.net.http.HttpOption.Http3DiscoveryMode.ANY;
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
@Test
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class HTTP3NoBodyTest {
|
||||
private static final Random RANDOM = RandomFactory.getRandom();
|
||||
|
||||
@ -119,7 +121,7 @@ public class HTTP3NoBodyTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void runtest() throws Exception {
|
||||
public void runtest() throws Exception {
|
||||
try {
|
||||
initialize();
|
||||
warmup(false);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,7 +27,7 @@
|
||||
* @library /test/lib /test/jdk/java/net/httpclient/lib
|
||||
* @compile ../ReferenceTracker.java
|
||||
* @build jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @run testng/othervm -Djdk.internal.httpclient.debug=true
|
||||
* @run junit/othervm -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=errors,requests,headers
|
||||
* Http3ExpectContinueTest
|
||||
*/
|
||||
@ -36,11 +36,6 @@ import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.httpclient.test.lib.http3.Http3TestServer;
|
||||
import jdk.httpclient.test.lib.quic.QuicServer;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.TestException;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.IOException;
|
||||
@ -60,15 +55,20 @@ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
public class Http3ExpectContinueTest implements HttpServerAdapters {
|
||||
|
||||
ReferenceTracker TRACKER = ReferenceTracker.INSTANCE;
|
||||
private static final ReferenceTracker TRACKER = ReferenceTracker.INSTANCE;
|
||||
|
||||
Http3TestServer http3TestServer;
|
||||
private static Http3TestServer http3TestServer;
|
||||
|
||||
URI h3postUri, h3forcePostUri, h3hangUri;
|
||||
private static URI h3postUri, h3forcePostUri, h3hangUri;
|
||||
|
||||
static PrintStream err = new PrintStream(System.err);
|
||||
static PrintStream out = new PrintStream(System.out);
|
||||
@ -78,8 +78,7 @@ public class Http3ExpectContinueTest implements HttpServerAdapters {
|
||||
static final String BODY = "Post body";
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
|
||||
@DataProvider(name = "uris")
|
||||
public Object[][] urisData() {
|
||||
public static Object[][] urisData() {
|
||||
return new Object[][]{
|
||||
// URI, Expected Status Code, Will finish with Exception
|
||||
{ h3postUri, 200, false },
|
||||
@ -88,7 +87,8 @@ public class Http3ExpectContinueTest implements HttpServerAdapters {
|
||||
};
|
||||
}
|
||||
|
||||
@Test(dataProvider = "uris")
|
||||
@ParameterizedTest
|
||||
@MethodSource("urisData")
|
||||
public void test(URI uri, int expectedStatusCode, boolean exceptionally)
|
||||
throws CancellationException, InterruptedException, ExecutionException, IOException {
|
||||
|
||||
@ -149,8 +149,8 @@ public class Http3ExpectContinueTest implements HttpServerAdapters {
|
||||
}
|
||||
}
|
||||
|
||||
@BeforeTest
|
||||
public void setup() throws Exception {
|
||||
@BeforeAll
|
||||
public static void setup() throws Exception {
|
||||
final QuicServer quicServer = Http3TestServer.quicServerBuilder()
|
||||
.sslContext(sslContext)
|
||||
.build();
|
||||
@ -167,8 +167,8 @@ public class Http3ExpectContinueTest implements HttpServerAdapters {
|
||||
http3TestServer.start();
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void teardown() throws IOException {
|
||||
@AfterAll
|
||||
public static void teardown() throws IOException {
|
||||
var error = TRACKER.check(500);
|
||||
if (error != null) throw error;
|
||||
http3TestServer.stop();
|
||||
@ -233,11 +233,11 @@ public class Http3ExpectContinueTest implements HttpServerAdapters {
|
||||
}
|
||||
if (exceptionally && testThrowable != null) {
|
||||
err.println("Finished exceptionally Test throwable: " + testThrowable);
|
||||
assertEquals(IOException.class, testThrowable.getClass());
|
||||
assertEquals(testThrowable.getClass(), IOException.class);
|
||||
} else if (exceptionally) {
|
||||
throw new TestException("Expected case to finish with an IOException but testException is null");
|
||||
fail("Expected case to finish with an IOException but testException is null");
|
||||
} else if (resp != null) {
|
||||
assertEquals(resp.statusCode(), expectedStatusCode);
|
||||
assertEquals(expectedStatusCode, resp.statusCode());
|
||||
err.println("Request completed successfully for path " + path);
|
||||
err.println("Response Headers: " + resp.headers());
|
||||
err.println("Response Status Code: " + resp.statusCode());
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @run testng/othervm
|
||||
* @run junit/othervm
|
||||
* -Djdk.internal.httpclient.debug=out
|
||||
* PeerUniStreamDispatcherTest
|
||||
* @summary Unit test for the PeerUniStreamDispatcher
|
||||
@ -45,8 +45,8 @@ import jdk.internal.net.http.quic.streams.QuicReceiverStream;
|
||||
import jdk.internal.net.http.quic.streams.QuicStreamReader;
|
||||
import jdk.internal.net.http.quic.streams.QuicStreams;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
import static org.testng.Assert.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class PeerUniStreamDispatcherTest {
|
||||
|
||||
@ -301,7 +301,7 @@ public class PeerUniStreamDispatcherTest {
|
||||
assertTrue(reader.connected());
|
||||
int size = VariableLengthEncoder.getEncodedSize(code);
|
||||
ByteBuffer buffer = ByteBuffer.allocate(size);
|
||||
assertEquals(buffer.remaining(), size);
|
||||
assertEquals(size, buffer.remaining());
|
||||
VariableLengthEncoder.encode(buffer, code);
|
||||
buffer.flip();
|
||||
stream.buffers.add(buffer);
|
||||
@ -313,7 +313,7 @@ public class PeerUniStreamDispatcherTest {
|
||||
// will loop correctly.
|
||||
size = VariableLengthEncoder.getEncodedSize(1L << 62 - 5);
|
||||
ByteBuffer buffer2 = ByteBuffer.allocate(size);
|
||||
assertEquals(buffer2.remaining(), size);
|
||||
assertEquals(size, buffer2.remaining());
|
||||
VariableLengthEncoder.encode(buffer2, 1L << 62 - 5);
|
||||
buffer2.flip();
|
||||
stream.buffers.add(ByteBuffer.wrap(new byte[] {buffer2.get()}));
|
||||
@ -328,7 +328,7 @@ public class PeerUniStreamDispatcherTest {
|
||||
assertFalse(reader.connected());
|
||||
assertFalse(dispatcher.dispatched.isEmpty());
|
||||
assertTrue(stream.buffers.isEmpty());
|
||||
assertEquals(dispatcher.dispatched.size(), 1);
|
||||
assertEquals(1, dispatcher.dispatched.size());
|
||||
var dispatched = dispatcher.dispatched.get(0);
|
||||
checkDispatched(type, code, stream, dispatched);
|
||||
}
|
||||
@ -343,30 +343,30 @@ public class PeerUniStreamDispatcherTest {
|
||||
case RESERVED -> DispatchedStream.ReservedStream.class;
|
||||
case UNKNOWN -> DispatchedStream.UnknownStream.class;
|
||||
};
|
||||
assertEquals(dispatched.getClass(), streamClass,
|
||||
assertEquals(streamClass, dispatched.getClass(),
|
||||
"unexpected dispatched class " + dispatched + " for " + type);
|
||||
if (dispatched instanceof DispatchedStream.StandardStream st) {
|
||||
System.out.println("Got expected stream: " + st);
|
||||
assertEquals(st.type(), type);
|
||||
assertEquals(st.stream, stream);
|
||||
assertEquals(type, st.type());
|
||||
assertEquals(stream, st.stream);
|
||||
} else if (dispatched instanceof DispatchedStream.ReservedStream res) {
|
||||
System.out.println("Got expected stream: " + res);
|
||||
assertEquals(res.type(), type);
|
||||
assertEquals(res.stream, stream);
|
||||
assertEquals(res.code(), code);
|
||||
assertEquals(type, res.type());
|
||||
assertEquals(stream, res.stream);
|
||||
assertEquals(code, res.code());
|
||||
assertTrue(Http3Streams.isReserved(res.code()));
|
||||
} else if (dispatched instanceof DispatchedStream.UnknownStream unk) {
|
||||
System.out.println("Got expected stream: " + unk);
|
||||
assertEquals(unk.type(), type);
|
||||
assertEquals(unk.stream, stream);
|
||||
assertEquals(unk.code(), code);
|
||||
assertEquals(type, unk.type());
|
||||
assertEquals(stream, unk.stream);
|
||||
assertEquals(code, unk.code());
|
||||
assertFalse(Http3Streams.isReserved(unk.code()));
|
||||
} else if (dispatched instanceof DispatchedStream.PushStream push) {
|
||||
System.out.println("Got expected stream: " + push);
|
||||
assertEquals(push.type(), type);
|
||||
assertEquals(push.stream, stream);
|
||||
assertEquals(push.pushId, 1L << 62 - 5);
|
||||
assertEquals(push.type(), DISPATCHED_STREAM.PUSH);
|
||||
assertEquals(type, push.type());
|
||||
assertEquals(stream, push.stream);
|
||||
assertEquals(1L << 62 - 5, push.pushId);
|
||||
assertEquals(DISPATCHED_STREAM.PUSH, push.type());
|
||||
}
|
||||
|
||||
}
|
||||
@ -406,9 +406,9 @@ public class PeerUniStreamDispatcherTest {
|
||||
SequentialScheduler scheduler = stream.scheduler;
|
||||
assertTrue(reader.connected());
|
||||
int size = VariableLengthEncoder.getEncodedSize(code);
|
||||
assertEquals(size, 8);
|
||||
assertEquals(8, size);
|
||||
ByteBuffer buffer = ByteBuffer.allocate(size);
|
||||
assertEquals(buffer.remaining(), size);
|
||||
assertEquals(size, buffer.remaining());
|
||||
VariableLengthEncoder.encode(buffer, code);
|
||||
buffer.flip();
|
||||
dispatcher.start();
|
||||
@ -428,7 +428,7 @@ public class PeerUniStreamDispatcherTest {
|
||||
assertFalse(reader.connected());
|
||||
assertFalse(dispatcher.dispatched.isEmpty());
|
||||
assertTrue(stream.buffers.isEmpty());
|
||||
assertEquals(dispatcher.dispatched.size(), 1);
|
||||
assertEquals(1, dispatcher.dispatched.size());
|
||||
var dispatched = dispatcher.dispatched.get(0);
|
||||
checkDispatched(type, code, stream, dispatched);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2022, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -44,14 +44,15 @@ import jdk.httpclient.test.lib.common.HttpServerAdapters;
|
||||
import jdk.internal.net.http.ResponseSubscribers;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @summary Exercises the HTTP3 client to send a STOP_SENDING frame
|
||||
@ -59,17 +60,17 @@ import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* @compile ../ReferenceTracker.java
|
||||
* @run testng/othervm -Djdk.internal.httpclient.debug=true
|
||||
* @run junit/othervm -Djdk.internal.httpclient.debug=true
|
||||
* -Djdk.httpclient.HttpClient.log=requests,responses,errors StopSendingTest
|
||||
*/
|
||||
public class StopSendingTest implements HttpServerAdapters {
|
||||
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
private HttpTestServer h3Server;
|
||||
private String requestURIBase;
|
||||
private static HttpTestServer h3Server;
|
||||
private static String requestURIBase;
|
||||
|
||||
@BeforeClass
|
||||
public void beforeClass() throws Exception {
|
||||
@BeforeAll
|
||||
public static void beforeClass() throws Exception {
|
||||
h3Server = HttpTestServer.create(HTTP_3_URI_ONLY, sslContext);
|
||||
h3Server.addHandler(new Handler(), "/hello");
|
||||
h3Server.start();
|
||||
@ -79,8 +80,8 @@ public class StopSendingTest implements HttpServerAdapters {
|
||||
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void afterClass() throws Exception {
|
||||
@AfterAll
|
||||
public static void afterClass() throws Exception {
|
||||
if (h3Server != null) {
|
||||
System.out.println("Stopping server " + h3Server.getAddress());
|
||||
h3Server.stop();
|
||||
@ -154,7 +155,7 @@ public class StopSendingTest implements HttpServerAdapters {
|
||||
// of the Future instance, sometimes the Future.cancel(true) results
|
||||
// in an ExecutionException which wraps the CancellationException.
|
||||
// TODO: fix the actual race condition and then expect only CancellationException here
|
||||
final Exception actualException = Assert.expectThrows(Exception.class, futureResp::get);
|
||||
final Exception actualException = Assertions.assertThrows(Exception.class, futureResp::get);
|
||||
if (actualException instanceof CancellationException) {
|
||||
// expected
|
||||
System.out.println("Received the expected CancellationException");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -45,14 +45,15 @@ import jdk.httpclient.test.lib.quic.QuicServerConnection;
|
||||
import jdk.internal.net.http.quic.QuicTransportParameters;
|
||||
import jdk.internal.net.http.quic.QuicTransportParameters.ParameterId;
|
||||
import jdk.test.lib.net.SimpleSSLContext;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import static java.net.http.HttpClient.Builder.NO_PROXY;
|
||||
import static java.net.http.HttpClient.Version.HTTP_3;
|
||||
import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @summary verifies that when the Quic stream limit is reached
|
||||
@ -64,17 +65,17 @@ import static java.net.http.HttpOption.H3_DISCOVERY;
|
||||
* @build jdk.test.lib.net.SimpleSSLContext
|
||||
* jdk.httpclient.test.lib.common.HttpServerAdapters
|
||||
* jdk.httpclient.test.lib.http3.Http3TestServer
|
||||
* @run testng/othervm -Djdk.internal.httpclient.debug=true StreamLimitTest
|
||||
* @run junit/othervm -Djdk.internal.httpclient.debug=true StreamLimitTest
|
||||
*/
|
||||
public class StreamLimitTest {
|
||||
|
||||
private static final SSLContext sslContext = SimpleSSLContext.findSSLContext();
|
||||
private HttpTestServer server;
|
||||
private QuicServer quicServer;
|
||||
private URI requestURI;
|
||||
private volatile QuicServerConnection latestServerConn;
|
||||
private static HttpTestServer server;
|
||||
private static QuicServer quicServer;
|
||||
private static URI requestURI;
|
||||
private static volatile QuicServerConnection latestServerConn;
|
||||
|
||||
private final class Handler implements HttpTestHandler {
|
||||
private static final class Handler implements HttpTestHandler {
|
||||
|
||||
@Override
|
||||
public void handle(HttpTestExchange exchange) throws IOException {
|
||||
@ -97,8 +98,8 @@ public class StreamLimitTest {
|
||||
}
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public void beforeClass() throws Exception {
|
||||
@BeforeAll
|
||||
public static void beforeClass() throws Exception {
|
||||
quicServer = Http3TestServer.quicServerBuilder().sslContext(sslContext).build();
|
||||
final Http3TestServer h3Server = new Http3TestServer(quicServer) {
|
||||
@Override
|
||||
@ -118,8 +119,8 @@ public class StreamLimitTest {
|
||||
requestURI = new URI("https://" + server.serverAuthority() + "/foo");
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void afterClass() throws Exception {
|
||||
@AfterAll
|
||||
public static void afterClass() throws Exception {
|
||||
latestServerConn = null;
|
||||
if (server != null) {
|
||||
server.stop();
|
||||
@ -161,8 +162,8 @@ public class StreamLimitTest {
|
||||
System.out.println("Sending request " + i + " to " + requestURI);
|
||||
final HttpResponse<String> resp = client.send(req,
|
||||
HttpResponse.BodyHandlers.ofString());
|
||||
Assert.assertEquals(resp.version(), HTTP_3, "Unexpected response version");
|
||||
Assert.assertEquals(resp.statusCode(), 200, "Unexpected response code");
|
||||
Assertions.assertEquals(HTTP_3, resp.version(), "Unexpected response version");
|
||||
Assertions.assertEquals(200, resp.statusCode(), "Unexpected response code");
|
||||
final String respBody = resp.body();
|
||||
System.out.println("Request " + i + " was handled by server connection: " + respBody);
|
||||
if (i == 1) {
|
||||
@ -170,7 +171,7 @@ public class StreamLimitTest {
|
||||
// to this request
|
||||
requestHandledBy = respBody;
|
||||
} else {
|
||||
Assert.assertEquals(respBody, requestHandledBy, "Request was handled by an" +
|
||||
Assertions.assertEquals(requestHandledBy, respBody, "Request was handled by an" +
|
||||
" unexpected server connection");
|
||||
}
|
||||
}
|
||||
@ -193,20 +194,20 @@ public class StreamLimitTest {
|
||||
+ requestURI);
|
||||
final HttpResponse<String> resp = client.send(reqWithTimeout,
|
||||
HttpResponse.BodyHandlers.ofString());
|
||||
Assert.assertEquals(resp.version(), HTTP_3, "Unexpected response version");
|
||||
Assert.assertEquals(resp.statusCode(), 200, "Unexpected response code");
|
||||
Assertions.assertEquals(HTTP_3, resp.version(), "Unexpected response version");
|
||||
Assertions.assertEquals(200, resp.statusCode(), "Unexpected response code");
|
||||
final String respBody = resp.body();
|
||||
System.out.println("Request " + i + " was handled by server connection: " + respBody);
|
||||
if (i == 1) {
|
||||
// first request after the limit was hit.
|
||||
// verify that it was handled by a new connection and not the one that handled
|
||||
// the previous N requests
|
||||
Assert.assertNotEquals(respBody, requestHandledBy, "Request was expected to be" +
|
||||
Assertions.assertNotEquals(requestHandledBy, respBody, "Request was expected to be" +
|
||||
" handled by a new server connection, but wasn't");
|
||||
// keep track this new server connection id which responded to this request
|
||||
requestHandledBy = respBody;
|
||||
} else {
|
||||
Assert.assertEquals(respBody, requestHandledBy, "Request was handled by an" +
|
||||
Assertions.assertEquals(requestHandledBy, respBody, "Request was handled by an" +
|
||||
" unexpected server connection");
|
||||
}
|
||||
}
|
||||
@ -231,13 +232,13 @@ public class StreamLimitTest {
|
||||
" to " + requestURI);
|
||||
final HttpResponse<String> resp = client.send(reqWithTimeout,
|
||||
HttpResponse.BodyHandlers.ofString());
|
||||
Assert.assertEquals(resp.version(), HTTP_3, "Unexpected response version");
|
||||
Assert.assertEquals(resp.statusCode(), 200, "Unexpected response code");
|
||||
Assertions.assertEquals(HTTP_3, resp.version(), "Unexpected response version");
|
||||
Assertions.assertEquals(200, resp.statusCode(), "Unexpected response code");
|
||||
final String respBody = resp.body();
|
||||
System.out.println("Request " + i + " was handled by server connection: " + respBody);
|
||||
// all these requests should be handled by the same server connection which handled
|
||||
// the previous requests
|
||||
Assert.assertEquals(respBody, requestHandledBy, "Request was handled by an" +
|
||||
Assertions.assertEquals(requestHandledBy, respBody, "Request was handled by an" +
|
||||
" unexpected server connection");
|
||||
}
|
||||
// at this point the newer limit for bidi stream creation has reached on the client.
|
||||
@ -254,12 +255,12 @@ public class StreamLimitTest {
|
||||
System.out.println("Sending request, without timeout, to " + requestURI);
|
||||
final HttpResponse<String> finalResp = client.send(finalReq,
|
||||
HttpResponse.BodyHandlers.ofString());
|
||||
Assert.assertEquals(finalResp.version(), HTTP_3, "Unexpected response version");
|
||||
Assert.assertEquals(finalResp.statusCode(), 200, "Unexpected response code");
|
||||
Assertions.assertEquals(HTTP_3, finalResp.version(), "Unexpected response version");
|
||||
Assertions.assertEquals(200, finalResp.statusCode(), "Unexpected response code");
|
||||
final String finalRespBody = finalResp.body();
|
||||
System.out.println("Request was handled by server connection: " + finalRespBody);
|
||||
// this request should have been handled by a new server connection
|
||||
Assert.assertNotEquals(finalRespBody, requestHandledBy, "Request was handled by an" +
|
||||
Assertions.assertNotEquals(requestHandledBy, finalRespBody, "Request was handled by an" +
|
||||
" unexpected server connection");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user