Author: rjung
Date: Tue Dec 16 10:46:22 2014
New Revision: 1645903

URL: http://svn.apache.org/r1645903
Log:
- Add lots of info the SnoopServlet output.
- Add SnoopResult class to parse SnoopServlet
  response body.
- Adjust TestRewriteValve to use the new
  SnoopServlet / SnoopResult

The more powerful SnoopServlet will be used in
forthcoming AJP protocol tests.

Backport of r1645358 from trunk.

Modified:
    tomcat/tc8.0.x/trunk/   (props changed)
    tomcat/tc8.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java
    
tomcat/tc8.0.x/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
    tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc8.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Dec 16 10:46:22 2014
@@ -1 +1 @@
-/tomcat/trunk:1636524,1637156,1637176,1637188,1637331,1637684,1637695,1638720-1638725,1639653,1640010,1640083-1640084,1640088,1640275,1640322,1640347,1640361,1640365,1640403,1640410,1640652,1640655-1640658,1640688,1640700-1640883,1640903,1640976,1640978,1641000,1641026,1641038-1641039,1641051-1641052,1641058,1641064,1641300,1641369,1641374,1641380,1641486,1641634,1641656-1641692,1641704,1641707-1641718,1641720-1641722,1641735,1641981,1642233,1642280,1642554,1642564,1642595,1642606,1642668,1642679,1642697,1642699,1642766,1643002,1643045,1643054-1643055,1643066,1643121,1643128,1643206,1643209-1643210,1643216,1643249,1643270,1643283,1643309-1643310,1643323,1643365-1643366,1643370-1643371,1643465,1643474,1643536,1643570,1643634,1643649,1643651,1643654,1643675,1643731,1643733-1643734,1643761,1643766,1643814,1643937,1643963,1644017,1644169,1644201-1644203,1644321,1644323,1644516,1644523,1644529,1644535,1644730,1644768,1644784-1644785,1644790,1644793,1644815,1644884,1644886,1644890,1644892
 
,1644910,1644924,1644929-1644930,1644935,1644989,1645011,1645247,1645355,1645357,1645455,1645465,1645469,1645471,1645473,1645475,1645487,1645626,1645641,1645685
+/tomcat/trunk:1636524,1637156,1637176,1637188,1637331,1637684,1637695,1638720-1638725,1639653,1640010,1640083-1640084,1640088,1640275,1640322,1640347,1640361,1640365,1640403,1640410,1640652,1640655-1640658,1640688,1640700-1640883,1640903,1640976,1640978,1641000,1641026,1641038-1641039,1641051-1641052,1641058,1641064,1641300,1641369,1641374,1641380,1641486,1641634,1641656-1641692,1641704,1641707-1641718,1641720-1641722,1641735,1641981,1642233,1642280,1642554,1642564,1642595,1642606,1642668,1642679,1642697,1642699,1642766,1643002,1643045,1643054-1643055,1643066,1643121,1643128,1643206,1643209-1643210,1643216,1643249,1643270,1643283,1643309-1643310,1643323,1643365-1643366,1643370-1643371,1643465,1643474,1643536,1643570,1643634,1643649,1643651,1643654,1643675,1643731,1643733-1643734,1643761,1643766,1643814,1643937,1643963,1644017,1644169,1644201-1644203,1644321,1644323,1644516,1644523,1644529,1644535,1644730,1644768,1644784-1644785,1644790,1644793,1644815,1644884,1644886,1644890,1644892
 
,1644910,1644924,1644929-1644930,1644935,1644989,1645011,1645247,1645355,1645357-1645358,1645455,1645465,1645469,1645471,1645473,1645475,1645487,1645626,1645641,1645685

Modified: 
tomcat/tc8.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java?rev=1645903&r1=1645902&r2=1645903&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java 
(original)
+++ tomcat/tc8.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java 
Tue Dec 16 10:46:22 2014
@@ -25,13 +25,17 @@ import java.io.PrintWriter;
 import java.net.HttpURLConnection;
 import java.net.InetAddress;
 import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 
 import static org.junit.Assert.fail;
 
@@ -231,21 +235,225 @@ public abstract class TomcatBaseTest ext
     }
 
 
