diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-08-09 17:43:56 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-08-09 17:43:56 +0200 |
commit | 14ac5b3dbcf5a108b201bb7a09bc09e81064efe9 (patch) | |
tree | d5e9f295377814d422d5e3bc3cb140d617ed3465 /container-core/src/test/java/com | |
parent | 904dfd949a04be4dcbd9f4dfea0f6b87da84f942 (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.java | 45 |
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()); } |