Author: markt
Date: Mon Aug 24 08:22:21 2009
New Revision: 807113

URL: http://svn.apache.org/viewvc?rev=807113&view=rev
Log:
Extract the SimpleHttpClient in to a separate class and move it to a more 
logical package since it will be reused.
Don't override method unnecessarily.

Added:
    tomcat/trunk/test/org/apache/catalina/core/
    tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java
    tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
Modified:
    tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java

Modified: tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java?rev=807113&r1=807112&r2=807113&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java (original)
+++ tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java Mon Aug 24 
08:22:21 2009
@@ -17,20 +17,9 @@
 
 package org.apache.catalina.connector;
 
-import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
 import java.util.Enumeration;
-import java.util.List;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -38,6 +27,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.startup.SimpleHttpClient;
 import org.apache.catalina.startup.TestTomcatBase;
 import org.apache.catalina.startup.Tomcat;
 
@@ -45,15 +35,6 @@
  * Test case for {...@link Request}. 
  */
 public class TestRequest extends TestTomcatBase {
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @Override
-    public void tearDown() throws Exception {
-        super.tearDown();
-    }
 
     /**
      * Test case for https://issues.apache.org/bugzilla/show_bug.cgi?id=37794
@@ -210,131 +191,4 @@
         }
         
     }
-
-    /**
-     * Simple client for unit testing. It isn't robust, it isn't secure and
-     * should not be used as the basis for production code. Its only purpose
-     * is to do the bare minimum for the unit tests. 
-     */
-    private abstract static class SimpleHttpClient {
-        public static final String TEMP_DIR =
-            System.getProperty("java.io.tmpdir");
-        
-        public static final String CRLF = "\r\n";
-
-        public static final String OK_200 = "HTTP/1.1 200";
-        public static final String FAIL_500 = "HTTP/1.1 500";
-        
-        private Socket socket;
-        private Writer writer;
-        private BufferedReader reader;
-        private int port = 8080;
-        
-        private String[] request;
-        private int requestPause = 1000;
-        
-        private String responseLine;
-        private List<String> responseHeaders = new ArrayList<String>();
-        private String responseBody;
-
-        public void setPort(int thePort) {
-            port = thePort;
-        }
-
-        public void setRequest(String[] theRequest) {
-            request = theRequest;
-        }
-        
-        public void setRequestPause(int theRequestPause) {
-            requestPause = theRequestPause;
-        }
-
-        public String getResponseLine() {
-            return responseLine;
-        }
-
-        public List<String> getResponseHeaders() {
-            return responseHeaders;
-        }
-
-        public String getResponseBody() {
-            return responseBody;
-        }
-
-        public void connect() throws UnknownHostException, IOException {
-            socket = new Socket("localhost", port);
-            OutputStream os = socket.getOutputStream();
-            writer = new OutputStreamWriter(os);
-            InputStream is = socket.getInputStream();
-            Reader r = new InputStreamReader(is);
-            reader = new BufferedReader(r);
-        }
-        
-        public void processRequest() throws IOException, InterruptedException {
-            // Send the request
-            boolean first = true;
-            for (String requestPart : request) {
-                if (first) {
-                    first = false;
-                } else {
-                    Thread.sleep(requestPause);
-                }
-                writer.write(requestPart);
-                writer.flush();
-            }
-
-            // Read the response
-            responseLine = readLine();
-            
-            // Put the headers into the map
-            String line = readLine();
-            while (line.length() > 0) {
-                responseHeaders.add(line);
-                line = readLine();
-            }
-            
-            // Read the body, if any
-            StringBuilder builder = new StringBuilder();
-            line = readLine();
-            while (line != null && line.length() > 0) {
-                builder.append(line);
-                line = readLine();
-            }
-            responseBody = builder.toString();
-
-        }
-
-        public String readLine() throws IOException {
-            return reader.readLine();
-        }
-        
-        public void disconnect() throws IOException {
-            writer.close();
-            reader.close();
-            socket.close();
-        }
-        
-        public void reset() {
-            socket = null;
-            writer = null;
-            reader = null;
-            
-            request = null;
-            requestPause = 1000;
-            
-            responseLine = null;
-            responseHeaders = new ArrayList<String>();
-            responseBody = null;
-        }
-        
-        public boolean isResponse200() {
-            return getResponseLine().startsWith(OK_200);
-        }
-        
-        public boolean isResponse500() {
-            return getResponseLine().startsWith(FAIL_500);
-        }
-
-        public abstract boolean isResponseBodyOK();
-    }
 }

