Author: markt Date: Sun Mar 8 17:37:59 2015 New Revision: 1665060 URL: http://svn.apache.org/r1665060 Log: Add a unit test for https://bz.apache.org/bugzilla/show_bug.cgi?id=57674 It passes but this is to catch regressions and for consistency with earlier branches.
Modified: tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java Modified: tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java?rev=1665060&r1=1665059&r2=1665060&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java (original) +++ tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java Sun Mar 8 17:37:59 2015 @@ -763,6 +763,48 @@ public class TestAbstractAjpProcessor ex } + @Test + public void testLargeResponse() throws Exception { + + int ajpPacketSize = 16000; + + Tomcat tomcat = getTomcatInstance(); + tomcat.getConnector().setProperty("packetSize", Integer.toString(ajpPacketSize)); + + // No file system docBase required + Context ctx = tomcat.addContext("", null); + + FixedResponseSizeServlet servlet = new FixedResponseSizeServlet(15000, 16000); + Tomcat.addServlet(ctx, "FixedResponseSizeServlet", servlet); + ctx.addServletMapping("/", "FixedResponseSizeServlet"); + + tomcat.start(); + + SimpleAjpClient ajpClient = new SimpleAjpClient(ajpPacketSize); + ajpClient.setPort(getPort()); + ajpClient.connect(); + + validateCpong(ajpClient.cping()); + + ajpClient.setUri("/"); + TesterAjpMessage forwardMessage = ajpClient.createForwardMessage(); + forwardMessage.end(); + + TesterAjpMessage responseHeaders = ajpClient.sendMessage(forwardMessage); + + // Expect 3 messages: headers, body, end for a valid request + validateResponseHeaders(responseHeaders, 200, "OK"); + TesterAjpMessage responseBody = ajpClient.readMessage(); + Assert.assertTrue(responseBody.len > 15000); + validateResponseEnd(ajpClient.readMessage(), true); + + // Double check the connection is still open + validateCpong(ajpClient.cping()); + + ajpClient.disconnect(); + } + + /** * Process response header packet and checks the status. Any other data is * ignored. @@ -943,4 +985,33 @@ public class TestAbstractAjpProcessor ex } } } + + + private static class FixedResponseSizeServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + private final int responseSize; + private final int bufferSize; + + public FixedResponseSizeServlet(int responseSize, int bufferSize) { + this.responseSize = responseSize; + this.bufferSize = bufferSize; + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + resp.setBufferSize(bufferSize); + + resp.setContentType("text/plain"); + resp.setCharacterEncoding("UTF-8"); + resp.setContentLength(responseSize); + + PrintWriter pw = resp.getWriter(); + for (int i = 0; i < responseSize; i++) { + pw.append('X'); + } + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org