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 2020/10/15 16:32:39 UTC
[tomcat] 01/02: Add a test for
connectionUploadTimeout/disableUploadTimeout
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 09dec729ced9fe8cf1d7245b56189825134bb850
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Oct 15 15:21:53 2020 +0100
Add a test for connectionUploadTimeout/disableUploadTimeout
---
.../org/apache/catalina/startup/TesterServlet.java | 17 +++++
.../coyote/http11/TestAbstractHttp11Processor.java | 88 ++++++++++++++++++++++
2 files changed, 105 insertions(+)
diff --git a/test/org/apache/catalina/startup/TesterServlet.java b/test/org/apache/catalina/startup/TesterServlet.java
index 324d3f4..59851c9 100644
--- a/test/org/apache/catalina/startup/TesterServlet.java
+++ b/test/org/apache/catalina/startup/TesterServlet.java
@@ -28,6 +28,19 @@ public class TesterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
+ private final boolean explicitClose;
+
+
+ public TesterServlet() {
+ this(false);
+ }
+
+
+ public TesterServlet(boolean explicitClose) {
+ this.explicitClose = explicitClose;
+ }
+
+
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
@@ -35,5 +48,9 @@ public class TesterServlet extends HttpServlet {
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.print("OK");
+
+ if (explicitClose) {
+ resp.setHeader("Connection", "close");
+ }
}
}
diff --git a/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java b/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
index 0d9f0ed..2ff32f3 100644
--- a/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
+++ b/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
@@ -48,6 +48,7 @@ import org.junit.Test;
import org.apache.catalina.Context;
import org.apache.catalina.Wrapper;
+import org.apache.catalina.connector.Connector;
import org.apache.catalina.deploy.SecurityCollection;
import org.apache.catalina.deploy.SecurityConstraint;
import org.apache.catalina.startup.SimpleHttpClient;
@@ -1627,4 +1628,91 @@ public class TestAbstractHttp11Processor extends TomcatBaseTest {
out.print(" and request.getServerPort() is " + req.getServerPort());
}
}
+
+
+ @Test
+ public void testSlowUploadTimeoutWithLongerUploadTimeout() throws Exception {
+ doTestSlowUploadTimeout(true);
+ }
+
+
+ @Test
+ public void testSlowUploadTimeoutWithoutLongerUploadTimeout() throws Exception {
+ doTestSlowUploadTimeout(false);
+ }
+
+
+ private void doTestSlowUploadTimeout(boolean useLongerUploadTimeout) throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+ Connector connector = tomcat.getConnector();
+
+ int connectionTimeout = ((Integer) connector.getProperty("connectionTimeout")).intValue();
+
+ // These factors should make the differences large enough that the CI
+ // tests pass consistently. If not, may need to reduce connectionTimeout
+ // and increase delay and connectionUploadTimeout
+ int delay = connectionTimeout * 2;
+ int connectionUploadTimeout = connectionTimeout * 4;
+
+ if (useLongerUploadTimeout) {
+ connector.setProperty("connectionUploadTimeout", "" + connectionUploadTimeout);
+ connector.setProperty("disableUploadTimeout", "false");
+ }
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new SwallowBodyTesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "POST /foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: localhost:" + getPort() + SimpleHttpClient.CRLF +
+ "Content-Length: 10" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request, "XXXXXXXXXX"});
+ client.setRequestPause(delay);
+
+ client.connect();
+ client.processRequest();
+
+ if (useLongerUploadTimeout) {
+ // Expected response is a 200 response.
+ Assert.assertTrue(client.isResponse200());
+ Assert.assertEquals("OK", client.getResponseBody());
+ } else {
+ // Different failure modes with different connectors
+ Assert.assertFalse(client.isResponse200());
+ }
+ }
+
+
+ private static class SwallowBodyTesterServlet extends TesterServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ public SwallowBodyTesterServlet() {
+ super(true);
+ }
+
+ @Override
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+
+ // Swallow the body
+ byte[] buf = new byte[1024];
+ InputStream is = req.getInputStream();
+ while (is.read(buf) > 0) {
+ // Loop
+ }
+
+ // Standard response
+ doGet(req, resp);
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org