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