Skip to content

Commit 3d8d88f

Browse files
authored
Issue #7833 - Chunked Transfer-Encoding and HEAD response test (#8219)
* Issue #7833 - Chunked Transfer-Encoding and HEAD response test Signed-off-by: Joakim Erdfelt <[email protected]>
1 parent 94dd205 commit 3d8d88f

File tree

1 file changed

+70
-2
lines changed

1 file changed

+70
-2
lines changed

jetty-webapp/src/test/java/org/eclipse/jetty/webapp/HugeResourceTest.java

+70-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.io.OutputStream;
2424
import java.io.PrintWriter;
2525
import java.net.URI;
26+
import java.net.URL;
2627
import java.nio.ByteBuffer;
2728
import java.nio.channels.SeekableByteChannel;
2829
import java.nio.file.FileStore;
@@ -185,6 +186,7 @@ public void startServer() throws Exception
185186
context.setBaseResource(new PathResource(staticBase));
186187

187188
context.addServlet(PostServlet.class, "/post");
189+
context.addServlet(ChunkedServlet.class, "/chunked/*");
188190

189191
String location = multipartTempDir.toString();
190192
long maxFileSize = Long.MAX_VALUE;
@@ -224,7 +226,7 @@ public void stopClient() throws Exception
224226

225227
@ParameterizedTest
226228
@MethodSource("staticFiles")
227-
public void testDownload(String filename, long expectedSize) throws Exception
229+
public void testDownloadStatic(String filename, long expectedSize) throws Exception
228230
{
229231
URI destUri = server.getURI().resolve("/" + filename);
230232
InputStreamResponseListener responseListener = new InputStreamResponseListener();
@@ -251,7 +253,33 @@ public void testDownload(String filename, long expectedSize) throws Exception
251253

252254
@ParameterizedTest
253255
@MethodSource("staticFiles")
254-
public void testHead(String filename, long expectedSize) throws Exception
256+
public void testDownloadChunked(String filename, long expectedSize) throws Exception
257+
{
258+
URI destUri = server.getURI().resolve("/chunked/" + filename);
259+
InputStreamResponseListener responseListener = new InputStreamResponseListener();
260+
261+
Request request = client.newRequest(destUri)
262+
.method(HttpMethod.GET);
263+
request.send(responseListener);
264+
Response response = responseListener.get(5, TimeUnit.SECONDS);
265+
266+
assertThat("HTTP Response Code", response.getStatus(), is(200));
267+
// dumpResponse(response);
268+
269+
String transferEncoding = response.getHeaders().get(HttpHeader.TRANSFER_ENCODING);
270+
assertThat("Http Response Header: \"Transfer-Encoding\"", transferEncoding, is("chunked"));
271+
272+
try (ByteCountingOutputStream out = new ByteCountingOutputStream();
273+
InputStream in = responseListener.getInputStream())
274+
{
275+
IO.copy(in, out);
276+
assertThat("Downloaded Files Size: " + filename, out.getCount(), is(expectedSize));
277+
}
278+
}
279+
280+
@ParameterizedTest
281+
@MethodSource("staticFiles")
282+
public void testHeadStatic(String filename, long expectedSize) throws Exception
255283
{
256284
URI destUri = server.getURI().resolve("/" + filename);
257285
InputStreamResponseListener responseListener = new InputStreamResponseListener();
@@ -274,6 +302,30 @@ public void testHead(String filename, long expectedSize) throws Exception
274302
assertThat("Http Response Header: \"Content-Length: " + contentLength + "\"", contentLengthLong, is(expectedSize));
275303
}
276304

305+
@ParameterizedTest
306+
@MethodSource("staticFiles")
307+
public void testHeadChunked(String filename, long expectedSize) throws Exception
308+
{
309+
URI destUri = server.getURI().resolve("/chunked/" + filename);
310+
InputStreamResponseListener responseListener = new InputStreamResponseListener();
311+
312+
Request request = client.newRequest(destUri)
313+
.method(HttpMethod.HEAD);
314+
request.send(responseListener);
315+
Response response = responseListener.get(5, TimeUnit.SECONDS);
316+
317+
try (InputStream in = responseListener.getInputStream())
318+
{
319+
assertThat(in.read(), is(-1));
320+
}
321+
322+
assertThat("HTTP Response Code", response.getStatus(), is(200));
323+
// dumpResponse(response);
324+
325+
String transferEncoding = response.getHeaders().get(HttpHeader.TRANSFER_ENCODING);
326+
assertThat("Http Response Header: \"Transfer-Encoding\"", transferEncoding, is("chunked"));
327+
}
328+
277329
@ParameterizedTest
278330
@MethodSource("staticFiles")
279331
public void testUpload(String filename, long expectedSize) throws Exception
@@ -359,6 +411,22 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws I
359411
}
360412
}
361413

414+
public static class ChunkedServlet extends HttpServlet
415+
{
416+
@Override
417+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
418+
{
419+
URL resource = req.getServletContext().getResource(req.getPathInfo());
420+
OutputStream output = resp.getOutputStream();
421+
try (InputStream input = resource.openStream())
422+
{
423+
resp.setContentType("application/octet-stream");
424+
resp.flushBuffer();
425+
IO.copy(input, output);
426+
}
427+
}
428+
}
429+
362430
public static class MultipartServlet extends HttpServlet
363431
{
364432
@Override

0 commit comments

Comments
 (0)