Author: markt
Date: Mon Mar 29 10:36:55 2010
New Revision: 928694

URL: http://svn.apache.org/viewvc?rev=928694&view=rev
Log:
Test case for https://issues.apache.org/bugzilla/show_bug.cgi?id=48839
Fix to follow shortly

Added:
    tomcat/trunk/test/org/apache/coyote/
    tomcat/trunk/test/org/apache/coyote/http11/
    tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java   
(with props)

Added: tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java?rev=928694&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java 
(added)
+++ tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java Mon 
Mar 29 10:36:55 2010
@@ -0,0 +1,131 @@
+package org.apache.coyote.http11;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.connector.Connector;
+import org.apache.catalina.startup.SimpleHttpClient;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+
+public class TestInternalInputBuffer extends TomcatBaseTest {
+    
+    /**
+     * Test case for https://issues.apache.org/bugzilla/show_bug.cgi?id=48839
+     * with BIO
+     */
+    public void testBug48839BIO() {
+        
+        Bug48839Client client = new Bug48839Client();
+        client.setPort(getPort());
+        
+        // BIO test
+        client.doRequest(false);
+        assertTrue(client.isResponse200());
+        assertTrue(client.isResponseBodyOK());
+    }
+
+    
+    /**
+     * Test case for https://issues.apache.org/bugzilla/show_bug.cgi?id=48839
+     * with NIO
+     */
+    public void testBug48839NIO() {
+        
+        Bug48839Client client = new Bug48839Client();
+        client.setPort(getPort());
+        
+        // NIO test
+        client.doRequest(true);
+        assertTrue(client.isResponse200());
+        assertTrue(client.isResponseBodyOK());
+    }
+
+    /**
+     * Bug 48839 test client.
+     */
+    private class Bug48839Client extends SimpleHttpClient {
+                
+        private Exception doRequest(boolean useNio) {
+        
+            Tomcat tomcat = getTomcatInstance();
+            
+            if (useNio) {
+                Connector connector = 
+                    new 
Connector("org.apache.coyote.http11.Http11NioProtocol");
+                connector.setPort(getPort());
+                tomcat.getService().addConnector(connector);
+                tomcat.setConnector(connector);
+            }
+            
+            Context root = tomcat.addContext("", TEMP_DIR);
+            Tomcat.addServlet(root, "Bug48839", new Bug48839Servlet());
+            root.addServletMapping("/test", "Bug48839");
+
+            try {
+                tomcat.start();
+
+                // Open connection
+                connect();
+                
+                String[] request = new String[1];
+                request[0] =
+                    "GET http://localhost:8080/test HTTP/1.1" + CRLF +
+                    "X-Bug48839: abcd" + CRLF +
+                    "\tefgh" + CRLF +
+                    "Connection: close" + CRLF +
+                    CRLF;
+                
+                setRequest(request);
+                processRequest(); // blocks until response has been read
+                
+                // Close the connection
+                disconnect();
+            } catch (Exception e) {
+                return e;
+            }
+            return null;
+        }
+
+        @Override
+        public boolean isResponseBodyOK() {
+            if (getResponseBody() == null) {
+                return false;
+            }
+            if (!getResponseBody().contains("abcd\tefgh")) {
+                return false;
+            }
+            return true;
+        }
+        
+    }
+
+    private static class Bug48839Servlet extends HttpServlet {
+        
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * Only interested in the request headers from a GET request
+         */
+        @Override
+        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+                throws ServletException, IOException {
+            // Just echo the header value back as plain text
+            resp.setContentType("text/plain");
+            
+            PrintWriter out = resp.getWriter();
+            
+            Enumeration<String> values = req.getHeaders("X-Bug48839");
+            while (values.hasMoreElements()) {
+                out.println(values.nextElement());
+            }
+        }
+    }
+}

Propchange: 
tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java
------------------------------------------------------------------------------
    svn:eol-style = native



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

Reply via email to