You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/03/07 16:19:09 UTC

svn commit: r1664866 - /tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java

Author: markt
Date: Sat Mar  7 15:19:09 2015
New Revision: 1664866

URL: http://svn.apache.org/r1664866
Log:
Add test cases for https://bz.apache.org/bugzilla/show_bug.cgi?id=57638
Note that this bug does not (currently) affect 9.0.x. The test case is being added for consistency with other branches and to catch regressions.

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=1664866&r1=1664865&r2=1664866&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java (original)
+++ tomcat/trunk/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java Sat Mar  7 15:19:09 2015
@@ -66,6 +66,8 @@ public class TestAbstractAjpProcessor ex
 
     private void doSnoopTest(RequestDescriptor desc) throws Exception {
 
+        final int ajpPacketSize = 16000;
+
         Map<String, String> requestInfo = desc.getRequestInfo();
         Map<String, String> contextInitParameters = desc.getContextInitParameters();
         Map<String, String> contextAttributes = desc.getContextAttributes();
@@ -74,6 +76,7 @@ public class TestAbstractAjpProcessor ex
         Map<String, String> params = desc.getParams();
 
         Tomcat tomcat = getTomcatInstance();
+        tomcat.getConnector().setProperty("packetSize", Integer.toString(ajpPacketSize));
 
         // No file system docBase required
         Context ctx = tomcat.addContext("", null);
@@ -81,7 +84,7 @@ public class TestAbstractAjpProcessor ex
         Tomcat.addServlet(ctx, "snoop", new SnoopServlet());
         ctx.addServletMapping("/", "snoop");
 
-        SimpleAjpClient ajpClient = new SimpleAjpClient();
+        SimpleAjpClient ajpClient = new SimpleAjpClient(ajpPacketSize);
 
         if (requestInfo.get("REQUEST-QUERY-STRING") != null &&
             params.size() > 0) {
@@ -91,6 +94,7 @@ public class TestAbstractAjpProcessor ex
         }
 
         String value;
+        int bodySize = 0;
         Map<String, String> savedRequestInfo = new HashMap<>();
         for (String name: requestInfo.keySet()) {
             value = requestInfo.get(name);
@@ -138,6 +142,10 @@ public class TestAbstractAjpProcessor ex
                 case "REQUEST-CONTENT-LENGTH":
                     headers.put("CONTENT-LENGTH", value);
                     break;
+                case "REQUEST-BODY-SIZE":
+                    savedRequestInfo.put(name, value);
+                    bodySize = Integer.parseInt(value);
+                    break;
                 case "REQUEST-CONTENT-TYPE":
                     headers.put("CONTENT-TYPE", value);
                     break;
@@ -203,6 +211,8 @@ public class TestAbstractAjpProcessor ex
                 case "REQUEST-SECRET":
                     forwardMessage.addAttribute(0x0C, value);
                     break;
+                case "REQUEST-BODY-SIZE":
+                    break;
                 default:
                     throw(new IllegalArgumentException("Request setting '" + name + "' not supported"));
             }
@@ -286,8 +296,20 @@ public class TestAbstractAjpProcessor ex
         ajpClient.setPort(getPort());
         ajpClient.connect();
 
+        TesterAjpMessage responseHeaders = null;
+        if (bodySize == 0) {
+            responseHeaders = ajpClient.sendMessage(forwardMessage);
+        } else {
+            TesterAjpMessage bodyMessage = ajpClient.createBodyMessage(new byte[bodySize]);
+            responseHeaders = ajpClient.sendMessage(forwardMessage, bodyMessage);
+            // Expect back a request for more data (which will be emty and
+            // trigger end of stream in Servlet)
+            validateGetBody(responseHeaders);
+            bodyMessage = ajpClient.createBodyMessage(new byte[0]);
+            responseHeaders = ajpClient.sendMessage(bodyMessage);
+        }
+
         // Expect 3 packets: headers, body, end
-        TesterAjpMessage responseHeaders = ajpClient.sendMessage(forwardMessage);
         validateResponseHeaders(responseHeaders, 200, "OK");
 
         String body = extractResponseBody(ajpClient.readMessage());
@@ -446,6 +468,26 @@ public class TestAbstractAjpProcessor ex
     }
 
     @Test
+    public void testSmallBody() throws Exception {
+        RequestDescriptor desc = new RequestDescriptor();
+        desc.putRequestInfo("REQUEST-METHOD", "PUT");
+        desc.putRequestInfo("REQUEST-CONTENT-LENGTH", "100");
+        desc.putRequestInfo("REQUEST-BODY-SIZE", "100");
+        desc.putRequestInfo("REQUEST-URI", "/testSmallBody");
+        doSnoopTest(desc);
+    }
+
+    @Test
+    public void testLargeBody() throws Exception {
+        RequestDescriptor desc = new RequestDescriptor();
+        desc.putRequestInfo("REQUEST-METHOD", "PUT");
+        desc.putRequestInfo("REQUEST-CONTENT-LENGTH", "10000");
+        desc.putRequestInfo("REQUEST-BODY-SIZE", "10000");
+        desc.putRequestInfo("REQUEST-URI", "/testLargeBody");
+        doSnoopTest(desc);
+    }
+
+    @Test
     public void testSecret() throws Exception {
         Tomcat tomcat = getTomcatInstance();
         tomcat.getConnector().setProperty("requiredSecret", "RIGHTSECRET");
@@ -757,6 +799,14 @@ public class TestAbstractAjpProcessor ex
         }
     }
 
+    private void validateGetBody(TesterAjpMessage message) {
+        // First two bytes should always be AB
+        Assert.assertEquals((byte) 'A', message.buf[0]);
+        Assert.assertEquals((byte) 'B', message.buf[1]);
+        // Should be a body chunk message
+        Assert.assertEquals(0x06, message.readByte());
+    }
+
     /**
      * Extract the content from a response message.
      */



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org