Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java68
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();
+ }
+ }
}

Back to the top