Modified: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/servlet/WebappFilterMapper.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/servlet/WebappFilterMapper.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/servlet/WebappFilterMapper.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/servlet/WebappFilterMapper.java Wed Feb 24 18:03:00 2010 @@ -32,6 +32,7 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; +import org.apache.tomcat.lite.util.URLEncoder; import org.apache.tomcat.servlets.util.RequestUtil; /** @@ -430,7 +431,7 @@ } public void setURLPattern(String urlPattern) { - this.urlPattern = RequestUtil.URLDecode(urlPattern); + this.urlPattern = URLEncoder.URLDecode(urlPattern); } /**
Copied: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/Base64.java (from r907366, tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/Base64.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/Base64.java?p2=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/Base64.java&p1=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/Base64.java&r1=907366&r2=915902&rev=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/Base64.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/Base64.java Wed Feb 24 18:03:00 2010 @@ -16,7 +16,7 @@ */ -package org.apache.tomcat.servlets.util; +package org.apache.tomcat.lite.util; import java.util.logging.Level; import java.util.logging.Logger; @@ -165,7 +165,10 @@ return encodedData; } - + public byte[] decode(String enc) { + return decode(enc.getBytes()); + } + /** * Decodes Base64 data into octects * Copied: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/FastHttpDateFormat.java (from r907366, tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/FastHttpDateFormat.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/FastHttpDateFormat.java?p2=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/FastHttpDateFormat.java&p1=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/FastHttpDateFormat.java&r1=907366&r2=915902&rev=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/FastHttpDateFormat.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/FastHttpDateFormat.java Wed Feb 24 18:03:00 2010 @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.tomcat.servlets.util; +package org.apache.tomcat.lite.util; import java.text.DateFormat; import java.text.ParseException; Copied: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/LocaleParser.java (from r907366, tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/LocaleParser.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/LocaleParser.java?p2=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/LocaleParser.java&p1=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/LocaleParser.java&r1=907366&r2=915902&rev=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/LocaleParser.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/LocaleParser.java Wed Feb 24 18:03:00 2010 @@ -16,7 +16,7 @@ */ -package org.apache.tomcat.servlets.util; +package org.apache.tomcat.lite.util; import java.util.ArrayList; import java.util.Locale; Copied: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/MimeMap.java (from r907366, tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/MimeMap.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/MimeMap.java?p2=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/MimeMap.java&p1=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/MimeMap.java&r1=907366&r2=915902&rev=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/MimeMap.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/MimeMap.java Wed Feb 24 18:03:00 2010 @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.tomcat.servlets.util; +package org.apache.tomcat.lite.util; import java.net.FileNameMap; import java.util.Enumeration; Copied: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/Range.java (from r907366, tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/Range.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/Range.java?p2=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/Range.java&p1=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/Range.java&r1=907366&r2=915902&rev=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/Range.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/Range.java Wed Feb 24 18:03:00 2010 @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.tomcat.servlets.util; +package org.apache.tomcat.lite.util; import java.io.IOException; import java.util.ArrayList; Copied: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/URLEncoder.java (from r907366, tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/URLEncoder.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/URLEncoder.java?p2=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/URLEncoder.java&p1=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/URLEncoder.java&r1=907366&r2=915902&rev=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/URLEncoder.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/URLEncoder.java Wed Feb 24 18:03:00 2010 @@ -14,11 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tomcat.servlets.util; +package org.apache.tomcat.lite.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.util.BitSet; /** @@ -39,7 +40,7 @@ 'A', 'B', 'C', 'D', 'E', 'F'}; //Array containing the safe characters set. - protected BitSet safeCharacters = new BitSet(256); + protected BitSet safeChars = new BitSet(128); public URLEncoder() { for (char i = 'a'; i <= 'z'; i++) { @@ -51,33 +52,61 @@ for (char i = '0'; i <= '9'; i++) { addSafeCharacter(i); } + //safe + safeChars.set('$'); + safeChars.set('-'); + safeChars.set('_'); + safeChars.set('.'); + + // Dangerous: someone may treat this as " " + // RFC1738 does allow it, it's not reserved + // safeChars.set('+'); + //extra + safeChars.set('!'); + safeChars.set('*'); + safeChars.set('\''); + safeChars.set('('); + safeChars.set(')'); + safeChars.set(','); } public void addSafeCharacter( char c ) { - safeCharacters.set( c ); + safeChars.set( c ); } - public String encode( String path ) { + public String encodeURL(String path) { + return encodeURL(path, "UTF-8", true); + } + + public String encodeURL(String path, String enc, boolean allowSlash) { int maxBytesPerChar = 10; - int caseDiff = ('a' - 'A'); + StringBuffer rewrittenPath = new StringBuffer(path.length()); ByteArrayOutputStream buf = new ByteArrayOutputStream(maxBytesPerChar); OutputStreamWriter writer = null; try { - writer = new OutputStreamWriter(buf, "UTF8"); - } catch (Exception e) { - e.printStackTrace(); - writer = new OutputStreamWriter(buf); + writer = new OutputStreamWriter(buf, enc); + } catch (UnsupportedEncodingException e1) { + // shouldn't happen. } - + for (int i = 0; i < path.length(); i++) { int c = (int) path.charAt(i); - if (safeCharacters.get(c)) { + if (c < 128 && safeChars.get(c) || allowSlash && c == '/') { rewrittenPath.append((char)c); } else { // convert to external encoding before hex conversion try { writer.write((char)c); + if (c >= 0xD800 && c <= 0xDBFF) { + if ( (i+1) < path.length()) { + int d = path.charAt(i+1); + if (d >= 0xDC00 && d <= 0xDFFF) { + writer.write((char) d); + i++; + } + } + } writer.flush(); } catch(IOException e) { buf.reset(); @@ -98,4 +127,101 @@ } return rewrittenPath.toString(); } + + /** + * Decode and return the specified URL-encoded String. + * + * @param str The url-encoded string + * @param enc The encoding to use; if null, the default encoding is used + * @exception IllegalArgumentException if a '%' character is not followed + * by a valid 2-digit hexadecimal number + */ + public static String URLDecode(String str, String enc) { + + if (str == null) + return (null); + + // use the specified encoding to extract bytes out of the + // given string so that the encoding is not lost. If an + // encoding is not specified, let it use platform default + byte[] bytes = null; + try { + if (enc == null) { + bytes = str.getBytes(); + } else { + bytes = str.getBytes(enc); + } + } catch (UnsupportedEncodingException uee) {} + + return URLDecode(bytes, enc); + + } + + + /** + * Decode and return the specified URL-encoded String. + * When the byte array is converted to a string, the system default + * character encoding is used... This may be different than some other + * servers. + * + * @param str The url-encoded string + * + * @exception IllegalArgumentException if a '%' character is not followed + * by a valid 2-digit hexadecimal number + */ + public static String URLDecode(String str) { + + return URLDecode(str, null); + + } + + /** + * Decode and return the specified URL-encoded byte array. + * + * @param bytes The url-encoded byte array + * @param enc The encoding to use; if null, the default encoding is used + * @exception IllegalArgumentException if a '%' character is not followed + * by a valid 2-digit hexadecimal number + */ + private static String URLDecode(byte[] bytes, String enc) { + + if (bytes == null) + return (null); + + int len = bytes.length; + int ix = 0; + int ox = 0; + while (ix < len) { + byte b = bytes[ix++]; // Get byte to test + if (b == '+') { + b = (byte)' '; + } else if (b == '%') { + b = (byte) ((convertHexDigit(bytes[ix++]) << 4) + + convertHexDigit(bytes[ix++])); + } + bytes[ox++] = b; + } + if (enc != null) { + try { + return new String(bytes, 0, ox, enc); + } catch (Exception e) { + e.printStackTrace(); + } + } + return new String(bytes, 0, ox); + + } + + /** + * Convert a byte character value to hexidecimal digit value. + * + * @param b the character value byte + */ + private static byte convertHexDigit( byte b ) { + if ((b >= '0') && (b <= '9')) return (byte)(b - '0'); + if ((b >= 'a') && (b <= 'f')) return (byte)(b - 'a' + 10); + if ((b >= 'A') && (b <= 'F')) return (byte)(b - 'A' + 10); + return 0; + } + } Copied: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/UrlUtils.java (from r907366, tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/UrlUtils.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/UrlUtils.java?p2=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/UrlUtils.java&p1=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/UrlUtils.java&r1=907366&r2=915902&rev=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/UrlUtils.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/util/UrlUtils.java Wed Feb 24 18:03:00 2010 @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.tomcat.servlets.util; +package org.apache.tomcat.lite.util; public class UrlUtils { Modified: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/file/DefaultServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/file/DefaultServlet.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/file/DefaultServlet.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/file/DefaultServlet.java Wed Feb 24 18:03:00 2010 @@ -41,8 +41,11 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.tomcat.servlets.util.Range; -import org.apache.tomcat.servlets.util.URLEncoder; + +import org.apache.tomcat.lite.util.CopyUtils; +import org.apache.tomcat.lite.util.Dir2Html; +import org.apache.tomcat.lite.util.Range; +import org.apache.tomcat.lite.util.URLEncoder; /** * The default resource-serving servlet for most web applications, @@ -124,8 +127,6 @@ // --------------------------------------------------------- Public Methods - protected Filesystem fs; - /** * Finalize this servlet. */ @@ -136,10 +137,6 @@ * Initialize this servlet. */ public void init() throws ServletException { - if (fs == null) { - // R/O - no write - fs = new Filesystem(); - } String realPath = getServletContext().getRealPath("/"); basePath = new File(realPath); @@ -148,7 +145,7 @@ } catch (IOException e) { basePathName = basePath.getAbsolutePath(); } - log("Init fs " + fs + " base: " + basePathName); + log("Init default serviet, base: " + basePathName); // Set our properties from the initialization parameters String value = null; @@ -183,14 +180,6 @@ output = 256; } - public void setFilesystem(Filesystem fs) { - this.fs = fs; - } - - public Filesystem getFilesystem() { - return fs; - } - public void setBasePath(String s) { this.basePathName = s; this.basePath = new File(s); @@ -391,6 +380,64 @@ // } } + public void renderDir(HttpServletRequest request, + HttpServletResponse response, + File resFile, + String fileEncoding, + boolean content, + String relativePath) throws IOException { + + String contentType = "text/html;charset=" + fileEncoding; + + ServletOutputStream ostream = null; + PrintWriter writer = null; + + if (content) { + // Trying to retrieve the servlet output stream + try { + ostream = response.getOutputStream(); + } catch (IllegalStateException e) { + // If it fails, we try to get a Writer instead if we're + // trying to serve a text file + if ( (contentType == null) + || (contentType.startsWith("text")) ) { + writer = response.getWriter(); + } else { + throw e; + } + } + + } + + // Set the appropriate output headers + response.setContentType(contentType); + + InputStream renderResult = null; + + if (content) { + // Serve the directory browser + renderResult = + dir2Html.render(request.getContextPath(), resFile, relativePath); + } + + + // Copy the input stream to our output stream (if requested) + if (content) { + try { + response.setBufferSize(output); + } catch (IllegalStateException e) { + // Silent catch + } + if (ostream != null) { + CopyUtils.copy(renderResult, ostream); + } else { + CopyUtils.copy(renderResult, writer, fileEncoding); + } + } + + + } + /** * Serve the specified resource, optionally including the data content. @@ -430,7 +477,7 @@ request.getRequestURI()); return; } - dir2Html.renderDir(request, response, resFile, fileEncoding, content, + renderDir(request, response, resFile, fileEncoding, content, path); return; Modified: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/file/WebdavServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/file/WebdavServlet.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/file/WebdavServlet.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/file/WebdavServlet.java Wed Feb 24 18:03:00 2010 @@ -18,6 +18,9 @@ import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -37,10 +40,13 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import org.apache.tomcat.servlets.util.FastHttpDateFormat; -import org.apache.tomcat.servlets.util.Range; +import org.apache.tomcat.lite.util.CopyUtils; +import org.apache.tomcat.lite.util.FastHttpDateFormat; +import org.apache.tomcat.lite.util.Range; +import org.apache.tomcat.lite.util.URLEncoder; +import org.apache.tomcat.lite.util.UrlUtils; +import org.apache.tomcat.lite.util.XMLWriter; import org.apache.tomcat.servlets.util.RequestUtil; -import org.apache.tomcat.servlets.util.UrlUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -420,7 +426,7 @@ * @param path Path which has to be rewiten */ protected String rewriteUrl(String path) { - return urlEncoder.encode( path ); + return urlEncoder.encodeURL( path ); } @@ -841,7 +847,7 @@ try { // will override - OutputStream fos = getFilesystem().getOutputStream(resFile.getPath()); + OutputStream fos = getOut(resFile.getPath()); CopyUtils.copy(resourceInputStream, fos); } catch(IOException e) { result = false; @@ -866,6 +872,7 @@ * Handle a partial PUT. New content specified in request is appended to * existing content in oldRevisionContent (if present). This code does * not support simultaneous partial updates to the same resource. + * @throws FileNotFoundException */ // protected File executePartialPut(HttpServletRequest req, Range range, // String path) @@ -929,6 +936,10 @@ // } + private OutputStream getOut(String path) throws FileNotFoundException { + return new FileOutputStream(path); + } + /** * COPY Method. */ @@ -1044,7 +1055,7 @@ } // Remove url encoding from destination - destinationPath = RequestUtil.URLDecode(destinationPath, "UTF8"); + destinationPath = URLEncoder.URLDecode(destinationPath, "UTF8"); destinationPath = removeDestinationPrefix(req, destinationPath); @@ -1222,8 +1233,8 @@ } else { try { - CopyUtils.copy(getFilesystem().getInputStream(object.getPath()), - getFilesystem().getOutputStream(dest)); + CopyUtils.copy(new FileInputStream(object.getPath()), + getOut(dest)); } catch(IOException ex ) { errorList.put (source, Modified: tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/RequestUtil.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/RequestUtil.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/RequestUtil.java (original) +++ tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/servlets/util/RequestUtil.java Wed Feb 24 18:03:00 2010 @@ -304,102 +304,22 @@ } - /** - * Decode and return the specified URL-encoded String. - * When the byte array is converted to a string, the system default - * character encoding is used... This may be different than some other - * servers. - * - * @param str The url-encoded string - * - * @exception IllegalArgumentException if a '%' character is not followed - * by a valid 2-digit hexadecimal number - */ - public static String URLDecode(String str) { - - return URLDecode(str, null); - } - - - /** - * Decode and return the specified URL-encoded String. - * - * @param str The url-encoded string - * @param enc The encoding to use; if null, the default encoding is used - * @exception IllegalArgumentException if a '%' character is not followed - * by a valid 2-digit hexadecimal number - */ - public static String URLDecode(String str, String enc) { - - if (str == null) - return (null); - - // use the specified encoding to extract bytes out of the - // given string so that the encoding is not lost. If an - // encoding is not specified, let it use platform default - byte[] bytes = null; - try { - if (enc == null) { - bytes = str.getBytes(); - } else { - bytes = str.getBytes(enc); - } - } catch (UnsupportedEncodingException uee) {} - - return URLDecode(bytes, enc); - - } - - - /** - * Decode and return the specified URL-encoded byte array. - * - * @param bytes The url-encoded byte array - * @exception IllegalArgumentException if a '%' character is not followed - * by a valid 2-digit hexadecimal number - */ - public static String URLDecode(byte[] bytes) { - return URLDecode(bytes, null); - } + /** * Decode and return the specified URL-encoded byte array. * * @param bytes The url-encoded byte array - * @param enc The encoding to use; if null, the default encoding is used * @exception IllegalArgumentException if a '%' character is not followed * by a valid 2-digit hexadecimal number */ - public static String URLDecode(byte[] bytes, String enc) { +// public static String URLDecode(byte[] bytes) { +// return URLDecode(bytes, null); +// } - if (bytes == null) - return (null); - int len = bytes.length; - int ix = 0; - int ox = 0; - while (ix < len) { - byte b = bytes[ix++]; // Get byte to test - if (b == '+') { - b = (byte)' '; - } else if (b == '%') { - b = (byte) ((convertHexDigit(bytes[ix++]) << 4) - + convertHexDigit(bytes[ix++])); - } - bytes[ox++] = b; - } - if (enc != null) { - try { - return new String(bytes, 0, ox, enc); - } catch (Exception e) { - e.printStackTrace(); - } - } - return new String(bytes, 0, ox); - - } /** Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/coyote/lite/TomcatLiteCoyoteTest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/coyote/lite/TomcatLiteCoyoteTest.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/coyote/lite/TomcatLiteCoyoteTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/coyote/lite/TomcatLiteCoyoteTest.java Wed Feb 24 18:03:00 2010 @@ -28,7 +28,6 @@ tomcat.setPort(8885); tomcat.setBaseDir("../../output/build/webapps"); - tomcat.addWebapp("/examples", "examples"); tomcat.addWebapp("/", "ROOT"); @@ -67,11 +66,11 @@ public void testSimple() throws IOException { HttpConnector clientCon = DefaultHttpConnector.get(); HttpChannel ch = clientCon.get("localhost", 8885); - ch.getRequest().setRequestURI("/examples/servlets/servlet/HelloWorldExample"); + ch.getRequest().setRequestURI("/index.html"); ch.getRequest().send(); BBuffer res = ch.readAll(null, 0); - assertTrue(res.toString().indexOf("<title>Hello World!</title>") >= 0); + assertTrue(res.toString(), res.toString().indexOf("<title>Apache Tomcat</title>") >= 0); } Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TestMain.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TestMain.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TestMain.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TestMain.java Wed Feb 24 18:03:00 2010 @@ -7,9 +7,9 @@ import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; +import java.util.logging.Level; +import java.util.logging.Logger; -import org.apache.tomcat.integration.jmx.JMXProxyServlet; -import org.apache.tomcat.integration.jmx.JmxObjectManagerSpi; import org.apache.tomcat.integration.jmx.UJmxHandler; import org.apache.tomcat.integration.jmx.UJmxObjectManagerSpi; import org.apache.tomcat.integration.simple.Main; @@ -29,13 +29,12 @@ import org.apache.tomcat.lite.http.services.EchoCallback; import org.apache.tomcat.lite.http.services.SleepCallback; import org.apache.tomcat.lite.io.BBuffer; +import org.apache.tomcat.lite.io.IOConnector; import org.apache.tomcat.lite.io.SocketConnector; import org.apache.tomcat.lite.io.SslConnector; import org.apache.tomcat.lite.proxy.HttpProxyService; import org.apache.tomcat.lite.proxy.StaticContentService; import org.apache.tomcat.lite.service.IOStatus; -import org.apache.tomcat.lite.servlet.ServletConfigImpl; -import org.apache.tomcat.util.buf.ByteChunk; /** * Server with lost of test servlets. @@ -54,15 +53,20 @@ private SimpleObjectManager om; + private boolean init = false; + private SocketConnector serverCon = new SocketConnector(); private HttpConnector testClient = DefaultHttpConnector.get(); private HttpConnector testServer = new HttpConnector(serverCon); private HttpConnector testProxy = new HttpConnector(serverCon); - + private HttpConnector sslServer; + private HttpProxyService proxy; UJmxObjectManagerSpi jmx = new UJmxObjectManagerSpi(); + + private IOConnector sslCon; public static TestMain shared() { if (defaultServer == null) { @@ -118,8 +122,6 @@ }); d.addWrapper(mCtx, "/ujmx", new UJmxHandler(jmx)); - d.addWrapper(mCtx, "/jmx", - new ServletConfigImpl(new JMXProxyServlet())); } public void run() { @@ -142,10 +144,11 @@ return 8443; } - protected void startAll(int basePort) throws IOException { + protected synchronized void startAll(int basePort) throws IOException { int port = basePort + 903; - if (proxy == null) { - + if (!init) { + init = true; + proxy = new HttpProxyService() .withHttpClient(testClient); testProxy.setPort(port); @@ -169,18 +172,21 @@ e.printStackTrace(); } - SslConnector sslCon = new SslConnector() + sslCon = new SslConnector() .setKeysResource("org/apache/tomcat/lite/http/test.keystore", "changeit"); - HttpConnector sslServer = new HttpConnector(sslCon); + sslServer = new HttpConnector(sslCon); initTestCallback(sslServer.getDispatcher()); sslServer.setPort(basePort + 443); sslServer.start(); + +// System.setProperty("javax.net.debug", "ssl"); -// testProxy.setDebugHttp(true); -// testProxy.setDebug(true); -// testClient.setDebug(true); -// testClient.setDebugHttp(true); +// Logger.getLogger("SSL").setLevel(Level.FINEST); +// testProxy.setDebugHttp(true); +// testProxy.setDebug(true); +// testClient.setDebug(true); +// testClient.setDebugHttp(true); // testServer.setDebugHttp(true); // testServer.setDebug(true); // sslServer.setDebug(true); @@ -204,9 +210,17 @@ public void bindConnector(HttpConnector con, final String base) { om.bind("HttpConnector-" + base, con); om.bind("HttpConnectionPool-" + base, con.cpool); - SocketConnector sc = (SocketConnector) con.getIOConnector(); - om.bind("NioThread-" + base, sc.getSelector()); - + IOConnector io = con.getIOConnector(); + int ioLevel = 0; + while (io != null) { + om.bind("IOConnector-" + (ioLevel++) + "-" + base, io); + if (io instanceof SocketConnector) { + om.bind("NioThread-" + base, + ((SocketConnector) io).getSelector()); + + } + io = io.getNet(); + } con.cpool.setEvents(new HttpConnectionPool.HttpConnectionPoolEvents() { @Override @@ -251,13 +265,12 @@ if (om == null) { om = new SimpleObjectManager(); } - // All objects visible in JMX via util.registry - // ( optional dependency ) - om.register(new JmxObjectManagerSpi()); om.register(jmx); - + // Additional settings, via spring-like config file om.loadResource(cfgFile); + + // initialization - using runnables String run = (String) om.getProperty("RUN"); String[] runNames = run == null ? new String[] {} : run.split(","); for (String name: runNames) { @@ -271,6 +284,7 @@ bindConnector(testServer, "TestServer"); bindConnector(testClient, "Client"); bindConnector(testProxy, "Proxy"); + bindConnector(sslServer, "Https"); } @@ -291,14 +305,14 @@ return out; } - public static ByteChunk getUrl(String path) throws IOException { - ByteChunk out = new ByteChunk(); + public static BBuffer getUrl(String path) throws IOException { + BBuffer out = BBuffer.allocate(); getUrl(path, out); return out; } public static HttpURLConnection getUrl(String path, - ByteChunk out) throws IOException { + BBuffer out) throws IOException { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/HttpsTest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/HttpsTest.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/HttpsTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/HttpsTest.java Wed Feb 24 18:03:00 2010 @@ -17,33 +17,24 @@ package org.apache.tomcat.lite.http; -import java.util.logging.Level; -import java.util.logging.Logger; - import junit.framework.TestCase; -import org.apache.commons.codec.binary.Base64; import org.apache.tomcat.lite.TestMain; import org.apache.tomcat.lite.io.BBuffer; import org.apache.tomcat.lite.io.SslConnector; -import org.apache.tomcat.util.buf.ByteChunk; +import org.apache.tomcat.lite.util.Base64; public class HttpsTest extends TestCase { static int port = 8443; final HttpConnector httpClient = TestMain.shared().getClient(); - public void setUp() { - Logger.getLogger("SSL").setLevel(Level.FINEST); - } - public void testSimpleClient() throws Exception { checkResponse(httpClient); } - public void testSimpleServer() throws Exception { - ByteChunk res = TestMain.getUrl("https://localhost:8443/hello"); + BBuffer res = TestMain.getUrl("https://localhost:8443/hello"); assertTrue(res.toString().indexOf("Hello") >= 0); } @@ -52,7 +43,7 @@ HttpRequest ch = httpCon.request("localhost", port).setSecure(true); ch.setRequestURI("/hello"); - ch.setProtocol("HTTP/1.0"); + ch.setProtocol("HTTP/1.0"); // to force close ch.send(); BBuffer res = ch.readAll(); @@ -60,7 +51,7 @@ } public void testSimpleClient20() throws Exception { - for (int i = 0; i < 20; i++) { + for (int i = 0; i < 10; i++) { checkResponse(httpClient); } } @@ -98,7 +89,7 @@ TestMain.shared().initTestCallback(con.getDispatcher()); con.start(); - ByteChunk res = TestMain.getUrl("https://localhost:8444" + + BBuffer res = TestMain.getUrl("https://localhost:8444" + "/hello"); assertTrue(res.toString().indexOf("Hello") >= 0); Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/LiveHttp1Test.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/LiveHttp1Test.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/LiveHttp1Test.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/LiveHttp1Test.java Wed Feb 24 18:03:00 2010 @@ -39,7 +39,8 @@ // DefaultHttpConnector.get().setDebugHttp(true); TestMain.getTestServer(); - httpClient = DefaultHttpConnector.get().request("localhost", clientPort); + httpClient = DefaultHttpConnector.get().request("localhost", + clientPort); bodyRecvBuffer.recycle(); } Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/SpdyTest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/SpdyTest.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/SpdyTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/http/SpdyTest.java Wed Feb 24 18:03:00 2010 @@ -5,17 +5,24 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; +import java.util.logging.Level; +import java.util.logging.Logger; import junit.framework.TestCase; import org.apache.tomcat.lite.TestMain; import org.apache.tomcat.lite.http.HttpConnectionPool.RemoteServer; import org.apache.tomcat.lite.io.IOBuffer; +import org.apache.tomcat.lite.io.SocketConnector; public class SpdyTest extends TestCase { HttpConnector http11Con = TestMain.shared().getClient(); - static HttpConnector spdyCon = DefaultHttpConnector.get(); + static HttpConnector spdyCon = + new HttpConnector(new SocketConnector()); + + static HttpConnector spdyConSsl = + new HttpConnector(new SocketConnector()); HttpConnector memSpdyCon = new HttpConnector(null); @@ -23,6 +30,30 @@ HttpRequest req = spdyCon.request("http://localhost:8802/echo/test1"); + // Force SPDY - no negotiation + req.setProtocol("SPDY/1.0"); + + HttpResponse res = req.waitResponse(); + + assertEquals(200, res.getStatus()); + //assertEquals("", res.getHeader("")); + + BufferedReader reader = res.getReader(); + String line1 = reader.readLine(); + //assertEquals("", line1); + } + + public void testSslClient() throws IOException { + + HttpRequest req = + spdyConSsl.request("http://localhost:8443/echo/test1"); + // Enable SSL for the connection. + // TODO: this must be done on the first request, all will be + // encrypted. + req.setSecure(true); + // Force SPDY - no negotiation + req.setProtocol("SPDY/1.0"); + HttpResponse res = req.waitResponse(); assertEquals(200, res.getStatus()); @@ -32,11 +63,12 @@ String line1 = reader.readLine(); //assertEquals("", line1); } + // Initial frame generated by Chrome public void testParse() throws IOException { InputStream is = - getClass().getClassLoader().getResourceAsStream("org/apache/tomcat/lite/http/spdyreq0"); + getClass().getClassLoader().getResourceAsStream("org/apache/tomcat/lite/http/spdyreq0.bin"); IOBuffer iob = new IOBuffer(); iob.append(is); @@ -65,7 +97,7 @@ // Initial frame generated by Chrome public void testParseCompressed() throws IOException { InputStream is = - getClass().getClassLoader().getResourceAsStream("org/apache/tomcat/lite/http/spdyreqCompressed"); + getClass().getClassLoader().getResourceAsStream("org/apache/tomcat/lite/http/spdyreqCompressed.bin"); IOBuffer iob = new IOBuffer(); iob.append(is); Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/LiveHttpThreadedTest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/LiveHttpThreadedTest.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/LiveHttpThreadedTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/LiveHttpThreadedTest.java Wed Feb 24 18:03:00 2010 @@ -17,21 +17,12 @@ package org.apache.tomcat.lite.load; -import java.io.File; import java.io.IOException; -import java.lang.management.ManagementFactory; import java.net.HttpURLConnection; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.ReflectionException; - import junit.framework.TestCase; import org.apache.tomcat.lite.TestMain; @@ -39,8 +30,8 @@ import org.apache.tomcat.lite.http.HttpConnector; import org.apache.tomcat.lite.http.HttpRequest; import org.apache.tomcat.lite.http.HttpChannel.RequestCompleted; +import org.apache.tomcat.lite.io.BBuffer; import org.apache.tomcat.lite.io.SocketConnector; -import org.apache.tomcat.util.buf.ByteChunk; /* Notes on memory use ( from heap dumps ): @@ -81,11 +72,9 @@ new HttpConnector(new SocketConnector()); ThreadRunner tr; - static MBeanServer server; - static boolean dumpHeap = false; + static boolean dumpHeap = true; AtomicInteger ok = new AtomicInteger(); - Object lock = new Object(); int reqCnt; Map<HttpRequest, HttpRequest> active = new HashMap(); @@ -95,63 +84,69 @@ } public void test1000Async() throws Exception { - try { - asyncRequest(10, 100, false, clientCon); - } finally { - dumpHeap("heapAsync.bin"); - } +// try { + asyncRequest(10, 100, false, false, clientCon, "AsyncHttp"); +// } finally { +// dumpHeap("heapAsync.bin"); +// } } public void test10000Async() throws Exception { - try { - asyncRequest(20, 500, false, clientCon); - } finally { - dumpHeap("heapAsyncBig.bin"); - } + asyncRequest(20, 500, false, false, clientCon, "AsyncHttp"); } - public void test1000AsyncSpdy() throws Exception { - try { - asyncRequest(10, 100, true, spdyClient); - } finally { - dumpHeap("heapSpdy1000.bin"); - } + public void test1000AsyncSsl() throws Exception { + asyncRequest(20, 50, false, true, clientCon, "AsyncHttpSsl"); + } + + public void test10000AsyncSsl() throws Exception { + asyncRequest(20, 500, false, true, clientCon, "AsyncHttpSsl"); + } + + public void test1000AsyncSpdy() throws Exception { + asyncRequest(10, 100, true, false, spdyClient, "AsyncSpdy"); } public void test10000AsyncSpdy() throws Exception { - try { - asyncRequest(20, 500, true, spdyClient); - } finally { - dumpHeap("heapSpdy10000.bin"); - } + asyncRequest(20, 500, true, false, spdyClient, "AsyncSpdy"); } public void test1000AsyncSpdyComp() throws Exception { - try { - asyncRequest(10, 100, true, spdyClientCompress); - } finally { - dumpHeap("heapSpdy1000Comp.bin"); - } - + asyncRequest(10, 100, true, false, spdyClientCompress, "AsyncSpdyComp"); } public void test10000AsyncSpdyComp() throws Exception { - try { - asyncRequest(20, 500, true, spdyClientCompress); - } finally { - dumpHeap("heapSpdy10000.bin"); - } + asyncRequest(20, 500, true, false, spdyClientCompress, "AsyncSpdyComp"); } - public void asyncRequest(int thr, int perthr, - final boolean spdy, final HttpConnector clientCon) throws Exception { + public void test1000AsyncSpdySsl() throws Exception { + asyncRequest(10, 100, true, true, spdyClient, "AsyncSpdySsl"); + } + + public void test1000AsyncSpdyCompSsl() throws Exception { + asyncRequest(10, 100, true, true, spdyClientCompress, "AsyncSpdyCompSsl"); + } + + public void test10000AsyncSpdyCompSsl() throws Exception { + asyncRequest(20, 500, true, true, spdyClientCompress, "AsyncSpdyCompSsl"); + } + + Object thrlock = new Object(); + Object lock = new Object(); + + public void asyncRequest(final int thr, int perthr, + final boolean spdy, final boolean ssl, + final HttpConnector clientCon, String test) throws Exception { + clientCon.getConnectionPool().clear(); reqCnt = thr * perthr; long t0 = System.currentTimeMillis(); + tr = new ThreadRunner(thr, perthr) { public void makeRequest(int i) throws Exception { - HttpRequest cstate = clientCon.request("localhost", 8802); + HttpRequest cstate = clientCon.request("localhost", + ssl ? 8443 : 8802); synchronized (active) { active.put(cstate, cstate); } @@ -160,39 +155,96 @@ // a negotiation. cstate.setProtocol("SPDY/1.0"); } + if (ssl) { + cstate.setSecure(true); + } cstate.requestURI().set("/hello"); cstate.setCompletedCallback(reqCallback); // no body cstate.getBody().close(); - // Send the request, wait response - Thread.currentThread().sleep(20); + cstate.send(); + + while (active.size() >= thr) { + synchronized(thrlock) { + thrlock.wait(); + } + } } }; tr.run(); - assertEquals(0, tr.errors.get()); synchronized (lock) { if (ok.get() < reqCnt) { lock.wait(reqCnt * 100); } } + long time = (System.currentTimeMillis() - t0); + + System.err.println("====== " + test + + " threads: " + thr + ", req: " + + reqCnt + ", sendTime" + tr.time + + ", time: " + time + + ", connections: " + clientCon.getConnectionPool().getSocketCount() + + ", avg: " + (time / reqCnt)); + assertEquals(reqCnt, ok.get()); - System.err.println(reqCnt + " Async requests: " + (System.currentTimeMillis() - t0)); + assertEquals(0, tr.errors.get()); } + + RequestCompleted reqCallback = new RequestCompleted() { + @Override + public void handle(HttpChannel data, Object extraData) + throws IOException { + String out = data.getIn().copyAll(null).toString(); + if (200 != data.getResponse().getStatus()) { + System.err.println("Wrong status"); + tr.errors.incrementAndGet(); + } else if (!"Hello world".equals(out)) { + tr.errors.incrementAndGet(); + System.err.println("bad result " + out); + } + synchronized (active) { + active.remove(data.getRequest()); + } + synchronized (thrlock) { + thrlock.notify(); + } + data.release(); + int okres = ok.incrementAndGet(); + if (okres >= reqCnt) { + synchronized (lock) { + lock.notify(); + } + } + } + }; + + public void testURLRequest1000() throws Exception { - urlRequest(10, 100); + urlRequest(10, 100, false, "HttpURLConnection"); } public void xtestURLRequest10000() throws Exception { - urlRequest(20, 500); + urlRequest(20, 500, false, "HttpURLConnection"); + + } + + // I can't seem to get 1000 requests to all complete... + public void xtestURLRequestSsl100() throws Exception { + urlRequest(10, 10, true, "HttpURLConnectionSSL"); + } + + public void xtestURLRequestSsl10000() throws Exception { + urlRequest(20, 500, true, "HttpURLConnectionSSL"); } /** * HttpURLConnection client against lite.http server. */ - public void urlRequest(int thr, int cnt) throws Exception { + public void urlRequest(int thr, int cnt, final boolean ssl, String test) + throws Exception { long t0 = System.currentTimeMillis(); @@ -203,8 +255,11 @@ public void makeRequest(int i) throws Exception { try { - ByteChunk out = new ByteChunk(); - HttpURLConnection con = TestMain.getUrl("http://localhost:8802/hello", out); + BBuffer out = BBuffer.allocate(); + String url = ssl ? "https://localhost:8443/hello" : + "http://localhost:8802/hello"; + HttpURLConnection con = + TestMain.getUrl(url, out); if (con.getResponseCode() != 200) { errors.incrementAndGet(); } @@ -220,62 +275,17 @@ }; tr.run(); assertEquals(0, tr.errors.get()); + long time = (System.currentTimeMillis() - t0); - System.err.println(thr + " threads, " + (thr * cnt) + " total blocking URL requests: " + - (System.currentTimeMillis() - t0)); - - //assertEquals(testServer., actual) + System.err.println("====== " + test + " threads: " + thr + ", req: " + + (thr * cnt) + ", time: " + time + ", avg: " + + (time / (thr * cnt))); } finally { - dumpHeap("heapURLReq.bin"); + //dumpHeap("heapURLReq.bin"); } } // TODO: move to a servlet - private void dumpHeap(String file) throws InstanceNotFoundException, - MBeanException, ReflectionException, MalformedObjectNameException { - if (!dumpHeap) { - return; - } - if (server == null) { - server = ManagementFactory.getPlatformMBeanServer(); - - } - File f1 = new java.io.File(file); - if (f1.exists()) { - f1.delete(); - } - server.invoke(new ObjectName("com.sun.management:type=HotSpotDiagnostic"), - "dumpHeap", - new Object[] {file, Boolean.FALSE /* live */}, - new String[] {String.class.getName(), "boolean"}); - } - - - RequestCompleted reqCallback = new RequestCompleted() { - @Override - public void handle(HttpChannel data, Object extraData) - throws IOException { - String out = data.getIn().copyAll(null).toString(); - if (200 != data.getResponse().getStatus()) { - System.err.println("Wrong status"); - tr.errors.incrementAndGet(); - } - if (!"Hello world".equals(out)) { - tr.errors.incrementAndGet(); - System.err.println("bad result " + out); - } - synchronized (active) { - active.remove(data.getRequest()); - } - data.release(); - int okres = ok.incrementAndGet(); - if (okres >= reqCnt) { - synchronized (lock) { - lock.notify(); - } - } - } - }; } Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/MicroTest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/MicroTest.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/MicroTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/MicroTest.java Wed Feb 24 18:03:00 2010 @@ -44,6 +44,7 @@ mappingData.recycle(); mapper.map(host, uri, mappingData); } - System.out.println("Elapsed:" + (System.currentTimeMillis() - time)); + // TODO: asserts + //System.out.println("Elapsed:" + (System.currentTimeMillis() - time)); } } Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/ThreadRunner.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/ThreadRunner.java?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/ThreadRunner.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/load/ThreadRunner.java Wed Feb 24 18:03:00 2010 @@ -45,7 +45,6 @@ } long t1 = System.currentTimeMillis(); time = t1 - t0; - System.err.println("TimeNB: " + (t1 - t0) + " " + res); } public void makeRequests(int cnt) { Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/test.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/test.properties?rev=915902&r1=915901&r2=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/test.properties (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/test.properties Wed Feb 24 18:03:00 2010 @@ -1,4 +1,7 @@ -RUN=Log,Socks,TomcatLite +RUN=JMX,Log,Socks,TomcatLite,JMXHandler + +JMX.(class)=org.apache.tomcat.integration.jmx.JmxObjectManagerSpi +JMXHandler.(class)=org.apache.tomcat.integration.jmx.JmxHandler Log.(class)=org.apache.tomcat.lite.service.LogConfig Log.debug=org.apache.tomcat.lite.http.HttpConnector Copied: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/util/UEncoderTest.java (from r907366, tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/util/buf/UEncoderTest.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/util/UEncoderTest.java?p2=tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/util/UEncoderTest.java&p1=tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/util/buf/UEncoderTest.java&r1=907366&r2=915902&rev=915902&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/util/buf/UEncoderTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/util/UEncoderTest.java Wed Feb 24 18:03:00 2010 @@ -15,12 +15,12 @@ * limitations under the License. */ -package org.apache.tomcat.util.buf; +package org.apache.tomcat.lite.util; import junit.framework.TestCase; public class UEncoderTest extends TestCase { - UEncoder enc=new UEncoder(); + URLEncoder enc=new URLEncoder(); /* * @@ -33,7 +33,7 @@ assertEquals("test", eurl1); eurl1=enc.encodeURL("/test"); - assertEquals("%2ftest", eurl1); + assertEquals("/test", eurl1); // safe ranges eurl1=enc.encodeURL("test$-_."); @@ -43,7 +43,7 @@ assertEquals("test$-_.!*'(),", eurl1); eurl1=enc.encodeURL("//test"); - assertEquals("%2f%2ftest", eurl1); + assertEquals("//test", eurl1); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org