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:38 UTC

[tomcat] branch 7.0.x updated (8cd6c13 -> 129a5d6)

This is an automated email from the ASF dual-hosted git repository.

markt pushed a change to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git.


    from 8cd6c13  Fix typo
     new 09dec72  Add a test for connectionUploadTimeout/disableUploadTimeout
     new 129a5d6  Re-fix BZ 55160

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/coyote/http11/Http11NioProcessor.java   |  2 +-
 .../org/apache/catalina/startup/TesterServlet.java | 17 +++++
 .../coyote/http11/TestAbstractHttp11Processor.java | 88 ++++++++++++++++++++++
 webapps/docs/changelog.xml                         |  4 +
 4 files changed, 110 insertions(+), 1 deletion(-)


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


[tomcat] 02/02: Re-fix BZ 55160

Posted by ma...@apache.org.
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 129a5d631f5e06228053e1ce18be7917d012fdeb
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Oct 15 17:18:23 2020 +0100

    Re-fix BZ 55160
    
    All NIO timeouts should be set on the SocketWrapper, not the underlying
    socket.
---
 java/org/apache/coyote/http11/Http11NioProcessor.java | 2 +-
 webapps/docs/changelog.xml                            | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/java/org/apache/coyote/http11/Http11NioProcessor.java b/java/org/apache/coyote/http11/Http11NioProcessor.java
index 8cc5648..4d81f1b 100644
--- a/java/org/apache/coyote/http11/Http11NioProcessor.java
+++ b/java/org/apache/coyote/http11/Http11NioProcessor.java
@@ -251,7 +251,7 @@ public class Http11NioProcessor extends AbstractHttp11Processor<NioChannel> {
 
     @Override
     protected void setSocketTimeout(int timeout) throws IOException {
-        socketWrapper.getSocket().getIOChannel().socket().setSoTimeout(timeout);
+        socketWrapper.setTimeout(timeout);
     }
 
 
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index e20a9f8..97e1263 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -97,6 +97,10 @@
         and the encoded solidus was preceeded by other %nn encoded characters.
         Based on a pull request by willmeck. (markt)
       </fix>
+      <fix>
+        <bug>55160</bug>: Re-fix this bug after the original fix was reverted by
+        a separate fix to timeouts in 7.0.81. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Web applications">


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


[tomcat] 01/02: Add a test for connectionUploadTimeout/disableUploadTimeout

Posted by ma...@apache.org.
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