diff options
Diffstat (limited to 'tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientTest.java')
-rw-r--r-- | tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientTest.java | 68 |
1 files changed, 64 insertions, 4 deletions
diff --git a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientTest.java b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientTest.java index c9c45df723..5a17404c55 100644 --- a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientTest.java +++ b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientTest.java @@ -19,8 +19,10 @@ package org.eclipse.jetty.http.client; import java.io.IOException; +import java.io.InterruptedIOException; import java.util.Random; import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; @@ -59,7 +61,7 @@ public class HttpClientTest extends AbstractTest } }); - ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) + ContentResponse response = client.newRequest(newURI()) .timeout(5, TimeUnit.SECONDS) .send(); @@ -89,11 +91,12 @@ public class HttpClientTest extends AbstractTest public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); + response.setContentLength(length); response.getOutputStream().write(bytes); } }); - org.eclipse.jetty.client.api.Request request = client.newRequest("localhost", connector.getLocalPort()); + org.eclipse.jetty.client.api.Request request = client.newRequest(newURI()); FutureResponseListener listener = new FutureResponseListener(request, length); request.timeout(10, TimeUnit.SECONDS).send(listener); ContentResponse response = listener.get(); @@ -137,7 +140,7 @@ public class HttpClientTest extends AbstractTest } }); - org.eclipse.jetty.client.api.Request request = client.newRequest("localhost", connector.getLocalPort()); + org.eclipse.jetty.client.api.Request request = client.newRequest(newURI()); FutureResponseListener listener = new FutureResponseListener(request, 2 * length); request.timeout(10, TimeUnit.SECONDS).send(listener); ContentResponse response = listener.get(); @@ -181,7 +184,7 @@ public class HttpClientTest extends AbstractTest } }); - ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) + ContentResponse response = client.newRequest(newURI()) .method(HttpMethod.POST) .content(new BytesContentProvider(bytes)) .timeout(15, TimeUnit.SECONDS) @@ -190,4 +193,61 @@ public class HttpClientTest extends AbstractTest Assert.assertEquals(200, response.getStatus()); Assert.assertEquals(0, response.getContent().length); } + + @Test + public void testClientManyWritesSlowServer() throws Exception + { + start(new AbstractHandler() + { + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + + long sleep = 1024; + long total = 0; + ServletInputStream input = request.getInputStream(); + byte[] buffer = new byte[1024]; + while (true) + { + int read = input.read(buffer); + if (read < 0) + break; + total += read; + if (total >= sleep) + { + sleep(250); + sleep += 256; + } + } + + response.getOutputStream().print(total); + } + }); + + int chunks = 256; + int chunkSize = 16; + byte[][] bytes = IntStream.range(0, chunks).mapToObj(x -> new byte[chunkSize]).toArray(byte[][]::new); + BytesContentProvider contentProvider = new BytesContentProvider("application/octet-stream", bytes); + ContentResponse response = client.newRequest(newURI()) + .method(HttpMethod.POST) + .content(contentProvider) + .timeout(15, TimeUnit.SECONDS) + .send(); + + Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); + Assert.assertEquals(chunks * chunkSize, Integer.parseInt(response.getContentAsString())); + } + + private void sleep(long time) throws IOException + { + try + { + Thread.sleep(time); + } + catch (InterruptedException x) + { + throw new InterruptedIOException(); + } + } } |