+    public final class SnoopResult {
+
+        private final HashMap<String, String> request =
+            new HashMap<String, String>();
+        private final HashMap<String, String> contextInitParameters =
+            new HashMap<String, String>();
+        private final HashMap<String, String> contextAttributes =
+            new HashMap<String, String>();
+        private final HashMap<String, String> headers =
+            new HashMap<String, String>();
+        private final HashMap<String, String> attributes =
+            new HashMap<String, String>();
+        private final HashMap<String, String> params =
+            new HashMap<String, String>();
+        private final HashMap<String, String> sessionAttributes =
+            new HashMap<String, String>();
+
+        public HashMap<String, String> getRequest() {
+            return request;
+        }
+
+        public HashMap<String, String> getContextInitParameters() {
+            return contextInitParameters;
+        }
+
+        public HashMap<String, String> getContextAttributes() {
+            return contextAttributes;
+        }
+
+        public HashMap<String, String> getHeaders() {
+            return headers;
+        }
+
+        public HashMap<String, String> getAttributes() {
+            return attributes;
+        }
+
+        public HashMap<String, String> getParams() {
+            return params;
+        }
+
+        public HashMap<String, String> getSessionAttributes() {
+            return sessionAttributes;
+        }
+
+        public SnoopResult(String body) {
+
+            int n;
+            int m;
+            String key;
+            String value;
+            String name;
+
+            for (String line: body.split("\n")) {
+                n = line.indexOf(": ");
+                if (n > 0) {
+                    key = line.substring(0, n);
+                    value = line.substring(n + 2);
+                    m = key.indexOf(':');
+                    if (m > 0) {
+                        name = key.substring(m + 1);
+                        key = key.substring(0, m);
+                        if (key.equals("CONTEXT-PARAM")) {
+                            contextInitParameters.put(name, value);
+                        } else if (key.equals("CONTEXT-ATTRIBUTE")) {
+                            contextAttributes.put(name, value);
+                        } else if (key.equals("HEADER")) {
+                            headers.put(name, value);
+                        } else if (key.equals("ATTRIBUTE")) {
+                            attributes.put(name, value);
+                        } else if (key.equals("PARAM")) {
+                            params.put(name, value);
+                        } else if (key.equals("SESSION-ATTRIBUTE")) {
+                            sessionAttributes.put(name, value);
+                        } else {
+                            request.put(key + ":" + name, value);
+                        }
+                    } else {
+                        request.put(key, value);
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * Simple servlet that dumps request information. Tests using this should
      * note that additional information may be added to in the future and 
should
-     * therefore test return values accordingly.
+     * therefore test return values using SnoopResult.
      */
     public static final class SnoopServlet extends HttpServlet {
 
         private static final long serialVersionUID = 1L;
 
         @Override
-        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+        public void service(HttpServletRequest request,
+                            HttpServletResponse response)
                 throws ServletException, IOException {
-            resp.setContentType("text/plain");
-            PrintWriter out = resp.getWriter();
-            out.println("00-RequestURI-" + req.getRequestURI());
+
+            String name;
+            StringBuilder value;
+            Object attribute;
+
+            ServletContext ctx = this.getServletContext();
+            HttpSession session = request.getSession(false);
+            PrintWriter out = response.getWriter();
+
+            response.setContentType("text/plain");
+
+            out.println("CONTEXT-NAME: " + ctx.getServletContextName());
+            out.println("CONTEXT-PATH: " + ctx.getContextPath());
+            out.println("CONTEXT-MAJOR-VERSION: " + ctx.getMajorVersion());
+            out.println("CONTEXT-MINOR-VERSION: " + ctx.getMinorVersion());
+            out.println("CONTEXT-SERVER-INFO: " + ctx.getServerInfo());
+            for (Enumeration<String> e = ctx.getInitParameterNames();
+                 e.hasMoreElements();) {
+                name = e.nextElement();
+                out.println("CONTEXT-INIT-PARAM:" + name + ": " +
+                            ctx.getInitParameter(name));
+            }
+            for (Enumeration<String> e = ctx.getAttributeNames();
+                 e.hasMoreElements();) {
+                name = e.nextElement();
+                out.println("CONTEXT-ATTRIBUTE:" + name + ": " +
+                            ctx.getAttribute(name));
+            }
+            out.println("REQUEST-CONTEXT-PATH: " + request.getContextPath());
+            out.println("REQUEST-SERVER-NAME: " + request.getServerName());
+            out.println("REQUEST-SERVER-PORT: " + request.getServerPort());
+            out.println("REQUEST-LOCAL-NAME: " + request.getLocalName());
+            out.println("REQUEST-LOCAL-ADDR: " + request.getLocalAddr());
+            out.println("REQUEST-LOCAL-PORT: " + request.getLocalPort());
+            out.println("REQUEST-REMOTE-HOST: " + request.getRemoteHost());
+            out.println("REQUEST-REMOTE-ADDR: " + request.getRemoteAddr());
+            out.println("REQUEST-REMOTE-PORT: " + request.getRemotePort());
+            out.println("REQUEST-PROTOCOL: " + request.getProtocol());
+            out.println("REQUEST-SCHEME: " + request.getScheme());
+            out.println("REQUEST-IS-SECURE: " + request.isSecure());
+            out.println("REQUEST-URI: " + request.getRequestURI());
+            out.println("REQUEST-URL: " + request.getRequestURL());
+            out.println("REQUEST-SERVLET-PATH: " + request.getServletPath());
+            out.println("REQUEST-METHOD: " + request.getMethod());
+            out.println("REQUEST-PATH-INFO: " + request.getPathInfo());
+            out.println("REQUEST-PATH-TRANSLATED: " +
+                        request.getPathTranslated());
+            out.println("REQUEST-QUERY-STRING: " + request.getQueryString());
+            out.println("REQUEST-REMOTE-USER: " + request.getRemoteUser());
+            out.println("REQUEST-USER-PRINCIPAL: " +
+                        request.getUserPrincipal());
+            out.println("REQUEST-CHARACTER-ENCODING: " +
+                        request.getCharacterEncoding());
+            out.println("REQUEST-CONTENT-LENGTH: " +
+                        request.getContentLength());
+            out.println("REQUEST-CONTENT-TYPE: " + request.getContentType());
+            out.println("REQUEST-LOCALE: " + request.getLocale());
+
+            for (Enumeration<String> e = request.getHeaderNames();
+                 e.hasMoreElements();) {
+                name = e.nextElement();
+                value = new StringBuilder();
+                for (Enumeration<String> h = request.getHeaders(name);
+                     h.hasMoreElements();) {
+                    value.append(h.nextElement());
+                    if (h.hasMoreElements()) {
+                        value.append(";");
+                    }
+                }
+                out.println("HEADER:" + name + ": " + value);
+            }
+
+            for (Enumeration<String> e = request.getAttributeNames();
+                 e.hasMoreElements();) {
+                name = e.nextElement();
+                attribute = request.getAttribute(name);
+                out.println("ATTRIBUTE:" + name + ": " +
+                            (attribute != null ? attribute : "(null)"));
+            }
+
+            for (Enumeration<String> e = request.getParameterNames();
+                 e.hasMoreElements();) {
+                name = e.nextElement();
+                value = new StringBuilder();
+                String values[] = request.getParameterValues(name);
+                int m = values.length;
+                for (int j = 0; j < m; j++) {
+                    value.append(values[j]);
+                    if (j < m - 1) {
+                        value.append(";");
+                    }
+                }
+                out.println("PARAM/" + name + ": " + value);
+            }
+
+            out.println("SESSION-REQUESTED-ID: " +
+                        request.getRequestedSessionId());
+            out.println("SESSION-REQUESTED-ID-COOKIE: " +
+                        request.isRequestedSessionIdFromCookie());
+            out.println("SESSION-REQUESTED-ID-URL: " +
+                        request.isRequestedSessionIdFromUrl());
+            out.println("SESSION-REQUESTED-ID-VALID: " +
+                        request.isRequestedSessionIdValid());
+
+            if (session != null) {
+                out.println("SESSION-ID: " + session.getId());
+                out.println("SESSION-CREATION-TIME: " +
+                        session.getCreationTime());
+                out.println("SESSION-LAST-ACCESSED-TIME: " +
+                        session.getLastAccessedTime());
+                out.println("SESSION-MAX-INACTIVE-INTERVAL: " +
+                        session.getMaxInactiveInterval());
+                out.println("SESSION-IS-NEW: " + session.isNew());
+                for (Enumeration<String> e = session.getAttributeNames();
+                     e.hasMoreElements();) {
+                    name = e.nextElement();
+                    attribute = session.getAttribute(name);
+                    out.println("SESSION-ATTRIBUTE:" + name + ": " +
+                                (attribute != null ? attribute : "(null)"));
+                }
+            }
         }
     }
 

Modified: 
tomcat/tc8.0.x/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java?rev=1645903&r1=1645902&r2=1645903&view=diff
==============================================================================
--- 
tomcat/tc8.0.x/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
 (original)
+++ 
tomcat/tc8.0.x/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
 Tue Dec 16 10:46:22 2014
@@ -67,6 +67,8 @@ public class TestRewriteValve extends To
         ByteChunk res = getUrl("http://localhost:"; + getPort() + request);
 
         String body = res.toString();
-        Assert.assertTrue(body, body.contains(expectedURI));
+        SnoopResult parsedBody = new SnoopResult(body);
+        String requestURI = parsedBody.getRequest().get("REQUEST-URI");
+        Assert.assertEquals(expectedURI, requestURI);
     }
 }

Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1645903&r1=1645902&r2=1645903&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Tue Dec 16 10:46:22 2014
@@ -180,6 +180,9 @@
         behaviour when MBean is not registered and improve error messages when
         accessed via the Manager application. (markt)
       </fix>
+      <update>
+          Improve SnoopServlet in unit tests. (rjung)
+      </update>
     </changelog>
   </subsection>
   <subsection name="Coyote">



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

Reply via email to