diff options
author | Thomas Becker | 2013-07-11 13:13:01 +0000 |
---|---|---|
committer | Thomas Becker | 2013-07-11 13:13:01 +0000 |
commit | af02334ff7a8beebbc700a63d1116cb3bbc7b68a (patch) | |
tree | 7bc55af3c74ba5fb35d404d763cb20596a0d7a81 | |
parent | 8eb664970994f3ec7e4b7a39e88db8dac651c3f3 (diff) | |
download | org.eclipse.jetty.project-af02334ff7a8beebbc700a63d1116cb3bbc7b68a.tar.gz org.eclipse.jetty.project-af02334ff7a8beebbc700a63d1116cb3bbc7b68a.tar.xz org.eclipse.jetty.project-af02334ff7a8beebbc700a63d1116cb3bbc7b68a.zip |
412750 HttpClient close expired connections fix
-rw-r--r-- | jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java | 2 | ||||
-rw-r--r-- | jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java | 67 |
2 files changed, 68 insertions, 1 deletions
diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java index 6fe61048eb..0877dd803e 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpExchange.java @@ -125,10 +125,10 @@ public class HttpExchange protected void expire(HttpDestination destination) { + AbstractHttpConnection connection = _connection; if (getStatus() < HttpExchange.STATUS_COMPLETED) setStatus(HttpExchange.STATUS_EXPIRED); destination.exchangeExpired(this); - AbstractHttpConnection connection = _connection; if (connection != null) connection.exchangeExpired(this); } diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java index 930a378d28..ed2b29425c 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/IdleTimeoutTest.java @@ -18,13 +18,28 @@ package org.eclipse.jetty.client; +import java.io.IOException; +import java.net.URI; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jetty.http.HttpMethods; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.AbstractHandler; +import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + /** * IdleTimeoutTest * @@ -77,4 +92,56 @@ public class IdleTimeoutTest Assert.fail("Test did not complete in time"); } + + @Test + public void testConnectionsAreReleasedWhenExpired() throws Exception + { + // we need a server that times out and a client with shorter timeout settings, so we need to create new ones + Server server = new Server(); + Connector connector = new SelectChannelConnector(); + server.addConnector(connector); + server.setHandler(new AbstractHandler() + { + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + if (request.getParameter("timeout") != null) + { + try + { + Thread.sleep(1000); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + baseRequest.setHandled(true); + response.getWriter().write("Hello world"); + } + }); + server.start(); + + HttpClient httpClient = new HttpClient(); + httpClient.setMaxConnectionsPerAddress(1); + httpClient.setConnectTimeout(200); + httpClient.setTimeout(200); + httpClient.setIdleTimeout(200); + httpClient.start(); + + String uriString = "http://localhost:" + connector.getLocalPort() + "/"; + + HttpExchange httpExchange = new HttpExchange(); + httpExchange.setURI(URI.create(uriString).resolve("?timeout=true")); + httpExchange.setMethod(HttpMethods.GET); + httpClient.send(httpExchange); + int status = httpExchange.waitForDone(); + assertThat("First request expired", status, is(8)); + + httpExchange = new HttpExchange(); + httpExchange.setURI(URI.create(uriString)); + httpExchange.setMethod(HttpMethods.GET); + httpClient.send(httpExchange); + status = httpExchange.waitForDone(); + assertThat("Second request was successful as timeout is not set", status, is(7)); + } } |