Added: tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java?rev=807113&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java (added)
+++ tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java Mon Aug 
24 08:22:21 2009
@@ -0,0 +1,108 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.catalina.core;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.apache.catalina.deploy.FilterDef;
+import org.apache.catalina.deploy.FilterMap;
+import org.apache.catalina.startup.SimpleHttpClient;
+import org.apache.catalina.startup.TestTomcatBase;
+import org.apache.catalina.startup.Tomcat;
+
+public class TestStandardContext extends TestTomcatBase {
+
+    private static final String REQUEST =
+        "GET / HTTP/1.1\r\n" +
+        "Host: anything\r\n" +
+        "Connection: close\r\n" +
+        "\r\n";
+
+    public void testBug46243() throws Exception {
+        
+        // Set up a container
+        Tomcat tomcat = getTomcatInstance();
+        
+        File docBase = new File(tomcat.getHost().getAppBase(), "ROOT");
+        docBase.mkdirs();
+        
+        StandardContext root = tomcat.addContext("", "ROOT");
+       
+        // Add test a filter that fails
+        FilterDef filterDef = new FilterDef();
+        filterDef.setFilterClass(Bug46243Filter.class.getName());
+        filterDef.setFilterName("Bug46243");
+        root.addFilterDef(filterDef);
+        FilterMap filterMap = new FilterMap();
+        filterMap.setFilterName("Bug46243");
+        filterMap.addURLPattern("*");
+        root.addFilterMap(filterMap);
+
+        // Add a test servlet so there is something to generate a response if
+        // it works (although it shouldn't)
+        Tomcat.addServlet(root, "Bug46243", new HelloWorldServlet());
+        root.addServletMapping("/", "Bug46243");
+        
+        tomcat.start();
+        
+        // Configure the client
+        Bug46243Client client = new Bug46243Client();
+        client.setPort(getPort());
+        client.setRequest(new String[] { REQUEST });
+
+        client.connect();
+        client.processRequest();
+        assertTrue(client.isResponse404());
+    }
+    
+    private static final class Bug46243Client extends SimpleHttpClient {
+        public boolean isResponseBodyOK() {
+            // Don't care about the body in this test
+            return true;
+        }
+    }
+    
+    public static final class Bug46243Filter implements Filter {
+        
+        @Override
+        public void destroy() {
+            // NOOP
+        }
+
+        @Override
+        public void doFilter(ServletRequest request, ServletResponse response,
+                FilterChain chain) throws IOException, ServletException {
+            // If it works, do nothing
+            chain.doFilter(request, response);
+        }
+
+        @Override
+        public void init(FilterConfig filterConfig) throws ServletException {
+            throw new ServletException("Init fail", new 
ClassNotFoundException());
+        }
+        
+    }
+}

Added: tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java?rev=807113&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java (added)
+++ tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java Mon Aug 
24 08:22:21 2009
@@ -0,0 +1,147 @@
+package org.apache.catalina.startup;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Simple client for unit testing. It isn't robust, it isn't secure and
+ * should not be used as the basis for production code. Its only purpose
+ * is to do the bare minimum for the unit tests. It does not support keep-alive
+ * connections - make sure you send a Connection: close header with the 
request.
+ */
+public abstract class SimpleHttpClient {
+    public static final String TEMP_DIR =
+        System.getProperty("java.io.tmpdir");
+    
+    public static final String CRLF = "\r\n";
+
+    public static final String OK_200 = "HTTP/1.1 200";
+    public static final String FAIL_404 = "HTTP/1.1 404";
+    public static final String FAIL_500 = "HTTP/1.1 500";
+    
+    private Socket socket;
+    private Writer writer;
+    private BufferedReader reader;
+    private int port = 8080;
+    
+    private String[] request;
+    private int requestPause = 1000;
+    
+    private String responseLine;
+    private List<String> responseHeaders = new ArrayList<String>();
+    private String responseBody;
+
+    public void setPort(int thePort) {
+        port = thePort;
+    }
+
+    public void setRequest(String[] theRequest) {
+        request = theRequest;
+    }
+    
+    public void setRequestPause(int theRequestPause) {
+        requestPause = theRequestPause;
+    }
+
+    public String getResponseLine() {
+        return responseLine;
+    }
+
+    public List<String> getResponseHeaders() {
+        return responseHeaders;
+    }
+
+    public String getResponseBody() {
+        return responseBody;
+    }
+
+    public void connect() throws UnknownHostException, IOException {
+        socket = new Socket("localhost", port);
+        OutputStream os = socket.getOutputStream();
+        writer = new OutputStreamWriter(os);
+        InputStream is = socket.getInputStream();
+        Reader r = new InputStreamReader(is);
+        reader = new BufferedReader(r);
+    }
+    
+    public void processRequest() throws IOException, InterruptedException {
+        // Send the request
+        boolean first = true;
+        for (String requestPart : request) {
+            if (first) {
+                first = false;
+            } else {
+                Thread.sleep(requestPause);
+            }
+            writer.write(requestPart);
+            writer.flush();
+        }
+
+        // Read the response
+        responseLine = readLine();
+        
+        // Put the headers into the map
+        String line = readLine();
+        while (line.length() > 0) {
+            responseHeaders.add(line);
+            line = readLine();
+        }
+        
+        // Read the body, if any
+        StringBuilder builder = new StringBuilder();
+        line = readLine();
+        while (line != null && line.length() > 0) {
+            builder.append(line);
+            line = readLine();
+        }
+        responseBody = builder.toString();
+
+    }
+
+    public String readLine() throws IOException {
+        return reader.readLine();
+    }
+    
+    public void disconnect() throws IOException {
+        writer.close();
+        reader.close();
+        socket.close();
+    }
+    
+    public void reset() {
+        socket = null;
+        writer = null;
+        reader = null;
+        
+        request = null;
+        requestPause = 1000;
+        
+        responseLine = null;
+        responseHeaders = new ArrayList<String>();
+        responseBody = null;
+    }
+    
+    public boolean isResponse200() {
+        return getResponseLine().startsWith(OK_200);
+    }
+    
+    public boolean isResponse404() {
+        return getResponseLine().startsWith(FAIL_404);
+    }
+
+    public boolean isResponse500() {
+        return getResponseLine().startsWith(FAIL_500);
+    }
+
+    public abstract boolean isResponseBodyOK();
+}
\ No newline at end of file



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

Reply via email to