(tomcat) 04/04: Additional tests for non-blocking chunked reads
This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 10.1.x in repository https://gitbox.apache.org/repos/asf/tomcat.git commit 24a1932b51f77d8935e690dead32a643b45273f9 Author: Mark Thomas AuthorDate: Fri Apr 26 16:02:09 2024 +0100 Additional tests for non-blocking chunked reads --- .../catalina/nonblocking/TestNonBlockingAPI.java | 442 - .../http11/filters/TestChunkedInputFilter.java | 176 +++- 2 files changed, 587 insertions(+), 31 deletions(-) diff --git a/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java b/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java index eca6090712..7840c56c98 100644 --- a/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java +++ b/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java @@ -73,6 +73,9 @@ public class TestNonBlockingAPI extends TomcatBaseTest { private static final Log log = LogFactory.getLog(TestNonBlockingAPI.class); +private static String TRAILER_HEADER_NAME = "x-test"; +private static String TRAILER_HEADER_VALUE = "abcde"; + private static final int CHUNK_SIZE = 1024 * 1024; private static final int WRITE_SIZE = CHUNK_SIZE * 10; private static final byte[] DATA = new byte[WRITE_SIZE]; @@ -131,7 +134,7 @@ public class TestNonBlockingAPI extends TomcatBaseTest { // No file system docBase required Context ctx = getProgrammaticRootContext(); -NBReadServlet servlet = new NBReadServlet(ignoreIsReady, async); +NBReadServlet servlet = new NBReadServlet(ignoreIsReady, async, null); String servletName = NBReadServlet.class.getName(); Tomcat.addServlet(ctx, servletName, servlet); ctx.addServletMappingDecoded("/", servletName); @@ -155,31 +158,416 @@ public class TestNonBlockingAPI extends TomcatBaseTest { @Test -public void testNonBlockingReadChunked() throws Exception { +public void testNonBlockingReadChunkedNoSplits() throws Exception { +String[] requestBody = new String[] { +"14" + SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitBeforeChunkHeader() throws Exception { +String[] requestBody = new String[] { +"", +"14" + SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitInChunkHeader() throws Exception { +String[] requestBody = new String[] { +"1", +"4" + SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitAfterChunkHeader() throws Exception { +String[] requestBody = new String[] { +"14", +SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitInHeaderCrlf() throws Exception { +String[] requestBody = new String[] { +"14\r", +"\n" + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitAfterHeaderCrlf() throws Exception { +String[] requestBody = new String[] { +"14" + SimpleHttpClient.CRLF, +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitBeforeExtensionDelimter() throws Exception { +String[] requestBody = new String[] { +"14", +";a=b" + SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitAfterExtensionDelimter()
(tomcat) 04/04: Additional tests for non-blocking chunked reads
This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git commit b25db176fb138af7086a1ea5a1473b03b58747e8 Author: Mark Thomas AuthorDate: Fri Apr 26 16:02:09 2024 +0100 Additional tests for non-blocking chunked reads --- .../catalina/nonblocking/TestNonBlockingAPI.java | 442 - .../http11/filters/TestChunkedInputFilter.java | 172 +++- 2 files changed, 583 insertions(+), 31 deletions(-) diff --git a/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java b/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java index 66fbf2ac12..7402e69645 100644 --- a/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java +++ b/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java @@ -74,6 +74,9 @@ public class TestNonBlockingAPI extends TomcatBaseTest { private static final Log log = LogFactory.getLog(TestNonBlockingAPI.class); +private static String TRAILER_HEADER_NAME = "x-test"; +private static String TRAILER_HEADER_VALUE = "abcde"; + private static final int CHUNK_SIZE = 1024 * 1024; private static final int WRITE_SIZE = CHUNK_SIZE * 10; private static final byte[] DATA = new byte[WRITE_SIZE]; @@ -132,7 +135,7 @@ public class TestNonBlockingAPI extends TomcatBaseTest { // No file system docBase required Context ctx = getProgrammaticRootContext(); -NBReadServlet servlet = new NBReadServlet(ignoreIsReady, async); +NBReadServlet servlet = new NBReadServlet(ignoreIsReady, async, null); String servletName = NBReadServlet.class.getName(); Tomcat.addServlet(ctx, servletName, servlet); ctx.addServletMappingDecoded("/", servletName); @@ -156,31 +159,416 @@ public class TestNonBlockingAPI extends TomcatBaseTest { @Test -public void testNonBlockingReadChunked() throws Exception { +public void testNonBlockingReadChunkedNoSplits() throws Exception { +String[] requestBody = new String[] { +"14" + SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitBeforeChunkHeader() throws Exception { +String[] requestBody = new String[] { +"", +"14" + SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitInChunkHeader() throws Exception { +String[] requestBody = new String[] { +"1", +"4" + SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitAfterChunkHeader() throws Exception { +String[] requestBody = new String[] { +"14", +SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitInHeaderCrlf() throws Exception { +String[] requestBody = new String[] { +"14\r", +"\n" + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitAfterHeaderCrlf() throws Exception { +String[] requestBody = new String[] { +"14" + SimpleHttpClient.CRLF, +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitBeforeExtensionDelimter() throws Exception { +String[] requestBody = new String[] { +"14", +";a=b" + SimpleHttpClient.CRLF + +"012345678901FINISHED" + SimpleHttpClient.CRLF + +"0" + SimpleHttpClient.CRLF + +SimpleHttpClient.CRLF}; + +doTestNonBlockingReadChunked(requestBody); +} + + +@Test +public void testNonBlockingReadChunkedSplitAfterExtensionDelimter()