You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2009/04/05 03:36:28 UTC
svn commit: r762039 [2/2] - in /tomcat/trunk/modules/tomcat-lite/test: ./
org/ org/apache/ org/apache/tomcat/ org/apache/tomcat/lite/
org/apache/tomcat/test/ org/apache/tomcat/test/watchdog/
org/apache/tomcat/util/ org/apache/tomcat/util/buf/
Added: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/RfcDateParser.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/RfcDateParser.java?rev=762039&view=auto
==============================================================================
--- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/RfcDateParser.java (added)
+++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/RfcDateParser.java Sun Apr 5 01:36:27 2009
@@ -0,0 +1,103 @@
+/*
+ * 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.test.watchdog;
+
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * A parser for date strings commonly found in http and email headers that
+ * follow various RFC conventions. Given a date-string, the parser will
+ * attempt to parse it by trying matches with a set of patterns, returning
+ * null on failure, a Date object on success.
+ *
+ * @author Ramesh.Mandava
+ */
+public class RfcDateParser {
+
+ private boolean isGMT = false;
+
+ static final String[] standardFormats = {
+ "EEEE', 'dd-MMM-yy HH:mm:ss z", // RFC 850 (obsoleted by 1036)
+ "EEEE', 'dd-MMM-yy HH:mm:ss", // ditto but no tz. Happens too often
+ "EEE', 'dd-MMM-yyyy HH:mm:ss z", // RFC 822/1123
+ "EEE', 'dd MMM yyyy HH:mm:ss z", // REMIND what rfc? Apache/1.1
+ "EEEE', 'dd MMM yyyy HH:mm:ss z", // REMIND what rfc? Apache/1.1
+ "EEE', 'dd MMM yyyy hh:mm:ss z", // REMIND what rfc? Apache/1.1
+ "EEEE', 'dd MMM yyyy hh:mm:ss z", // REMIND what rfc? Apache/1.1
+ "EEE MMM dd HH:mm:ss z yyyy", // Date's string output format
+ "EEE MMM dd HH:mm:ss yyyy", // ANSI C asctime format()
+ "EEE', 'dd-MMM-yy HH:mm:ss", // No time zone 2 digit year RFC 1123
+ "EEE', 'dd-MMM-yyyy HH:mm:ss" // No time zone RFC 822/1123
+ };
+
+ /* because there are problems with JDK1.1.6/SimpleDateFormat with
+ * recognizing GMT, we have to create this workaround with the following
+ * hardcoded strings */
+ static final String[] gmtStandardFormats = {
+ "EEEE',' dd-MMM-yy HH:mm:ss 'GMT'", // RFC 850 (obsoleted by 1036)
+ "EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'", // RFC 822/1123
+ "EEE',' dd MMM yyyy HH:mm:ss 'GMT'", // REMIND what rfc? Apache/1.1
+ "EEEE',' dd MMM yyyy HH:mm:ss 'GMT'", // REMIND what rfc? Apache/1.1
+ "EEE',' dd MMM yyyy hh:mm:ss 'GMT'", // REMIND what rfc? Apache/1.1
+ "EEEE',' dd MMM yyyy hh:mm:ss 'GMT'", // REMIND what rfc? Apache/1.1
+ "EEE MMM dd HH:mm:ss 'GMT' yyyy" // Date's string output format
+ };
+
+ String dateString;
+
+ public RfcDateParser(String dateString) {
+ this.dateString = dateString.trim();
+ if (this.dateString.indexOf("GMT") != -1) {
+ isGMT = true;
+ }
+ }
+
+ public Date getDate() {
+
+ int arrayLen = isGMT ? gmtStandardFormats.length : standardFormats.length;
+ for (int i = 0; i < arrayLen; i++) {
+ Date d = null;
+
+ if (isGMT) {
+ d = tryParsing(gmtStandardFormats[i]);
+ } else {
+ d = tryParsing(standardFormats[i]);
+ }
+ if (d != null) {
+ return d;
+ }
+
+ }
+
+ return null;
+ }
+
+ private Date tryParsing(String format) {
+
+ java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(format, Locale.US);
+ if (isGMT) {
+ df.setTimeZone(TimeZone.getTimeZone("GMT"));
+ }
+ try {
+ return df.parse(dateString);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+} /* class RfcDateParser */
Propchange: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/RfcDateParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/RfcDateParser.java
------------------------------------------------------------------------------
svn:executable = *
Added: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogClient.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogClient.java?rev=762039&view=auto
==============================================================================
--- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogClient.java (added)
+++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogClient.java Sun Apr 5 01:36:27 2009
@@ -0,0 +1,146 @@
+/*
+ * 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.test.watchdog;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import junit.framework.Test;
+import junit.framework.TestResult;
+import junit.framework.TestSuite;
+
+import org.apache.tomcat.util.DomUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+public class WatchdogClient {
+
+ protected String base = "../watchdog";
+
+ protected String goldenDir;
+ protected String testMatch;
+ protected String file;
+ protected String[] exclude = null;
+ protected String[] slow =
+ {
+ "SingleModelTest" // slow
+ };
+
+ protected String targetMatch;
+
+
+ Properties props = new Properties();
+
+ protected void beforeSuite() {
+
+ }
+
+ protected void afterSuite(TestResult res) {
+
+ }
+
+ /**
+ * Return a test suite for running a watchdog-like
+ * test file.
+ *
+ * @param base base dir for the watchdog dir
+ * @param testMatch Prefix of tests to be run
+ * @return
+ */
+ public Test getSuite() {
+ TestSuite tests = new WatchdogTests();
+ tests.setName(this.getClass().getSimpleName());
+
+ props.setProperty("port", "8080");
+ props.setProperty("host", "localhost");
+ props.setProperty("wgdir",
+ goldenDir);
+
+
+ try {
+ Document doc = DomUtil.readXml(new FileInputStream(file));
+ Element docE = doc.getDocumentElement();
+ NodeList targetsL = docE.getElementsByTagName("target");
+ for (int i = 0; i < targetsL.getLength(); i++) {
+ Element target = (Element) targetsL.item(i);
+ String targetName = target.getAttribute("name");
+ if (targetMatch != null && !targetName.equals(targetMatch)) {
+ continue;
+ }
+
+ // Tests are duplicated
+ //TestSuite targetSuite = new TestSuite(targetName);
+
+ NodeList watchDogL = target.getElementsByTagName("watchdog");
+ for (int j = 0; j < watchDogL.getLength(); j++) {
+ Element watchE = (Element) watchDogL.item(j);
+ String testName = watchE.getAttribute("testName");
+ if (testMatch != null) {
+ if (!testName.startsWith(testMatch)) {
+ continue;
+ }
+ }
+ if (exclude != null) {
+ boolean found = false;
+ for (String e: exclude) {
+ if (e.equals(testName)) {
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ continue;
+ }
+ }
+ testName = testName + ";" + this.getClass().getName();
+ WatchdogTest test = new WatchdogTest(watchE, props, testName);
+ tests.addTest(test);
+ }
+
+ // if (targetSuite.countTestCases() > 0) {
+ // tests.addTest(targetSuite);
+ // }
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ParserConfigurationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return tests;
+ }
+
+ // --------- Inner classes -------------
+
+ public class WatchdogTests extends TestSuite {
+ public void run(TestResult res) {
+ beforeSuite();
+ super.run(res);
+ afterSuite(res);
+ }
+ }
+
+}
Propchange: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogClient.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: 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=762039&view=auto
==============================================================================
--- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogHttpClient.java (added)
+++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogHttpClient.java Sun Apr 5 01:36:27 2009
@@ -0,0 +1,406 @@
+/*
+ * 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.test.watchdog;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.SocketException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Vector;
+
+
+
+public class WatchdogHttpClient {
+ private static final String CRLF = "\r\n";
+ private static final int LINE_FEED = 10;
+
+ static int debug = 0;
+
+ public static void dispatch(GTest client) throws Exception {
+ HashMap requestHeaders = client.requestHeaders;
+ String host = client.host;
+ int port = client.port;
+ String content = client.content;
+ String request = client.request;
+
+ // XXX headers are ignored
+ Socket socket = new Socket( host, port );
+
+ //socket obtained, rebuild the request.
+ rebuildRequest(client, client.request, socket);
+
+ InputStream in = new CRBufferedInputStream( socket.getInputStream() );
+
+ // Write the request
+ socket.setSoLinger( true, 1000 );
+
+ OutputStream out = new BufferedOutputStream(
+ socket.getOutputStream() );
+ StringBuffer reqbuf = new StringBuffer( 128 );
+
+ // set the Host header
+ client.setHeaderDetails( "Host:" + host + ":" + port, requestHeaders, true );
+
+ // set the Content-Length header
+ if ( content != null ) {
+ client.setHeaderDetails( "Content-Length:" + content.length(),
+ requestHeaders, true );
+ }
+
+ // set the Cookie header
+ if ( client.testSession != null ) {
+ client.cookieController = ( CookieController ) client.sessionHash.get( client.testSession );
+
+ if ( client.cookieController != null ) {
+
+ String releventCookieString = client.cookieController.applyRelevantCookies( client.requestURL );
+
+ if ( ( releventCookieString != null ) && ( !releventCookieString.trim().equals( "" ) ) ) {
+ client.setHeaderDetails( "Cookie:" + releventCookieString, requestHeaders, true );
+ }
+ }
+ }
+
+ if ( debug > 0 ) {
+ System.out.println( " REQUEST: " + request );
+ }
+ reqbuf.append( client.request ).append( CRLF );
+
+ // append all request headers
+ if ( !requestHeaders.isEmpty() ) {
+ Iterator iter = requestHeaders.keySet().iterator();
+
+ while ( iter.hasNext() ) {
+ StringBuffer tmpBuf = new StringBuffer(32);
+ String headerKey = ( String ) iter.next();
+ ArrayList values = (ArrayList) requestHeaders.get( headerKey );
+ String[] value = (String[]) values.toArray( new String[ values.size() ] );
+ tmpBuf.append( headerKey ).append(": ");
+ for ( int i = 0; i < value.length; i++ ) {
+ if ((i + 1) == value.length) {
+ tmpBuf.append( value[ i ] );
+ } else {
+ tmpBuf.append( value[ i ] ).append(", ");
+ }
+ }
+ if ( debug > 0 ) {
+ System.out.println( " REQUEST HEADER: " + tmpBuf.toString());
+ }
+ tmpBuf.append( CRLF );
+ reqbuf.append(tmpBuf.toString());
+ }
+ }
+
+ /*
+
+ if ( ( testSession != null ) && ( sessionHash.get( testSession ) != null ) ) {
+ System.out.println("Sending Session Id : " + (String)sessionHash.get( testSession ) );
+ pw.println("JSESSIONID:" + (String)sessionHash.get( testSession) );
+ }
+
+ */
+
+ if ( request.indexOf( "HTTP/1." ) > -1 ) {
+ reqbuf.append( "" ).append( CRLF );
+ }
+
+ // append request content
+ if ( content != null ) {
+ reqbuf.append( content );
+ // XXX no CRLF at the end -see HTTP specs!
+ }
+
+ byte[] reqbytes = reqbuf.toString().getBytes();
+
+ try {
+ // write the request
+ out.write( reqbytes, 0, reqbytes.length );
+ out.flush();
+ reqbuf = null;
+ } catch ( Exception ex1 ) {
+ System.out.println( " Error writing request " + ex1 );
+ if ( debug > 0 ) {
+ System.out.println( "Message: " + ex1.getMessage() );
+ ex1.printStackTrace();
+ }
+ }
+
+ // read the response
+ try {
+
+ client.responseLine = read( in );
+
+ if ( debug > 0 ) {
+ System.out.println( " RESPONSE STATUS-LINE: " + client.responseLine );
+ }
+
+ client.headers = parseHeaders( client, in );
+
+ byte[] result = readBody( in );
+
+ if ( result != null ) {
+ client.responseBody = result;
+ if ( debug > 0 ) {
+ System.out.println( " RESPONSE BODY:\n" + new String( client.responseBody ) );
+ }
+ }
+
+ } catch ( SocketException ex ) {
+ System.out.println( " Socket Exception: " + ex );
+ ex.printStackTrace();
+ } finally {
+ if ( debug > 0 ) {
+ System.out.println( " closing socket" );
+ }
+ socket.close();
+ socket = null;
+ }
+
+ }
+
+ /**
+ * <code>readBody</code> reads the body of the response
+ * from the InputStream.
+ *
+ * @param input an <code>InputStream</code>
+ * @return a <code>byte[]</code> representation of the response
+ */
+ private static byte[] readBody( InputStream input ) {
+ StringBuffer sb = new StringBuffer( 255 );
+ while ( true ) {
+ try {
+ int ch = input.read();
+
+ if ( ch < 0 ) {
+ if ( sb.length() == 0 ) {
+ return ( null );
+ } else {
+ break;
+ }
+ }
+ sb.append( ( char ) ch );
+
+ } catch ( IOException ex ) {
+ return null;
+ }
+ }
+ return sb.toString().getBytes();
+ }
+
+
+
+ /**
+ * Read a line from the specified servlet input stream, and strip off
+ * the trailing carriage return and newline (if any). Return the remaining
+ * characters that were read as a string.7
+ *
+ * @returns The line that was read, or <code>null</code> if end of file
+ * was encountered
+ *
+ * @exception IOException if an input/output error occurred
+ */
+ private static String read( InputStream input ) throws IOException {
+ // Read the next line from the input stream
+ StringBuffer sb = new StringBuffer();
+
+ while ( true ) {
+ try {
+ int ch = input.read();
+ // System.out.println("XXX " + (char)ch );
+ if ( ch < 0 ) {
+ if ( sb.length() == 0 ) {
+ if ( debug > 0 )
+ System.out.println( " Error reading line " + ch + " " + sb.toString() );
+ return "";
+ } else {
+ break;
+ }
+ } else if ( ch == LINE_FEED ) {
+ break;
+ }
+
+ sb.append( ( char ) ch );
+ } catch ( IOException ex ) {
+ System.out.println( " Error reading : " + ex );
+ debug = 1;
+
+ if ( debug > 0 ) {
+ System.out.println( "Partial read: " + sb.toString() );
+ ex.printStackTrace();
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+
+ // ==================== Code from JSERV !!! ====================
+ /**
+ * Parse the incoming HTTP request headers, and set the corresponding
+ * request properties.
+ *
+ *
+ * @exception IOException if an input/output error occurs
+ */
+ private static HashMap parseHeaders( GTest client, InputStream is ) throws IOException {
+ HashMap headers = new HashMap();
+ client.cookieVector = new Vector();
+
+ while ( true ) {
+ // Read the next header line
+ String line = read( is );
+
+ if ( ( line == null ) || ( line.length() < 1 ) ) {
+ break;
+ }
+
+ client.parseHeader( line, headers, false );
+
+ if ( debug > 0 ) {
+ System.out.println( " RESPONSE HEADER: " + line );
+ }
+
+ }
+
+ if ( client.testSession != null ) {
+ client.cookieController = ( CookieController ) client.sessionHash.get( client.testSession );
+
+ if ( client.cookieController != null ) {
+ client.cookieController.recordAnyCookies( client.cookieVector, client.requestURL );
+ }
+ }
+
+ return headers;
+ }
+
+
+
+ /**
+ * Private utility method to 'massage' a request string that
+ * may or may not have replacement markers for the request parameters.
+ *
+ * @param req the request to manipulate
+ * @param socket local socket. Used to rebuild specified query strings.
+ *
+ * @exception Exception if an error occurs
+ */
+ private static void rebuildRequest(GTest client, String req, Socket socket) throws Exception {
+ client.request = client.replaceMarkers(req, socket );
+ String addressString = client.request.substring( client.request.indexOf( "/" ), client.request.indexOf( "HTTP" ) ).trim();
+
+ if ( addressString.indexOf( "?" ) > -1 ) {
+ addressString = addressString.substring( 0, addressString.indexOf( "?" ) ) ;
+ }
+
+ client.requestURL = new URL( "http", client.host, client.port, addressString );
+ }
+
+
+
+ /**
+ * <code>CRBufferedInputStream</code> is a modified version of
+ * the java.io.BufferedInputStream class. The fill code is
+ * the same, but the read is modified in that if a carriage return
+ * is found in the response stream from the target server,
+ * it will skip that byte and return the next in the stream.
+ */
+ private static class CRBufferedInputStream extends BufferedInputStream {
+ private static final int CARRIAGE_RETURN = 13;
+
+ private static final int DEFAULT_BUFFER = 2048;
+
+ /**
+ * Creates a new <code>CRBufferedInputStream</code> instance.
+ *
+ * @param in an <code>InputStream</code> value
+ */
+ public CRBufferedInputStream( InputStream in ) {
+ super( in, DEFAULT_BUFFER );
+ }
+
+ /**
+ * <code>read</code> reads a single byte value per call.
+ * If, the byte read, is a carriage return, the next byte
+ * in the stream in returned instead.
+ *
+ * @return an <code>int</code> value
+ * @exception IOException if an error occurs
+ */
+ public int read() throws IOException {
+ if ( in == null ) {
+ throw new IOException ( "Stream closed" );
+ }
+ if ( pos >= count ) {
+ fill();
+ if ( pos >= count ) {
+ return -1;
+ }
+ }
+ int val = buf[pos++] & 0xff;
+ if ( val == CARRIAGE_RETURN ) {
+ if (pos >= count) {
+ fill();
+ if (pos >= count) {
+ return -1;
+ }
+ }
+ return buf[pos++] & 0xff;
+ }
+ return val;
+ }
+
+ /**
+ * <code>fill</code> is used to fill the internal
+ * buffer used by this BufferedInputStream class.
+ *
+ * @exception IOException if an error occurs
+ */
+ private void fill() throws IOException {
+ if (markpos < 0)
+ pos = 0; /* no mark: throw away the buffer */
+ else if (pos >= buf.length) /* no room left in buffer */
+ if (markpos > 0) { /* can throw away early part of the buffer */
+ int sz = pos - markpos;
+ System.arraycopy(buf, markpos, buf, 0, sz);
+ pos = sz;
+ markpos = 0;
+ } else if (buf.length >= marklimit) {
+ markpos = -1; /* buffer got too big, invalidate mark */
+ pos = 0; /* drop buffer contents */
+ } else { /* grow buffer */
+ int nsz = pos * 2;
+ if (nsz > marklimit)
+ nsz = marklimit;
+ byte nbuf[] = new byte[nsz];
+ System.arraycopy(buf, 0, nbuf, 0, pos);
+ buf = nbuf;
+ }
+ count = pos;
+ int n = in.read(buf, pos, buf.length - pos);
+ if (n > 0)
+ count = n + pos;
+ }
+ }
+
+}
Added: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogTest.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogTest.java?rev=762039&view=auto
==============================================================================
--- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogTest.java (added)
+++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogTest.java Sun Apr 5 01:36:27 2009
@@ -0,0 +1,105 @@
+/*
+ */
+package org.apache.tomcat.test.watchdog;
+
+import java.util.Properties;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+import junit.framework.TestResult;
+import junit.framework.TestSuite;
+
+import org.apache.tomcat.util.IntrospectionUtils;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+public class WatchdogTest extends TestCase {
+ String testName;
+
+ Element watchE;
+
+ private Properties props;
+
+ private WatchdogTest delegate;
+ private WatchdogClient wc;
+
+ public WatchdogTest(String s) throws Throwable {
+ String[] comp = s.split(";");
+ Class c = Class.forName(comp[1]);
+ wc = (WatchdogClient) c.newInstance();
+ TestSuite suite = (TestSuite) wc.getSuite();
+ // need to encode the base, file, etc in the test name
+
+ System.err.println(s);
+
+ for (int i = 0; i < suite.testCount(); i++) {
+ WatchdogTest t = (WatchdogTest) suite.testAt(i);
+ if (s.equals(t.getName())) {
+ delegate = t;
+ return;
+ }
+ }
+ }
+
+ public WatchdogTest(Element watchE, Properties props, String testName) {
+ this.testName = testName;
+ this.watchE = watchE;
+ this.props = props;
+ }
+
+ public int countTestCases() {
+ return 1;
+ }
+
+ public String getName() {
+ return testName;
+ }
+
+ public void run(TestResult res) {
+ if (delegate != null) {
+ // Single method run
+ wc.beforeSuite();
+ delegate.run(res);
+ wc.afterSuite(res);
+ return;
+ }
+ GTest test = new GTest();
+ NamedNodeMap attrs = watchE.getAttributes();
+
+ for (int i = 0; i < attrs.getLength(); i++) {
+ Node n = attrs.item(i);
+ String name = n.getNodeName();
+ String value = n.getNodeValue();
+ value = IntrospectionUtils.replaceProperties(value, props, null);
+ try {
+ IntrospectionUtils.setProperty(test, name, value);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ try {
+ res.startTest(this);
+ IntrospectionUtils.execute(test, "execute");
+ } catch (Throwable e) {
+ res.addError(this, e);
+ // res.stop();
+ }
+
+ if (test.passCount == 1) {
+ res.endTest(this);
+ return;
+ } else {
+ if (test.lastError == null) {
+ res.addFailure(this, new AssertionFailedError(test.request
+ + " " + test.description + "\n" + test.resultOut));
+ } else {
+ res.addError(this, test.lastError);
+ }
+ }
+ res.endTest(this);
+ }
+
+}
Propchange: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/test/watchdog/WatchdogTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: 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/util/buf/UEncoderTest.java?rev=762039&view=auto
==============================================================================
--- tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/util/buf/UEncoderTest.java (added)
+++ tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/util/buf/UEncoderTest.java Sun Apr 5 01:36:27 2009
@@ -0,0 +1,36 @@
+/*
+ */
+package org.apache.tomcat.util.buf;
+
+import junit.framework.TestCase;
+
+public class UEncoderTest extends TestCase {
+ UEncoder enc=new UEncoder();
+
+ /*
+ *
+ * Test method for 'org.apache.tomcat.util.buf.UEncoder.encodeURL(String)'
+ * TODO: find the relevant rfc and apache tests and add more
+ */
+ public void testEncodeURL() {
+
+ String eurl1=enc.encodeURL("test");
+ assertEquals("test", eurl1);
+
+ eurl1=enc.encodeURL("/test");
+ assertEquals("%2ftest", eurl1);
+
+ // safe ranges
+ eurl1=enc.encodeURL("test$-_.");
+ assertEquals("test$-_.", eurl1);
+
+ eurl1=enc.encodeURL("test$-_.!*'(),");
+ assertEquals("test$-_.!*'(),", eurl1);
+
+ eurl1=enc.encodeURL("//test");
+ assertEquals("%2f%2ftest", eurl1);
+
+
+ }
+
+}
Propchange: tomcat/trunk/modules/tomcat-lite/test/org/apache/tomcat/util/buf/UEncoderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org