aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/test/java/com
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-08-09 17:43:56 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-08-09 17:43:56 +0200
commit14ac5b3dbcf5a108b201bb7a09bc09e81064efe9 (patch)
treed5e9f295377814d422d5e3bc3cb140d617ed3465 /container-core/src/test/java/com
parent904dfd949a04be4dcbd9f4dfea0f6b87da84f942 (diff)
Respect thresholds for max requests/time for HTTP/2 connections
Diffstat (limited to 'container-core/src/test/java/com')
-rw-r--r--container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java45
1 files changed, 40 insertions, 5 deletions
diff --git a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
index 86a3808becc..be96fc2332d 100644
--- a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
+++ b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
@@ -61,6 +61,7 @@ import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.UUID;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
@@ -91,6 +92,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -456,11 +458,28 @@ public class HttpServerTest {
@Test
public void requireThatConnectionIsClosedAfterXRequests() throws Exception {
- final int MAX_KEEPALIVE_REQUESTS = 100;
- final JettyTestDriver driver = JettyTestDriver.newConfiguredInstance(new EchoRequestHandler(),
- new ServerConfig.Builder(),
- new ConnectorConfig.Builder().maxRequestsPerConnection(MAX_KEEPALIVE_REQUESTS));
- for (int i = 0; i < MAX_KEEPALIVE_REQUESTS - 1; i++) {
+ final int MAX_REQUESTS = 10;
+ Path privateKeyFile = tmpFolder.newFile().toPath();
+ Path certificateFile = tmpFolder.newFile().toPath();
+ generatePrivateKeyAndCertificate(privateKeyFile, certificateFile);
+ ConnectorConfig.Builder connectorConfig = new ConnectorConfig.Builder()
+ .maxRequestsPerConnection(MAX_REQUESTS)
+ .ssl(new ConnectorConfig.Ssl.Builder()
+ .enabled(true)
+ .clientAuth(ConnectorConfig.Ssl.ClientAuth.Enum.NEED_AUTH)
+ .privateKeyFile(privateKeyFile.toString())
+ .certificateFile(certificateFile.toString())
+ .caCertificateFile(certificateFile.toString()));
+ ServerConfig.Builder serverConfig = new ServerConfig.Builder()
+ .connectionLog(new ServerConfig.ConnectionLog.Builder().enabled(true));
+ JettyTestDriver driver = JettyTestDriver.newConfiguredInstance(
+ new EchoRequestHandler(),
+ serverConfig,
+ connectorConfig,
+ binder -> {});
+
+ // HTTP/1.1
+ for (int i = 0; i < MAX_REQUESTS - 1; i++) {
driver.client().get("/status.html")
.expectStatusCode(is(OK))
.expectNoHeader(CONNECTION);
@@ -468,6 +487,22 @@ public class HttpServerTest {
driver.client().get("/status.html")
.expectStatusCode(is(OK))
.expectHeader(CONNECTION, is(CLOSE));
+
+ // HTTP/2
+ try (CloseableHttpAsyncClient client = createHttp2Client(driver)) {
+ String uri = "https://localhost:" + driver.server().getListenPort() + "/status.html";
+ for (int i = 0; i < MAX_REQUESTS - 1; i++) {
+ SimpleHttpResponse response = client.execute(SimpleRequestBuilder.get(uri).build(), null).get();
+ assertEquals(OK, response.getCode());
+ }
+ try {
+ client.execute(SimpleRequestBuilder.get(uri).build(), null).get();
+ fail();
+ } catch (ExecutionException e) {
+ // Note: this is a weakness with Apache Http Client 5; the failed stream/request will not be retried on a new connection
+ assertEquals(e.getMessage(), "org.apache.hc.core5.http2.H2StreamResetException: Stream refused");
+ }
+ }
assertTrue(driver.close());
}