costin 01/08/25 18:45:39 Added: src/tests/webpages/WEB-INF build.xml src/tests/webpages/WEB-INF/classes LoadServlet.java RequestDump.java src/tests/webpages/WEB-INF/classes/dispatch ForwardPI.java src/tests/webpages/dispatch forwParam.jsp Log: Added few more tests ( not automated yet ) for various bugs. Revision Changes Path 1.1 jakarta-tomcat/src/tests/webpages/WEB-INF/build.xml Index: build.xml =================================================================== <project name="webpages" default="main" basedir="."> <!-- The values to customize for each application: appname: the name of the application ( "simple" ). Defaults to project name, if set. Global properties you must set( can be set in jaxm.properties ) servlet.jar: location of servlet.jar Other properties, with defaults: webapps.dir: directory where the app will be built. Default to in-place ( very usefull if you create your app under webapps/ ). wars.dir: directory where the .war file will be constructed. If not set, no war will be generated. compile.debug compile.deprecation compile.optimize: javac customization --> <property file="${user.home}/build.properties"/> <!-- User local --> <property file="${user.home}/.ant.properties"/> <!-- User local --> <property file="build.properties"/> <!-- Component local --> <property file="../../build.properties"/> <!-- For all webapps --> <property file="../../../build.properties"/> <property name="appname" value="${ant.project.name}"/> <property name="appdir" location=".."/> <property name="compile.debug" value="true" /> <property name="compile.optimize" value="false" /> <property name="compile.deprecation" value="false" /> <!-- Classpath <fileset id="extra-classpath" dir="." > </fileset> --> <!-- ==================== Init targets ==================== --> <target name="init" depends="checks,build.dir.webapps,build.dir.local" description="Initialization and checkup" > <echo message="-------- Building ${appname} to ${build.dir} "/> </target> <target name="prepare.build" if="webapps.dir" description="Preparing the webapp dir if not in-place" > <mkdir dir="${webapps.dir}/${appname}"/> <mkdir dir="${webapps.dir}/${appname}/WEB-INF"/> <mkdir dir="${webapps.dir}/${appname}/WEB-INF/lib"/> <mkdir dir="${webapps.dir}/${appname}/WEB-INF/src"/> <mkdir dir="${webapps.dir}/${appname}/WEB-INF/classes"/> <copy todir="${webapps.dir}/${appname}" > <fileset dir="${appdir}" /> </copy> </target> <target name="prepare" depends="init,prepare.build"> <mkdir dir="${build.dir}/${appname}/WEB-INF/lib"/> <mkdir dir="${build.dir}/${appname}/WEB-INF/classes"/> <mkdir dir="${appdir}/WEB-INF/lib"/> </target> <!-- ==================== Build ==================== --> <target name="main" depends="prepare,compile.src,compile.classes" /> <target name="compile.src" if="src.available" > <javac srcdir="${appdir}/WEB-INF/src" destdir="${build.dir}/${appname}/WEB-INF/classes" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}"> <classpath > <pathelement location="${servlet.jar}" /> <fileset id="app-classpath" dir="${appdir}/WEB-INF/lib"> <include name="*.jar" /> </fileset> </classpath> </javac> <copy todir="${build.dir}/${appname}/WEB-INF/classes"> <fileset dir="${appdir}/WEB-INF/src"> <include name="**/*.properties" /> <include name="**/*.dtd" /> <include name="**/*.xml" /> </fileset> </copy> </target> <target name="compile.classes" if="classes.available" > <javac srcdir="${appdir}/WEB-INF/classes" destdir="${build.dir}/${appname}/WEB-INF/classes" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}"> <classpath > <pathelement location="${servlet.jar}" /> <fileset id="app-classpath" dir="${appdir}/WEB-INF/lib"> <include name="*.jar" /> </fileset> </classpath> </javac> </target> <!-- ==================== Cleanup & Packaging ==================== --> <target name="clean" depends="init"> <delete dir="{build.dir}/${appname}/WEB-INF/classes"/> </target> <target name="war" depends="main" description="Creating the WAR file" if="wars.dir" > <mkdir dir="${wars.dir}" /> <jar jarfile="${wars.dir}/${appname}.war" basedir="${build.dir}/${appname}" > <include name="**"/> </jar> </target> <!-- ==================== Logic and Guessing ==================== --> <target name="checks" depends="set.available,check.appname,check.servlet" /> <target name="set.available" > <!-- Environement check --> <property name="src.base" location="../.." /> <available property="appname.correct" file="../../${appname}/WEB-INF/build.xml" /> <available property="servlet.available" file="${servlet.jar}" /> <available property="src.available" file="src" /> <available property="classes.available" file="classes" /> </target> <target name="check.servlet" unless="servlet.available" > <fail message="Servlet.jar not found at ${servlet.jar}, make sure servlet.jar is set" /> </target> <target name="check.appname" unless="appname.correct" > <fail message="Appname not set, couldn't find ${appname} in ${src.base}" /> </target> <target name="build.dir.webapps" if="webapps.dir" > <property name="build.dir" value="${webapps.dir}" /> </target> <target name="build.dir.local" unless="webapps.dir" > <property name="build.dir" location="../.." /> </target> </project> 1.1 jakarta-tomcat/src/tests/webpages/WEB-INF/classes/LoadServlet.java Index: LoadServlet.java =================================================================== import javax.servlet.*; import javax.servlet.http.*; public class LoadServlet extends HttpServlet { public LoadServlet() {}; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { int num = (int) (java.lang.Math.random()*10000); int stop = (int) (java.lang.Math.random()*10000); java.io.PrintWriter pw = response.getWriter(); pw.println("Lines = " + num + " " + stop); for (int i = 1; i < num; i++) { if (i == stop) { throw new ServletException("num = " + num + ", stop = " + stop); } pw.println(" Line " + i); } } private class Loader implements Runnable { int num; public Loader(int pNum) { num = pNum; } public void run() { java.net.URL url; try { url = new java.net.URL("http://127.0.0.1:8080/test/servlet/LoadServlet?num=" + num); } catch (java.net.MalformedURLException e) { throw new NullPointerException(); } int ok = 0; int ownErrors = 0; for (int i = 0; ; i++) { try { if (i % 100 == 100) { System.out.println("Thread " + num + " = " + i + ", ownErrors = " + ownErrors + ", ok = " + ok); } int stop = (int) (java.lang.Math.random()*40000); java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(url.openStream())); for (int j = 0; ; j++) { String line = br.readLine(); if (line == null) { break; } if (j == stop) { ++ownErrors; throw new NullPointerException(); } } ++ok; } catch (Exception e) { } } } } public void run() { for (int i = 0; i < 10; i++) { Thread t = new Thread(new Loader(i)); t.start(); } } public static void main(String[] args) throws Exception { (new LoadServlet()).run(); } } 1.1 jakarta-tomcat/src/tests/webpages/WEB-INF/classes/RequestDump.java Index: RequestDump.java =================================================================== import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.*; import javax.servlet.http.*; /** * * * @author James Duncan Davidson <[EMAIL PROTECTED]> * @author Jason Hunter <[EMAIL PROTECTED]> */ public class RequestDump extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet( request, response ); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dumpRequest(this, request, response ); } public static void dumpRequest(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); response.setContentType("text/html"); Enumeration enum, names, e; ServletContext context=servlet.getServletContext(); out.println(); out.println("<h2>Request info</h2>"); out.println("<table border='1' id='req.info'>"); out.println("<tr><td>Servlet Name</td><td>" + servlet.getServletName() + "</td></tr>"); out.println("<tr><td>Protocol</td><td>" + request.getProtocol() + "</td></tr>"); out.println("<tr><td>Scheme</td><td>" + request.getScheme() + "</td></tr>"); out.println("<tr><td>Server Name</td><td>" + request.getServerName() + "</td></tr>"); out.println("<tr><td>Server Port</td><td>" + request.getServerPort() + "</td></tr>"); out.println("<tr><td>Server Info</td><td>" + context.getServerInfo() + "</td></tr>"); out.println("<tr><td>Remote Addr</td><td>" + request.getRemoteAddr() + "</td></tr>"); out.println("<tr><td>Remote Host</td><td>" + request.getRemoteHost() + "</td></tr>"); out.println("<tr><td>Character Encoding</td><td>" + request.getCharacterEncoding() + "</td></tr>"); out.println("<tr><td>Content Length</td><td>" + request.getContentLength() + "</td></tr>"); out.println("<tr><td>Content Type</td><td>"+ request.getContentType() + "</td></tr>"); out.println("<tr><td>Locale</td><td>"+ request.getLocale() + "</td></tr>"); out.println("<tr><td>Default Response Buffer</td><td>"+ response.getBufferSize() + "</td></tr>"); out.println("<tr><td>Request Is Secure</td><td>" + request.isSecure() + "</td></tr>"); out.println("<tr><td>Auth Type</td><td>" + request.getAuthType() + "</td></tr>"); out.println("<tr><td>HTTP Method</td><td>" + request.getMethod() + "</td></tr>"); out.println("<tr><td>Remote User</td><td>" + request.getRemoteUser() + "</td></tr>"); out.println("<tr><td>Request URI</td><td>" + request.getRequestURI() + "</td></tr>"); out.println("<tr><td>Context Path</td><td>" + request.getContextPath() + "</td></tr>"); out.println("<tr><td>Servlet Path</td><td>" + request.getServletPath() + "</td></tr>"); out.println("<tr><td>Path Info</td><td>" + request.getPathInfo() + "</td></tr>"); out.println("<tr><td>Path Trans</td><td>" + request.getPathTranslated() + "</td></tr>"); out.println("<tr><td>Query String</td><td>" + request.getQueryString() + "</td></tr>"); HttpSession session = request.getSession(false); if( session!=null ) { out.println("<tr><td>Requested Session Id</td><td>" + request.getRequestedSessionId() + "</td></tr>"); out.println("<tr><td>Current Session Id</td><td>" + session.getId() + "</td></tr>"); out.println("<tr><td>Session Created Time</td><td>" + session.getCreationTime() + "</td></tr>"); out.println("<tr><td>Session Last Accessed Time</td><td>" + session.getLastAccessedTime() + "</td></tr>"); out.println("<tr><td>Session Max Inactive Interval Seconds</td><td>" + session.getMaxInactiveInterval() + "</td></tr>"); } out.println("</table>"); out.println("<h2>Parameters</h2>"); out.println("<table border='1' id='req.params'>"); e = request.getParameterNames(); while (e.hasMoreElements()) { String key = (String)e.nextElement(); String[] values = request.getParameterValues(key); out.print("<tr><td>" + key + "</td><td>"); for(int i = 0; i < values.length; i++) { out.print("<span>" + values[i] + "</span> "); } out.println("</td></tr>"); } out.println("</table>"); out.println("<h2>Headers</h2>"); out.println("<table border='1' id='req.headers'>"); e = request.getHeaderNames(); while (e.hasMoreElements()) { String key = (String)e.nextElement(); String value = request.getHeader(key); out.println("<tr><td>" + key + "</td><td>" + value + "</td></tr>" ); } out.println("</table>"); out.println("<h2>Cookies</h2>"); out.println("<table border='1' id='req.cookies'>"); Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; out.println("<tr><td>" + cookie.getName() + "</td><td>" + cookie.getValue() + "</td></tr>" ); } out.println("</table>"); if( session != null ) { out.println("<h2>Session</h2>"); out.println("<table border='1' id='req.cookies'>"); names = session.getAttributeNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); out.println("<tr><td>" + name + "</td><td>" + session.getAttribute(name) + "</td></tr>" ); } out.println("</table>"); } out.println("<h2>Request attributes</h2>"); out.println("<table border='1' id='req.attributes'>"); e = request.getAttributeNames(); while (e.hasMoreElements()) { String key = (String)e.nextElement(); Object value = request.getAttribute(key); out.println("<tr><td>" + key + "</td><td>" + value + "</td></tr>" ); } out.println("</table>"); out.println("<h2>Context attributes:</h2>"); out.println("<table border='1' id='ctx.attributes'>"); enum = context.getAttributeNames(); while (enum.hasMoreElements()) { String key = (String)enum.nextElement(); Object value = context.getAttribute(key); out.println("<tr><td>" + key + "</td><td>" + value + "</td></tr>" ); } out.println("</table>"); out.println("<h2>Servlet init parameters</h2>"); out.println("<table border='1' id='servlet.init.params'>"); e = servlet.getInitParameterNames(); while (e.hasMoreElements()) { String key = (String)e.nextElement(); String value = servlet.getInitParameter(key); out.println("<tr><td>" + key + "</td><td>" + value + "</td></tr>" ); } out.println("</table>"); out.println("<h2>Context init parameters</h2>"); out.println("<table border='1' id='ctx.init.params'>"); enum = context.getInitParameterNames(); while (enum.hasMoreElements()) { String key = (String)enum.nextElement(); Object value = context.getInitParameter(key); out.println("<tr><td>" + key + "</td><td>" + value + "</td></tr>" ); } out.println("</table>"); } } 1.1 jakarta-tomcat/src/tests/webpages/WEB-INF/classes/dispatch/ForwardPI.java Index: ForwardPI.java =================================================================== /* * $Id: ForwardPI.java,v 1.1 2001/08/26 01:45:39 costin Exp $ */ package dispatch; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import RequestDump; /** * Test FORWARD with a path info * */ public class ForwardPI extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req.setAttribute("originalPI", req.getPathInfo()); RequestDispatcher rd = getServletContext().getRequestDispatcher("/servlet/RequestDump"); rd.forward(req, res); } } 1.1 jakarta-tomcat/src/tests/webpages/dispatch/forwParam.jsp Index: forwParam.jsp =================================================================== <% String workListID="foo"; String wiID="bar"; String action="open"; %> <jsp:forward page = "/servlet/RequestDump" > <jsp:param name = "workList.id" value = "<%= workListID %>" /> <jsp:param name = "workItem.id" value = "<%= wiID %>" /> <jsp:param name = "open.content" value = "<%= action.equals( \"open\" ) ? \"true\" : \"false\" %>" /> </jsp:forward>