Author: costin Date: Thu Jun 25 15:16:44 2009 New Revision: 788385 URL: http://svn.apache.org/viewvc?rev=788385&view=rev Log: Adjusting the tests
Added: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/HexDump.java (with props) Removed: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TomcatLiteNoConnectorTest.java Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteTestHelper.java tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteWatchdogServletTests.java tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/PropertiesSpiTest.java tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TomcatLiteSimpleTest.java tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/GTest.java tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogHttpClient.java Added: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/HexDump.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/HexDump.java?rev=788385&view=auto ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/HexDump.java (added) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/HexDump.java Thu Jun 25 15:16:44 2009 @@ -0,0 +1,252 @@ +/* + * 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.tomcat.lite; + +import java.io.ByteArrayOutputStream; + +import org.apache.tomcat.util.res.StringManager; + +/** + * Tables useful when converting byte arrays to and from strings of hexadecimal + * digits. + * Code from Ajp11, from Apache's JServ. + * + * @author Craig R. McClanahan + */ + +public final class HexDump { + + + // -------------------------------------------------------------- Constants + static StringManager sm; + + /** + * Table for HEX to DEC byte translation. + */ + public static final int[] DEC = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 00, 01, 02, 03, 04, 05, 06, 07, 8, 9, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + }; + + + /** + * Table for DEC to HEX byte translation. + */ + public static final byte[] HEX = + { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', + (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', + (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }; + + + // --------------------------------------------------------- Static Methods + + + /** + * Convert a String of hexadecimal digits into the corresponding + * byte array by encoding each two hexadecimal digits as a byte. + * + * @param digits Hexadecimal digits representation + * + * @exception IllegalArgumentException if an invalid hexadecimal digit + * is found, or the input string contains an odd number of hexadecimal + * digits + */ + public static byte[] convert(String digits) { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + for (int i = 0; i < digits.length(); i += 2) { + char c1 = digits.charAt(i); + if ((i+1) >= digits.length()) + throw new IllegalArgumentException + (sm.getString("hexUtil.odd")); + char c2 = digits.charAt(i + 1); + byte b = 0; + if ((c1 >= '0') && (c1 <= '9')) + b += ((c1 - '0') * 16); + else if ((c1 >= 'a') && (c1 <= 'f')) + b += ((c1 - 'a' + 10) * 16); + else if ((c1 >= 'A') && (c1 <= 'F')) + b += ((c1 - 'A' + 10) * 16); + else + throw new IllegalArgumentException + (sm.getString("hexUtil.bad")); + if ((c2 >= '0') && (c2 <= '9')) + b += (c2 - '0'); + else if ((c2 >= 'a') && (c2 <= 'f')) + b += (c2 - 'a' + 10); + else if ((c2 >= 'A') && (c2 <= 'F')) + b += (c2 - 'A' + 10); + else + throw new IllegalArgumentException + (sm.getString("hexUtil.bad")); + baos.write(b); + } + return (baos.toByteArray()); + + } + + + /** + * Convert a byte array into a printable format containing a + * String of hexadecimal digit characters (two per byte). + * + * @param bytes Byte array representation + */ + public static String convert(byte bytes[]) { + + StringBuffer sb = new StringBuffer(bytes.length * 2); + for (int i = 0; i < bytes.length; i++) { + sb.append(convertDigit((bytes[i] >> 4))); + sb.append(convertDigit((bytes[i] & 0x0f))); + } + return (sb.toString()); + + } + + + /** + * Convert 4 hex digits to an int, and return the number of converted + * bytes. + * + * @param hex Byte array containing exactly four hexadecimal digits + * + * @exception IllegalArgumentException if an invalid hexadecimal digit + * is included + */ + public static int convert2Int( byte[] hex ) { + // Code from Ajp11, from Apache's JServ + + // assert b.length==4 + // assert valid data + int len; + if(hex.length < 4 ) return 0; + if( DEC[hex[0]]<0 ) + throw new IllegalArgumentException(sm.getString("hexUtil.bad")); + len = DEC[hex[0]]; + len = len << 4; + if( DEC[hex[1]]<0 ) + throw new IllegalArgumentException(sm.getString("hexUtil.bad")); + len += DEC[hex[1]]; + len = len << 4; + if( DEC[hex[2]]<0 ) + throw new IllegalArgumentException(sm.getString("hexUtil.bad")); + len += DEC[hex[2]]; + len = len << 4; + if( DEC[hex[3]]<0 ) + throw new IllegalArgumentException(sm.getString("hexUtil.bad")); + len += DEC[hex[3]]; + return len; + } + + + + /** + * Provide a mechanism for ensuring this class is loaded. + */ + public static void load() { + // Nothing to do + } + + /** + * [Private] Convert the specified value (0 .. 15) to the corresponding + * hexadecimal digit. + * + * @param value Value to be converted + */ + private static char convertDigit(int value) { + + value &= 0x0f; + if (value >= 10) + return ((char) (value - 10 + 'a')); + else + return ((char) (value + '0')); + + } + + /** + * <code>getHexValue</code> displays a formatted hex + * representation of the passed byte array. It also + * allows for only a specified offset and length of + * a particular array to be returned. + * + * @param bytes <code>byte[]</code> array to process. + * @param pos offset to begin processing. + * @param len number of bytes to process. + * @return <code>String</code> formatted hex representation of processed + * array. + */ + public static String getHexDump(byte[] bytes, int pos, int len, + boolean displayOffset) { + StringBuffer out = new StringBuffer( len * 2 ); + + for (int j = 0; j < len; j += 16) { + hexLine(out, bytes, pos + j, pos + len, displayOffset); + } + + return out.toString(); + } + + private static void hexLine(StringBuffer out, + byte[] bytes, int start, int end, + boolean displayOffset) { + + if ( displayOffset ) { + out.append(convertDigit((int) (start >> 12))); + out.append(convertDigit((int) (start >> 8))); + out.append(convertDigit((int) (start >> 4))); + out.append(convertDigit(start & 0x0F)); + out.append(": "); + } + for (int i = start; i < start + 16; i++) { + + if (i < end) { + out.append(convertDigit((int) (bytes[i] >> 4))); + out.append(convertDigit(bytes[i] & 0x0F)); + out.append(" "); + } else { + out.append(" "); + } + } + + out.append(" | "); + + for (int i = start; i < start + 16 && i < end; i++) { + if( ! Character.isISOControl( (char)bytes[i] )) { + out.append( new Character((char)bytes[i]) ); + } else { + out.append( "." ); + } + } + + out.append("\n"); + } +} Propchange: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/HexDump.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteTestHelper.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteTestHelper.java?rev=788385&r1=788384&r2=788385&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteTestHelper.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteTestHelper.java Thu Jun 25 15:16:44 2009 @@ -15,26 +15,29 @@ import org.apache.coyote.OutputBuffer; import org.apache.coyote.Response; -import org.apache.tomcat.lite.coyote.CoyoteHttp; +import org.apache.tomcat.lite.coyote.CoyoteConnector; import org.apache.tomcat.util.buf.ByteChunk; public class LiteTestHelper { - public static void initServletsAndRun(TomcatLite lite, int port) throws ServletException, IOException { + public static void addContext(TomcatLite lite) throws ServletException { ServletContextImpl ctx = - (ServletContextImpl) lite.addServletContext(null, null, "/test1"); - - ctx.addServlet("test", new SimpleServlet()); - ctx.addMapping("/1stTest", "test"); - - ctx.addServlet("testException", new HttpServlet() { - public void doGet(HttpServletRequest req, HttpServletResponse res) - throws IOException { - throw new NullPointerException(); - } - }); - ctx.addMapping("/testException", "testException"); - + (ServletContextImpl) lite.addServletContext(null, null, "/test1"); + + ctx.addServlet("test", new SimpleServlet()); + ctx.addMapping("/1stTest", "test"); + + ctx.addServlet("testException", new HttpServlet() { + public void doGet(HttpServletRequest req, HttpServletResponse res) + throws IOException { + throw new NullPointerException(); + } + }); + ctx.addMapping("/testException", "testException"); + } + + public static void initServletsAndRun(TomcatLite lite, int port) throws ServletException, IOException { + addContext(lite); lite.init(); lite.start(); @@ -54,9 +57,9 @@ public static void addConnector(TomcatLite lite, int port, boolean daemon) { - CoyoteHttp coyoteAdapter = (CoyoteHttp) lite.getConnector(); - coyoteAdapter.getConnectors().setPort(port); - coyoteAdapter.getConnectors().setDaemon(daemon); + CoyoteConnector coyoteAdapter = (CoyoteConnector) lite.getConnector(); + coyoteAdapter.setPort(port); + coyoteAdapter.setDaemon(daemon); } /** @@ -79,29 +82,7 @@ } return out; } - - /** - * Create a ServletRequestImpl object that can be used with - * TomcatLite.service(request). - * - * All output will be added to the ByteChunk out. - * - * This requires no HTTP connector. - * - * @see TomcatLiteNoConnector - */ - public static ServletRequestImpl createMessage(TomcatLite lite, - String uri, - final ByteChunk out) { - ServletRequestImpl req = lite.createMessage(); - req.setRequestURI(uri); - ServletResponseImpl res = req.getResponse(); - res.getCoyoteResponse().setOutputBuffer( - new ByteChunkOutputBuffer(out)); - return req; - } - static class ByteChunkOutputBuffer implements OutputBuffer { protected ByteChunk output = null; Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteWatchdogServletTests.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteWatchdogServletTests.java?rev=788385&r1=788384&r2=788385&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteWatchdogServletTests.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/LiteWatchdogServletTests.java Thu Jun 25 15:16:44 2009 @@ -61,6 +61,10 @@ } } + protected void addConnector(TomcatLite liteServer) { + LiteTestHelper.addConnector(liteServer, 8080, true); + } + public void initServerWithWatchdog(String wdDir) throws ServletException, IOException { @@ -70,7 +74,7 @@ //connector.addAdapter("/", new MapperAdapter()); TomcatLite liteServer = new TomcatLite(); - LiteTestHelper.addConnector(liteServer, 8080, true); + addConnector(liteServer); liteServer.init("webapps/ROOT", "/"); for (String s : new String[] { Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/PropertiesSpiTest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/PropertiesSpiTest.java?rev=788385&r1=788384&r2=788385&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/PropertiesSpiTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/PropertiesSpiTest.java Thu Jun 25 15:16:44 2009 @@ -23,9 +23,9 @@ } public void testArgs() throws IOException { - Properties res = new Properties(); - SimpleObjectManager.processArgs(new String[] { - "-a=1", "-b", "2"}, res); + spi = new SimpleObjectManager(new String[] { + "-a=1", "-b", "2"}); + Properties res = spi.getProperties(); assertEquals("1", res.get("a")); assertEquals("2", res.get("b")); Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TomcatLiteSimpleTest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TomcatLiteSimpleTest.java?rev=788385&r1=788384&r2=788385&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TomcatLiteSimpleTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/lite/TomcatLiteSimpleTest.java Thu Jun 25 15:16:44 2009 @@ -22,14 +22,10 @@ public class TomcatLiteSimpleTest extends TestCase { - TomcatLite lite = new TomcatLite(); - - void initServer() throws Exception { - LiteTestHelper.initServletsAndRun(lite, 8804); - } + protected TomcatLite lite = new TomcatLite(); public void setUp() throws Exception { - initServer(); + LiteTestHelper.initServletsAndRun(lite, 8804); } public void tearDown() throws Exception { Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/GTest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/GTest.java?rev=788385&r1=788384&r2=788385&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/GTest.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/GTest.java Thu Jun 25 15:16:44 2009 @@ -35,7 +35,8 @@ import java.util.StringTokenizer; import java.util.Vector; -import org.apache.tomcat.util.buf.HexUtils; +import org.apache.tomcat.lite.HexDump; +import org.apache.tools.ant.BuildException; // derived from Jsp @@ -679,7 +680,9 @@ for ( int i = 0; i < eSize; i++ ) { if ( headerValues.contains( unexpectedValues.get( i ) ) ) { numberFound++; - headerValues.remove( headerValues.indexOf( headerFieldName ) ); + if (headerValues.indexOf(headerFieldName) >= 0) { + headerValues.remove( headerValues.indexOf( headerFieldName ) ); + } } } if ( numberFound == eSize ) { @@ -1044,8 +1047,8 @@ private void dumpHex( byte[] serverResponse, byte[] goldenFile ) { StringBuffer outBuf = new StringBuffer( ( serverResponse.length + goldenFile.length ) * 2 ); - String fromServerString = HexUtils.getHexDump( serverResponse, 0, serverResponse.length, true ); - String fromGoldenFileString = HexUtils.getHexDump( goldenFile, 0, goldenFile.length, true ); + String fromServerString = HexDump.getHexDump( serverResponse, 0, serverResponse.length, true ); + String fromGoldenFileString = HexDump.getHexDump( goldenFile, 0, goldenFile.length, true ); outBuf.append( " Hex dump of server response and goldenfile below.\n\n### RESPONSE FROM SERVER ###\n" ); outBuf.append( "----------------------------\n" ); Modified: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogHttpClient.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogHttpClient.java?rev=788385&r1=788384&r2=788385&view=diff ============================================================================== --- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogHttpClient.java (original) +++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogHttpClient.java Thu Jun 25 15:16:44 2009 @@ -46,7 +46,7 @@ // XXX headers are ignored Socket socket = new Socket( host, port ); - + //socket obtained, rebuild the request. rebuildRequest(client, client.request, socket); @@ -249,6 +249,8 @@ System.out.println( "Partial read: " + sb.toString() ); ex.printStackTrace(); } + input.close(); + break; } } return sb.toString(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org