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 2001/01/29 07:46:19 UTC

cvs commit: jakarta-tomcat/src/admin/test sanity-form.jsp test.jsp

costin      01/01/28 22:46:19

  Modified:    src/admin/WEB-INF admin.tld web.xml
               src/admin/WEB-INF/classes/tadm GTestTag.java
               src/admin/test test.jsp
  Added:       src/admin/WEB-INF ant.tld
               src/admin/WEB-INF/classes/tadm AntProperty.java AntTEI.java
                        AntTag.java AntTarget.java
               src/admin/WEB-INF/scripts run-test.sh
               src/admin/test sanity-form.jsp
  Log:
  A bit of reorganization of the tester before it becomes more complex.
  
  We use simpler tags - GTestTag is dealing only with GTest-specific properties.
  AntTag is calling ant, and you can set properties using AntProperty.
  
  Tags that deal with ant are separated from tags that deal with general
  administration ( which also need more specialization )
  
  ( BTW, there are quite a few interesting pages we can add - like
  rebuilding a web application from the web page, etc - there is a lot
  of automation that can be done using <ant> tag )
  
  Revision  Changes    Path
  1.8       +34 -70    jakarta-tomcat/src/admin/WEB-INF/admin.tld
  
  Index: admin.tld
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/admin.tld,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- admin.tld	2001/01/23 05:08:37	1.7
  +++ admin.tld	2001/01/29 06:46:17	1.8
  @@ -8,13 +8,13 @@
     <jspversion>1.1</jspversion>
     <shortname>Admin</shortname>
     <uri>http://jakarta.apache.org/taglibs/tomcat_admin-1.0</uri>
  -
  +  
     <info>
       Admin tags
     </info>
  -
  +  
     <!-- ******************** Defined Custom Tags *************************** -->
  -
  +  
     <tag>
       <name>admin</name>
       <tagclass>tadm.TomcatAdmin</tagclass>
  @@ -24,96 +24,60 @@
         make available the "cm" and "ctx" variables.
       </info>
       <attribute>
  -       <name>action</name>
  -       <required>false</required>
  +      <name>action</name>
  +      <required>false</required>
       </attribute>
       <attribute>
  -       <name>ctxPathParam</name>
  -       <required>false</required>
  +      <name>ctxPathParam</name>
  +      <required>false</required>
       </attribute>
       <attribute>
  -       <name>docBaseParam</name>
  -       <required>false</required>
  +      <name>docBaseParam</name>
  +      <required>false</required>
       </attribute>
       <attribute>
  -       <name>docBase</name>
  -       <required>false</required>
  +      <name>docBase</name>
  +      <required>false</required>
       </attribute>
       <attribute>
  -       <name>ctxPath</name>
  -       <required>false</required>
  -       <rtexprvalue>true</rtexprvalue>
  +      <name>ctxPath</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
       </attribute>
       <attribute>
  -       <name>ctxHost</name>
  -       <required>false</required>
  -       <rtexprvalue>true</rtexprvalue>
  +      <name>ctxHost</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
       </attribute>
       <attribute>
  -       <name>value</name>
  -       <required>false</required>
  +      <name>value</name>
  +      <required>false</required>
       </attribute>
     </tag>
  -  
  -  <tag>
  -	<name>iterate</name>
  -	<tagclass>tadm.TomcatIterate</tagclass>
  -        <teiclass>tadm.TomcatIterateTEI</teiclass>
  -	<bodycontent>JSP</bodycontent>
  -	<attribute>
  -	    <name>enumeration</name>
  -	    <required>false</required>
  -	    <rtexprvalue>true</rtexprvalue>
  -	</attribute>
  -	<attribute>
  -	    <name>array</name>
  -	    <required>false</required>
  -	    <rtexprvalue>true</rtexprvalue>
  -	</attribute>
  -	<attribute>
  -	    <name>name</name>
  -	    <required>true</required>
  -	</attribute>
  -	<attribute>
  -	    <name>type</name>
  -	    <required>true</required>
  -	</attribute>
  -	
   
  -  </tag>
  -
  -
  +  <!-- this is a "generic" tag, should be moved in a separate tld -->  
     <tag>
  -    <name>gtest</name>
  -    <tagclass>tadm.GTestTag</tagclass>
  -    <teiclass>tadm.GTestTEI</teiclass>
  -    <info>
  -      Run a GTest-based test suite.
  -    </info>
  +    <name>iterate</name>
  +    <tagclass>tadm.TomcatIterate</tagclass>
  +    <teiclass>tadm.TomcatIterateTEI</teiclass>
  +    <bodycontent>JSP</bodycontent>
       <attribute>
  -       <name>testFile</name>
  -       <required>true</required>
  +      <name>enumeration</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
       </attribute>
       <attribute>
  -       <name>testApp</name>
  -       <required>false</required>
  +      <name>array</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
       </attribute>
       <attribute>
  -       <name>target</name>
  -       <required>false</required>
  -       <rtexprvalue>true</rtexprvalue>
  +      <name>name</name>
  +      <required>true</required>
       </attribute>
       <attribute>
  -       <name>debug</name>
  -       <required>false</required>
  -       <rtexprvalue>true</rtexprvalue>
  +      <name>type</name>
  +      <required>true</required>
       </attribute>
  -    <attribute>
  -       <name>outputType</name>
  -       <required>false</required>
  -       <rtexprvalue>true</rtexprvalue>
  -    </attribute>
     </tag>
  -
  -
   </taglib>
  
  
  
  1.6       +31 -25    jakarta-tomcat/src/admin/WEB-INF/web.xml
  
  Index: web.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/web.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- web.xml	2001/01/24 01:44:33	1.5
  +++ web.xml	2001/01/29 06:46:18	1.6
  @@ -1,29 +1,35 @@
   <?xml version="1.0" encoding="ISO-8859-1"?>
  -<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  +<!DOCTYPE web-app PUBLIC 
  +     "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
       "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
  +
   <web-app>
  -	<description>
  -     Tomcat Admin 
  -  </description>
  -	<taglib>
  -		<taglib-uri>http://jakarta.apache.org/taglibs/tomcat_admin-1.0</taglib-uri>
  -		<taglib-location>/WEB-INF/admin.tld</taglib-location>
  -	</taglib>
  -	<security-constraint>
  -		<web-resource-collection>
  -			<web-resource-name>Protected Area</web-resource-name>
  -			<url-pattern>/contextAdmin/*</url-pattern>
  -			<http-method>DELETE</http-method>
  -			<http-method>GET</http-method>
  -			<http-method>POST</http-method>
  -			<http-method>PUT</http-method>
  -		</web-resource-collection>
  -		<auth-constraint>
  -			<role-name>admin</role-name>
  -		</auth-constraint>
  -	</security-constraint>
  -	<login-config>
  -		<auth-method>BASIC</auth-method>
  -		<realm-name>Admin</realm-name>
  -	</login-config>
  +  <description>Tomcat Admin</description>
  +  <taglib>
  +    <taglib-uri>http://jakarta.apache.org/taglibs/tomcat_admin-1.0</taglib-uri>
  +    <taglib-location>/WEB-INF/admin.tld</taglib-location>
  +  </taglib>
  +  <taglib>
  +    <taglib-uri>http://jakarta.apache.org/taglibs/ant-1.0</taglib-uri>
  +    <taglib-location>/WEB-INF/ant.tld</taglib-location>
  +  </taglib>
  +
  +  <security-constraint>
  +    <web-resource-collection>
  +      <web-resource-name>Protected Area</web-resource-name>
  +      <url-pattern>/contextAdmin/*</url-pattern>
  +      <http-method>DELETE</http-method>
  +      <http-method>GET</http-method>
  +      <http-method>POST</http-method>
  +      <http-method>PUT</http-method>
  +    </web-resource-collection>
  +    <auth-constraint>
  +      <role-name>admin</role-name>
  +    </auth-constraint>
  +  </security-constraint>
  +  
  +  <login-config>
  +    <auth-method>BASIC</auth-method>
  +    <realm-name>Admin</realm-name>
  +  </login-config>
   </web-app>
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/ant.tld
  
  Index: ant.tld
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1" ?>
  <!DOCTYPE taglib
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
    "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
  
  <taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>Ant</shortname>
    <uri>http://jakarta.apache.org/taglibs/ant-1.0</uri>
  
    <info>
      Tags allowing us to run ant. Ant can do a lot of usefull tasks 
      ( run time building, automated testing, etc ).
    </info>
  
    <!-- ******************** Defined Custom Tags *************************** -->
    <tag>
      <name>ant</name>
      <tagclass>tadm.AntTag</tagclass>
      <teiclass>tadm.AntTEI</teiclass>
      <info>Run ant</info>
      <attribute>
         <name>testFile</name>
         <required>true</required>
      </attribute>
      <attribute>
         <name>testApp</name>
         <required>false</required>
      </attribute>
      <attribute>
         <name>target</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
         <name>debug</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
         <name>outputType</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
    </tag>
  
  
    <tag>
      <name>property</name>
      <tagclass>tadm.AntProperty</tagclass>
      <info>Set a property to GTest and ant. If no value is specificed, 
  a request parameter with the same name will be used</info>
      <attribute>
         <name>name</name>
         <required>true</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
         <name>param</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
         <name>value</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
         <name>location</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
         <name>webApp</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
    </tag>
  
    <tag>
      <name>target</name>
      <tagclass>tadm.AntTarget</tagclass>
      <info>Add a target. You can either specify the target name or the 
  name of a request parameter holding the name(s)</info>
      <attribute>
         <name>name</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
         <name>param</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
      </attribute>
    </tag>
  
    <tag>
      <name>gtest</name>
      <tagclass>tadm.GTestTag</tagclass>
      <teiclass>tadm.GTestTEI</teiclass>
      <info>Make GTest properties available for scripting</info>
    </tag>
  
  </taglib>
  
  
  
  1.9       +9 -152    jakarta-tomcat/src/admin/WEB-INF/classes/tadm/GTestTag.java
  
  Index: GTestTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/classes/tadm/GTestTag.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- GTestTag.java	2001/01/28 19:18:36	1.8
  +++ GTestTag.java	2001/01/29 06:46:18	1.9
  @@ -1,6 +1,5 @@
   package tadm;
  -import java.util.Vector;
  -import java.util.Enumeration;
  +import java.util.*;
   import java.io.*;
   import java.net.URL;
   import javax.servlet.http.*;
  @@ -13,33 +12,15 @@
   import org.apache.tomcat.util.test.*;
   
   /**
  - * This tag will run a GTest-based test suite.
  - * 
  + * This tag will make available various properties needed to access
  + * GTest static variables.
    */
   public class GTestTag extends TagSupport {
  -    PageContext pageContext;
  -    String revision;
       
       public GTestTag() {}
   
       public int doStartTag() throws JspException {
   	try {
  -	    HttpServletRequest req=(HttpServletRequest)pageContext.
  -		getRequest();
  -
  -	    ServletContext thisCtx=pageContext.getServletConfig().
  -		getServletContext();
  -
  -	    // the admin can get other contexts, we are trusted
  -	    ServletContext targetCtx=(testApp==null) ? thisCtx:
  -		thisCtx.getContext( testApp );
  -							    
  -	    String base=targetCtx.getRealPath("/");
  -	    
  -	    runTest( base );
  -
  -	    pageContext.setAttribute("gtestTestRevision",
  -				     revision);
   	    pageContext.setAttribute("gtestTestResults",
   				     GTest.getTestResults());
   	    pageContext.setAttribute("gtestTestFailures",
  @@ -51,138 +32,14 @@
   	    pageContext.setAttribute("gtestHttpClients",
   				     HttpClient.getHttpClients());
   
  +	    	    
  +	    // reset test repositories
  +	    GTest.resetGTest();
  +	    GTest.setDefaultWriter( pageContext.getResponse().getWriter() );
  +
   	} catch (Exception ex ) {
   	    ex.printStackTrace();
  -	}
  -	return EVAL_BODY_INCLUDE;
  -    }
  -
  -    public int doEndTag() throws JspException {
  -	return EVAL_PAGE;
  -    }
  -    
  -    public void setPageContext(PageContext pctx ) {
  -	this.pageContext=pctx;
  -    }
  -
  -    public void setParent( Tag parent ) {
  -	super.setParent( parent);
  -    }
  -
  -    public void release() {
  -    }
  -
  -    //-------------------- Properties --------------------
  -    String testFileName;
  -    String target;
  -    String testApp;
  -    String debug;
  -    String outputType="html";
  -
  -    /** Set the name of the test.xml, relative to the base dir.
  -     *  For example, /WEB-INF/test-tomcat.xml
  -     */
  -    public void setTestFile( String s ) {
  -	testFileName=s;
  -    }
  -
  -    /** Set the target - a subset of tests to be run
  -     */
  -    public void setTarget( String s ) {
  -	//	System.out.println("Setting target " + s );
  -	target=s;
  -    }
  -
  -    /** The application containing the test file
  -     *  ( if not set assume the test file is local to /admin app.
  -     */
  -    public void setTestApp( String s ) {
  -	testApp=s;
  -    }
  -
  -    public void setDebug( String s ) {
  -	debug=s;
  -    }
  -
  -    public void setOutputType( String s ) {
  -	outputType=s;
  -    }
  -    
  -    // -------------------- Implementation methods --------------------
  -    
  -    private void runTest( String base) throws IOException {
  -	PrintWriter out=pageContext.getResponse().getWriter();
  -	try {
  -	    out.flush();
  -	    // 	  out.println("Running test " + base + " " + testFileName + " "
  -	    // 			       + target + "</br>" );
  -	    File testFile=new File( base + testFileName);
  -
  -
  -	    // reset test repositories
  -	    GTest.getTestResults().setSize(0);
  -	    GTest.getTestFailures().setSize(0);
  -	    GTest.getTestSuccess().setSize(0);
  -	    GTest.getTestProperties().clear();
  -	    HttpClient.getHttpClients().clear();
  -	    
  -	    // 	    // old task
  -	    // 	    org.apache.tomcat.task.GTest.setDefaultWriter( out );
  -	    // 	    org.apache.tomcat.task.GTest.setHtmlMode( true );
  -	    // new one
  -	    GTest.setDefaultWriter(out);
  -	    GTest.setDefaultOutput(outputType); // external formatting
  -	    if(debug!=null)
  -		GTest.setDefaultDebug(Integer.valueOf( debug ).intValue());
  -	    
  -	    Project project=new Project();
  -	    
  -	    AntServletLogger log=new AntServletLogger();
  -	    log.setWriter( out );
  -	    project.addBuildListener( log );
  -	    
  -	    project.init();
  -	    project.setUserProperty( "ant.file", testFile.toString());
  -	    // XXX
  -	    project.setUserProperty( "gdir", base + "/Golden");
  -	    project.setUserProperty( "wgdir", base + "/Golden");
  -
  -	    String port=pageContext.getRequest().getParameter("port");
  -	    if( port!=null)
  -		project.setUserProperty( "port", port);
  -	    String proto=pageContext.getRequest().getParameter("server.proto");
  -	    if( proto!=null )
  -		project.setUserProperty( "http.protocol", proto);
  -	    String host=pageContext.getRequest().getParameter("host");
  -	    if( host!=null )
  -		project.setUserProperty( "host", host);
  -	    
  -	    ProjectHelper.configureProject( project, testFile );
  -
  -	    // try to get revision if present
  -	    revision = project.getProperty( "revision" );
  -	    if (revision  == null)
  -		revision  = "Revision: Unknown";
  -	    else {
  -		// clean up a little in case CVS $Revision: 1.8 $ used
  -		revision  = revision .replace('$',' ');
  -		revision .trim();
  -	    }
  -	    
  -	    Vector targets=new Vector();
  -	    if( target==null ) target="client";
  -	    
  -	    targets.addElement( target );
  -	    project.executeTargets( targets );
  -	    
  -	} catch( Exception ex ) {
  -	    ex.printStackTrace(out);
  -	    if( ex instanceof BuildException ) {
  -		Throwable ex1=((BuildException)ex).getException();
  -		out.println("Root cause: " );
  -		if( ex1!=null)
  -		    ex1.printStackTrace(out);
  -	    }
   	}
  +	return SKIP_BODY;
       }
   }
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/classes/tadm/AntProperty.java
  
  Index: AntProperty.java
  ===================================================================
  package tadm;
  import java.util.Vector;
  import java.util.Enumeration;
  import java.io.*;
  import java.net.URL;
  import javax.servlet.http.*;
  import javax.servlet.*;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  import org.apache.tools.ant.*;
  import org.apache.tomcat.util.test.*;
  
  /**
   * Child tag to pass ant properties to Ant tag
   * 
   */
  public class AntProperty extends TagSupport {
      
      public AntProperty() {}
  
      public int doStartTag() throws JspException {
  	Tag parent=getParent();
  	if( parent == null  )
  	    throw new JspException( "AntProperty used as top-level tag,"+
  				    "must be inside <ant>");
  	if( ! (parent instanceof AntTag))
  	    throw new JspException( "AntProperty must be child of <ant>");
  
  	AntTag antTag=(AntTag)parent;
  
  	if( value==null && location!= null ) {
  	    // the property will be set with the absolute path
  	    // of the "location", relative to this or another
  	    // (accessible) web application
  	    HttpServletRequest req=(HttpServletRequest)pageContext.
  		getRequest();
  	    ServletContext thisCtx=pageContext.getServletConfig().
  		getServletContext();
  	    ServletContext targetCtx=(webapp==null) ? thisCtx:
  		thisCtx.getContext( webapp );
  	    value=targetCtx.getRealPath(location);
  	}
  
  	
  	if( value == null ) {
  	    // if param is used, try it first ( param!= name )
  	    if( param != null ) {
  		value=pageContext.getRequest().getParameter( param );
  	    } else {
  		value=pageContext.getRequest().getParameter( name );
  	    }
  	}
  
  	if( value != null )
  	    antTag.setProperty( name, value );
  
  	return SKIP_BODY;
      }
  
      //-------------------- Properties --------------------
      String name;
      String value;
      String param;
  
      public void setName( String s ) {
  	name=s;
      }
  
      public void setParam( String s ) {
  	param=s;
      }
  
      public void setValue( String s ) {
  	value=s;
      }
  
      // -------------------- Special properties --------------------
      String location;
      String webapp;
  
      public void setLocation( String s ) {
  	location=s;
      }
  
      /** Set the property with the "base" of the web application
       */
      public void setWebApp( String s ) {
  	webapp=s;
      }
  
  
      // -------------------- From ant --------------------
      
  }
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/classes/tadm/AntTEI.java
  
  Index: AntTEI.java
  ===================================================================
  package tadm;
  import java.util.Vector;
  import java.util.Enumeration;
  import java.io.File;
  import java.net.URL;
  import javax.servlet.http.*;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  import org.apache.tomcat.core.Request;
  import org.apache.tomcat.core.Context;
  import org.apache.tomcat.core.ContextManager;
  
  
  import javax.servlet.jsp.tagext.TagData;
  import javax.servlet.jsp.tagext.TagExtraInfo;
  import javax.servlet.jsp.tagext.VariableInfo;
  
  public class AntTEI extends TagExtraInfo {
  
      public VariableInfo[] getVariableInfo(TagData data) {
  	return (new VariableInfo[] {
  	    new VariableInfo("antProperties",
  			     "java.util.Properties",
  			     true,  VariableInfo.AT_BEGIN),
  	});
  
      }
  
  
  }
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/classes/tadm/AntTag.java
  
  Index: AntTag.java
  ===================================================================
  package tadm;
  import java.util.*;
  import java.io.*;
  import java.net.URL;
  import javax.servlet.http.*;
  import javax.servlet.*;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  import org.apache.tools.ant.*;
  
  /**
   * This tag will run ant tasks
   * 
   */
  public class AntTag extends TagSupport {
      
      public AntTag() {}
  
      public int doStartTag() throws JspException {
  	try {
  	    pageContext.setAttribute("antProperties",
  				     args);
  	} catch (Exception ex ) {
  	    ex.printStackTrace();
  	}
  	return EVAL_BODY_INCLUDE;
      }
  
      public int doEndTag() throws JspException {
  	runTest();
  	return EVAL_PAGE;
      }
  
      // -------------------- child tag support --------------------
      Properties args=new Properties();
      Vector targets=new Vector();
      
      public void setProperty( String name, String value ) {
  	System.out.println("Adding property " + name + "=" + value );
  	args.put(name, value );
      }
  
      public String getProperty( String name ) {
  	System.out.println("Getting property " + name  );
  	return args.getProperty(name );
      }
  
      public void addTarget( String n ) {
  	System.out.println("Adding target " + n );
  	targets.addElement( n );
      }
      
      //-------------------- Properties --------------------
  
      String testFileName;
      String target;
      String testApp;
      String debug;
      String outputType="html";
  
      /** Set the name of the test.xml, relative to the base dir.
       *  For example, /WEB-INF/test-tomcat.xml
       */
      public void setTestFile( String s ) {
  	testFileName=s;
      }
  
      /** Set the target - a subset of tests to be run
       */
      public void setTarget( String s ) {
  	//	System.out.println("Setting target " + s );
  	target=s;
      }
  
      /** The application containing the test file
       *  ( if not set assume the test file is local to /admin app.
       */
      public void setTestApp( String s ) {
  	testApp=s;
      }
  
      public void setDebug( String s ) {
  	debug=s;
      }
  
      public void setOutputType( String s ) {
  	outputType=s;
      }
      
      // -------------------- Implementation methods --------------------
      
      private void runTest() throws JspException {
  	PrintWriter out=null;
  	try {
  	    out=pageContext.getResponse().getWriter();
  	    pageContext.getOut().flush();
  	    out.flush(); // we need a writer for ant
  	    
  	    Project project=new Project();
  	    
  	    AntServletLogger log=new AntServletLogger();
  	    log.setWriter( out );
  	    project.addBuildListener( log );
  	    
  	    project.init();
  
  	    Enumeration argsE=args.propertyNames();
  	    while( argsE.hasMoreElements() ) {
  		String k=(String)argsE.nextElement();
  		String v=args.getProperty( k );
  		if( k!=null && v!= null )
  		    project.setUserProperty( k, v );
  	    }
  
  	    String antFileN=args.getProperty("ant.file");
  	    if( antFileN==null )
  		throw new JspException( "ant.file not specified");
  	    File antF=new File(antFileN);
  	    ProjectHelper.configureProject( project,
  					   antF );
  
  	    // pre-execution properties
  	    Hashtable antProperties=project.getProperties();
  	    argsE=antProperties.keys();
  	    while( argsE.hasMoreElements() ) {
  		String k=(String)argsE.nextElement();
  		String v=(String)antProperties.get( k );
  		if( k!=null && v!= null )
  		    args.put( k, v ); // includes "revision"
  	    }
  	    
  	    if( targets.size()==0 ) {
  		//targets.addElement("client");
  	    }
  
  	    project.executeTargets( targets );
  
  	    // post-execution properties
  	    antProperties=project.getProperties();
  
  	    argsE=antProperties.keys();
  	    while( argsE.hasMoreElements() ) {
  		String k=(String)argsE.nextElement();
  		String v=(String)antProperties.get( k );
  		if( k!=null && v!= null )
  		    args.put( k, v ); 
  	    }
  	    
  	} catch( BuildException ex ) {
  	    if( out==null ) out=new PrintWriter(System.out);
  	    ex.printStackTrace(out);
  	    Throwable ex1=ex.getException();
  	    out.println("Root cause: " );
  	    if( ex1!=null)
  		ex1.printStackTrace(out);
  	    out.flush();
  	    throw new JspException( ex.toString() );
  	} catch( IOException ioex ) {
  	    if( out==null ) out=new PrintWriter(System.out);
  	    ioex.printStackTrace(out);
  	    throw new JspException( ioex.toString() );
  	}
      }
  }
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/classes/tadm/AntTarget.java
  
  Index: AntTarget.java
  ===================================================================
  package tadm;
  import java.util.Vector;
  import java.util.Enumeration;
  import java.io.*;
  import java.net.URL;
  import javax.servlet.http.*;
  import javax.servlet.*;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  import org.apache.tools.ant.*;
  import org.apache.tomcat.util.test.*;
  
  /**
   * Child tag to add ant targets to Ant taglib.
   * 
   */
  public class AntTarget extends TagSupport {
      
      public AntTarget() {}
  
      public int doStartTag() throws JspException {
  	Tag parent=getParent();
  	if( parent == null  )
  	    throw new JspException( "AntTarget used as top-level tag,"+
  				    "must be inside <ant>");
  	if( ! (parent instanceof AntTag ))
  	    throw new JspException( "AntTarget must be child of <ant>");
  
  	AntTag antTag=(AntTag)parent;
  	if( name == null ) {
  	    String names[]=pageContext.getRequest().
  		getParameterValues( param );
  	    for( int i=0; i<names.length; i++ ) 
  		antTag.addTarget( names[i]);
  	} else {
  	    antTag.addTarget( name );
  	}
  	return SKIP_BODY;
      }
  
      //-------------------- Properties --------------------
      String name;
      String param;
  
      public void setName( String s ) {
  	name=s;
      }
      public void setParam( String s ) {
  	param=s;
      }
  }
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/scripts/run-test.sh
  
  Index: run-test.sh
  ===================================================================
  #!/bin/sh
  #
  
  # Shell script to run the tomcat sanity test suite 
   
  if [ "$TOMCAT_HOME" = "" ] ; then
      echo You need to set TOMCAT_HOME
      exit
  fi
  
  cp=$CLASSPATH
  
  CLASSPATH=${TOMCAT_HOME}/lib/tomcat_util.jar:$CLASSPATH
  CLASSPATH=${TOMCAT_HOME}/lib/parser.jar:$CLASSPATH
  CLASSPATH=${TOMCAT_HOME}/lib/jaxp.jar:$CLASSPATH
  CLASSPATH=${TOMCAT_HOME}/webapps/admin/WEB-INF/lib/ant.jar:$CLASSPATH
  CLASSPATH=${TOMCAT_HOME}/webapps/admin/WEB-INF/classes:$CLASSPATH
  
  if [ "$cp" != "" ] ; then
      CLASSPATH=${CLASSPATH}:${cp}
  fi
  
  export CLASSPATH
  
  echo Using classpath: ${CLASSPATH}
  echo
  
  ant -Dgdir=${TOMCAT_HOME}/webapps/test/Golden -f ${TOMCAT_HOME}/webapps/test/WEB-INF/test-tomcat.xml client $*
  
  exit 0
  
  
  
  1.9       +27 -33    jakarta-tomcat/src/admin/test/test.jsp
  
  Index: test.jsp
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/test/test.jsp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- test.jsp	2001/01/28 21:46:00	1.8
  +++ test.jsp	2001/01/29 06:46:19	1.9
  @@ -4,37 +4,13 @@
   
   <%@ taglib uri="http://jakarta.apache.org/taglibs/tomcat_admin-1.0" 
              prefix="adm" %>
  +<%@ taglib uri="http://jakarta.apache.org/taglibs/ant-1.0" 
  +           prefix="ant" %>
   
   This page will show the result of executing the sanity test suite. 
   You can see the context log <a href="/test/context_log.txt">here</a>
   
  -<form method="GET" action="test.jsp" >
  -Target:
  -<select name="target" > 
  -  <option>new-style</option>
  -  <option>file-tomcat</option>
  -  <option>dispatch-tomcat</option>
  -  <option>get-tomcat</option>
  -  <option>requestMap</option>
  -  <option>post</option>
  -  <option>jsp-tomcat</option>
  -  <option>wrong_request</option>
  -  <option>unavailable</option>
  -  <option>restricted</option>
  -  <option selected>client</option>
  -</select>
  -<br>
  -
  -Debug: <input type="checkbox" name="debug" value="10"><br>
  -Port: <input type="input" name="port" value="<%= request.getServerPort() %>">
  -<br>
  -Host: <input type="input" name="host" value="<%= request.getServerName() %>">
  -<br>
  -Expected protocol: <input type="input" name="server.proto" 
  -			  value="<%= request.getProtocol() %>">
  - ( use when testing Apache - tomcat3.x returns HTTP/1.0 ) <br>
  -<input type="submit">
  -</form>
  +<%@ include file="sanity-form.jsp" %>
   
   <% // This is an ugly hack to make the logs easily accessible.
      // Keep in mind this is just a way to jump-start testing, not a 
  @@ -48,19 +24,37 @@
   <adm:admin ctxPath="/test" 
   	   action="setLogger" 
   	   value="webapps/test/context_log.txt" />
  +
   <!-- trozo 1 -->
  -<adm:gtest testFile="WEB-INF/test-tomcat.xml" 
  -	   testApp="/test" 
  -	   target='<%= request.getParameter("target") %>' 
  -           debug='<%= request.getParameter("debug") %>' 
  -           outputType='none' />
  +<ant:gtest />
  +
  +<ant:ant testFile="WEB-INF/test-tomcat.xml" 
  +	 testApp="/test" >
  +  <ant:target param="target" />
  +  
  +  <ant:property name="ant.file" 
  +		location="/WEB-INF/test-tomcat.xml" 
  +		webApp="/test" />
  +  <ant:property name="gdir" 
  +		location="/Golden" 
  +		webApp="/test" />
  +  <ant:property name="wgdir" 
  +		location="/Golden" 
  +		webApp="/test" />
  +  <ant:property name="debug"  param="debug" />
  +  <ant:property name="outputType" value="none"  />
  +  <ant:property name="port" param="port" />
  +  <ant:property name="http.protocol" param="server.proto" />
  +  <ant:property name="host" param="host" />
  +</ant:ant>
  +
   <!-- trozo 1 -->
   <% // Test completed, display the results ( outType=none means
      // Gtest doesn't generate any output ( but we have to wait untill
      // it's done ), use 'html' for "interactive" results
   %>
   
  -<h1>Test <%= gtestTestRevision %></h1>
  +<h1>Test <%= antProperties.getProperty("revision") %></h1>
   
   <% // -------------------- Failures -------------------- %>
   <h1>FAILED Tests</h1>
  
  
  
  1.1                  jakarta-tomcat/src/admin/test/sanity-form.jsp
  
  Index: sanity-form.jsp
  ===================================================================
  <form method="GET" action="test.jsp" >
  Target:
  <select name="target" > 
    <option>file</option>
    <option>dispatch</option>
    <option>get</option>
    <option>requestMap</option>
    <option>post</option>
    <option>wrong_request</option>
    <option>unavailable</option>
    <option>restricted</option>
    <option>jsp</option>
    <option>special</option>
    <option>tomcat-standalone</option>
    <option>tomcat-apache</option>
    <option selected>client</option>
  </select>
  <br>
  
  Debug: <input type="checkbox" name="debug" value="10"><br>
  Port: <input type="input" name="port" value="<%= request.getServerPort() %>">
  <br>
  Host: <input type="input" name="host" value="<%= request.getServerName() %>">
  <br>
  Expected protocol: <input type="input" name="server.proto" 
  			  value="<%= request.getProtocol() %>">
   ( use when testing Apache - tomcat3.x returns HTTP/1.0 ) <br>
  <input type="submit">
  </form>