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