(tomcat) 04/04: Additional tests for non-blocking chunked reads

2024-04-26 Thread markt
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

2024-04-26 Thread markt
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()