craigmcc    01/01/26 17:49:15

  Modified:    tester/src/bin tester.xml
               tester/src/tester/org/apache/tester TestClient.java
               tester/web/WEB-INF web.xml
  Added:       tester/src/tester/org/apache/tester Aggregate01.java
                        Aggregate02.java
  Log:
  Add unit tests for the spec requirement that request parameters from the
  query string and POST data be aggregated, and that the values from the
  query string will show up first from request.getParameterValue()
  [Servlet Specification version 2.3 PFD, Section 4.1].
  
  Also, cleaned up the test client's handling of input data -- previously
  it was appending \r\n when using HttpURLConnection.
  
  Revision  Changes    Path
  1.9       +28 -0     jakarta-tomcat-4.0/tester/src/bin/tester.xml
  
  Index: tester.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/tester/src/bin/tester.xml,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- tester.xml        2001/01/23 20:12:00     1.8
  +++ tester.xml        2001/01/27 01:49:14     1.9
  @@ -266,6 +266,34 @@
            request="${context.path}/WrappedGetQueryString01?foo=1"
         outContent="GetQueryString01 PASSED"/>
   
  +    <tester host="${host}" port="${port}" protocol="${protocol}"
  +           debug="${debug}" method="POST"
  +       inHeaders="Content-Type:application/x-www-form-urlencoded"
  +       inContent="b=3&amp;a=2"
  +         request="${context.path}/Aggregate01?a=1"
  +      outContent="Aggregate01 PASSED"/>
  +
  +    <tester host="${host}" port="${port}" protocol="${protocol}"
  +           debug="${debug}" method="POST"
  +       inHeaders="Content-Type:application/x-www-form-urlencoded"
  +       inContent="b=3&amp;a=2"
  +         request="${context.path}/WrappedAggregate01?a=1"
  +      outContent="Aggregate01 PASSED"/>
  +
  +    <tester host="${host}" port="${port}" protocol="${protocol}"
  +           debug="${debug}" method="POST"
  +       inHeaders="Content-Type:application/x-www-form-urlencoded"
  +       inContent="b=3&amp;a=2"
  +         request="${context.path}/Aggregate02?a=1"
  +      outContent="Aggregate02 PASSED"/>
  +
  +    <tester host="${host}" port="${port}" protocol="${protocol}"
  +           debug="${debug}" method="POST"
  +       inHeaders="Content-Type:application/x-www-form-urlencoded"
  +       inContent="b=3&amp;a=2"
  +         request="${context.path}/WrappedAggregate02?a=1"
  +      outContent="Aggregate02 PASSED"/>
  +
       <!-- ========== Other ServletRequest Tests ============================ -->
   
       <!-- Servlet compliance tests, until equivalent tests are included
  
  
  
  1.5       +12 -9     
jakarta-tomcat-4.0/tester/src/tester/org/apache/tester/TestClient.java
  
  Index: TestClient.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/tester/src/tester/org/apache/tester/TestClient.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestClient.java   2001/01/03 05:50:45     1.4
  +++ TestClient.java   2001/01/27 01:49:14     1.5
  @@ -115,7 +115,7 @@
    * </ul>
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.4 $ $Date: 2001/01/03 05:50:45 $
  + * @version $Revision: 1.5 $ $Date: 2001/01/27 01:49:14 $
    */
   
   public class TestClient extends Task {
  @@ -355,9 +355,11 @@
               conn.setDoInput(true);
               if (inContent != null) {
                   conn.setDoOutput(true);
  -                inContent += "\r\n";
                   conn.setRequestProperty("Content-Length",
                                           "" + inContent.length());
  +                if (debug >= 1)
  +                    System.out.println("INPH: Content-Length: " +
  +                                       inContent.length());
               } else {
                   conn.setDoOutput(false);
               }
  @@ -381,12 +383,16 @@
                       String name = header.substring(0, colon).trim();
                       String value = header.substring(colon + 1).trim();
                       conn.setRequestProperty(name, value);
  +                    if (debug >= 1)
  +                        System.out.println("INPH: " + name + ": " + value);
                   }
               }
   
               // Connect to the server and send our output if necessary
               conn.connect();
               if (inContent != null) {
  +                if (debug >= 1)
  +                    System.out.println("INPD: " + inContent);
                   OutputStream os = conn.getOutputStream();
                   for (int i = 0; i < inContent.length(); i++)
                       os.write(inContent.charAt(i));
  @@ -528,7 +534,7 @@
               pw.print(command + "\r\n");
               if (inContent != null) {
                   if (debug >= 1)
  -                    System.out.println("HEAD: " + "Content-Length: " +
  +                    System.out.println("INPH: " + "Content-Length: " +
                                          inContent.length());
                   pw.print("Content-Length: " + inContent.length() + "\r\n");
               }
  @@ -552,7 +558,7 @@
                       String name = header.substring(0, colon).trim();
                       String value = header.substring(colon + 1).trim();
                       if (debug >= 1)
  -                        System.out.println("HEAD: " + name + ": " + value);
  +                        System.out.println("INPH: " + name + ": " + value);
                       pw.print(name + ": " + value + "\r\n");
                   }
               }
  @@ -561,12 +567,9 @@
               // Send our content (if any)
               if (inContent != null) {
                   if (debug >= 1)
  -                    System.out.print("DATA: ");
  -                for (int i = 0; i < inContent.length(); i++) {
  -                    if (debug >= 1)
  -                        System.out.print(inContent.charAt(i));
  +                    System.out.println("INPD: " + inContent);
  +                for (int i = 0; i < inContent.length(); i++)
                       pw.print(inContent.charAt(i));
  -                }
               }
               pw.flush();
   
  
  
  
  1.1                  
jakarta-tomcat-4.0/tester/src/tester/org/apache/tester/Aggregate01.java
  
  Index: Aggregate01.java
  ===================================================================
  /* ========================================================================= *
   *                                                                           *
   *                 The Apache Software License,  Version 1.1                 *
   *                                                                           *
   *     Copyright (c) 1999, 2000, 2001  The Apache Software Foundation.       *
   *                           All rights reserved.                            *
   *                                                                           *
   * ========================================================================= *
   *                                                                           *
   * Redistribution and use in source and binary forms,  with or without modi- *
   * fication, are permitted provided that the following conditions are met:   *
   *                                                                           *
   * 1. Redistributions of source code  must retain the above copyright notice *
   *    notice, this list of conditions and the following disclaimer.          *
   *                                                                           *
   * 2. Redistributions  in binary  form  must  reproduce the  above copyright *
   *    notice,  this list of conditions  and the following  disclaimer in the *
   *    documentation and/or other materials provided with the distribution.   *
   *                                                                           *
   * 3. The end-user documentation  included with the redistribution,  if any, *
   *    must include the following acknowlegement:                             *
   *                                                                           *
   *       "This product includes  software developed  by the Apache  Software *
   *        Foundation <http://www.apache.org/>."                              *
   *                                                                           *
   *    Alternately, this acknowlegement may appear in the software itself, if *
   *    and wherever such third-party acknowlegements normally appear.         *
   *                                                                           *
   * 4. The names  "The  Jakarta  Project",  "Tomcat",  and  "Apache  Software *
   *    Foundation"  must not be used  to endorse or promote  products derived *
   *    from this  software without  prior  written  permission.  For  written *
   *    permission, please contact <[EMAIL PROTECTED]>.                        *
   *                                                                           *
   * 5. Products derived from this software may not be called "Apache" nor may *
   *    "Apache" appear in their names without prior written permission of the *
   *    Apache Software Foundation.                                            *
   *                                                                           *
   * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES *
   * INCLUDING, BUT NOT LIMITED TO,  THE IMPLIED WARRANTIES OF MERCHANTABILITY *
   * AND FITNESS FOR  A PARTICULAR PURPOSE  ARE DISCLAIMED.  IN NO EVENT SHALL *
   * THE APACHE  SOFTWARE  FOUNDATION OR  ITS CONTRIBUTORS  BE LIABLE  FOR ANY *
   * DIRECT,  INDIRECT,   INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL *
   * DAMAGES (INCLUDING,  BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE GOODS *
   * OR SERVICES;  LOSS OF USE,  DATA,  OR PROFITS;  OR BUSINESS INTERRUPTION) *
   * HOWEVER CAUSED AND  ON ANY  THEORY  OF  LIABILITY,  WHETHER IN  CONTRACT, *
   * STRICT LIABILITY, OR TORT  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN *
   * ANY  WAY  OUT OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF  ADVISED  OF THE *
   * POSSIBILITY OF SUCH DAMAGE.                                               *
   *                                                                           *
   * ========================================================================= *
   *                                                                           *
   * This software  consists of voluntary  contributions made  by many indivi- *
   * duals on behalf of the  Apache Software Foundation.  For more information *
   * on the Apache Software Foundation, please see <http://www.apache.org/>.   *
   *                                                                           *
   * ========================================================================= */
  
  package org.apache.tester;
  
  
  import java.io.*;
  import java.util.Enumeration;
  import javax.servlet.*;
  import javax.servlet.http.*;
  
  /**
   * Test aggregation of query string and POST parameters.  According to
   * Servlet 2.3 PFD, Section 4.1, all such parameters should be aggregated,
   * and if there are duplicate parameter names from both sources, the
   * parameter value(s) from the query string should appear first in the
   * values returned by request.getParameterValues().
   *
   * @author Craig R. McClanahan
   * @version $Revision: 1.1 $ $Date: 2001/01/27 01:49:14 $
   */
  
  public class Aggregate01 extends HttpServlet {
  
      public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws IOException, ServletException {
  
          response.setContentType("text/plain");
          PrintWriter writer = response.getWriter();
  
          // Accumulate any errors that are noticed
          StringBuffer errors = new StringBuffer();
          String values[] = request.getParameterValues("a");
          if (values == null)
              errors.append("  Received no parameter values for 'a'.");
          else if (values.length != 2)
              errors.append("  Received " + values.length +
                            " parameter values for 'a' instead of 2.");
          else {
              if (!"1".equals(values[0]))
                  errors.append("  First value for 'a' was '" + values[0] +
                                "' instead of '1'.");
              if (!"2".equals(values[1]))
                  errors.append("  Second value for 'a' was '" + values[1] +
                                "' instead of '2'.");
          }
          values = request.getParameterValues("b");
          if (values == null)
              errors.append("  Received no parameter values for 'b'.");
          else if (values.length != 1)
              errors.append("  Received " + values.length +
                            " parameter values for 'b' instead of 1.");
          else {
              if (!"3".equals(values[0]))
                  errors.append("  Value for 'b' was '" + values[0] +
                                "' instead of '3'.");
          }
          Enumeration names = request.getParameterNames();
          while (names.hasMoreElements()) {
              String name = (String) names.nextElement();
              if ("a".equals(name))
                  continue;
              if ("b".equals(name))
                  continue;
              errors.append("  Received parameter '" + name + "'.");
          }
  
          // Report the results
          if (errors.length() < 1)
              writer.println("Aggregate01 PASSED");
          else
              writer.println("Aggregate01 FAILED -" + errors.toString());
          while (true) {
              String message = StaticLogger.read();
              if (message == null)
                  break;
              writer.println(message);
          }
          StaticLogger.reset();
  
      }
  
  }
  
  
  
  1.1                  
jakarta-tomcat-4.0/tester/src/tester/org/apache/tester/Aggregate02.java
  
  Index: Aggregate02.java
  ===================================================================
  /* ========================================================================= *
   *                                                                           *
   *                 The Apache Software License,  Version 1.1                 *
   *                                                                           *
   *     Copyright (c) 1999, 2000, 2001  The Apache Software Foundation.       *
   *                           All rights reserved.                            *
   *                                                                           *
   * ========================================================================= *
   *                                                                           *
   * Redistribution and use in source and binary forms,  with or without modi- *
   * fication, are permitted provided that the following conditions are met:   *
   *                                                                           *
   * 1. Redistributions of source code  must retain the above copyright notice *
   *    notice, this list of conditions and the following disclaimer.          *
   *                                                                           *
   * 2. Redistributions  in binary  form  must  reproduce the  above copyright *
   *    notice,  this list of conditions  and the following  disclaimer in the *
   *    documentation and/or other materials provided with the distribution.   *
   *                                                                           *
   * 3. The end-user documentation  included with the redistribution,  if any, *
   *    must include the following acknowlegement:                             *
   *                                                                           *
   *       "This product includes  software developed  by the Apache  Software *
   *        Foundation <http://www.apache.org/>."                              *
   *                                                                           *
   *    Alternately, this acknowlegement may appear in the software itself, if *
   *    and wherever such third-party acknowlegements normally appear.         *
   *                                                                           *
   * 4. The names  "The  Jakarta  Project",  "Tomcat",  and  "Apache  Software *
   *    Foundation"  must not be used  to endorse or promote  products derived *
   *    from this  software without  prior  written  permission.  For  written *
   *    permission, please contact <[EMAIL PROTECTED]>.                        *
   *                                                                           *
   * 5. Products derived from this software may not be called "Apache" nor may *
   *    "Apache" appear in their names without prior written permission of the *
   *    Apache Software Foundation.                                            *
   *                                                                           *
   * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES *
   * INCLUDING, BUT NOT LIMITED TO,  THE IMPLIED WARRANTIES OF MERCHANTABILITY *
   * AND FITNESS FOR  A PARTICULAR PURPOSE  ARE DISCLAIMED.  IN NO EVENT SHALL *
   * THE APACHE  SOFTWARE  FOUNDATION OR  ITS CONTRIBUTORS  BE LIABLE  FOR ANY *
   * DIRECT,  INDIRECT,   INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL *
   * DAMAGES (INCLUDING,  BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE GOODS *
   * OR SERVICES;  LOSS OF USE,  DATA,  OR PROFITS;  OR BUSINESS INTERRUPTION) *
   * HOWEVER CAUSED AND  ON ANY  THEORY  OF  LIABILITY,  WHETHER IN  CONTRACT, *
   * STRICT LIABILITY, OR TORT  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN *
   * ANY  WAY  OUT OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF  ADVISED  OF THE *
   * POSSIBILITY OF SUCH DAMAGE.                                               *
   *                                                                           *
   * ========================================================================= *
   *                                                                           *
   * This software  consists of voluntary  contributions made  by many indivi- *
   * duals on behalf of the  Apache Software Foundation.  For more information *
   * on the Apache Software Foundation, please see <http://www.apache.org/>.   *
   *                                                                           *
   * ========================================================================= */
  
  package org.apache.tester;
  
  
  import java.io.*;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import javax.servlet.*;
  import javax.servlet.http.*;
  
  /**
   * Test aggregation of query string and POST parameters.  According to
   * Servlet 2.3 PFD, Section 4.1, all such parameters should be aggregated,
   * and if there are duplicate parameter names from both sources, the
   * parameter value(s) from the query string should appear first in the
   * values returned by request.getParameterValues().
   * <p>
   * This test is the same as Aggregate01, except that it uses the new
   * <code>getParameterMap()</code> method to retrieve parameter values.
   *
   * @author Craig R. McClanahan
   * @version $Revision: 1.1 $ $Date: 2001/01/27 01:49:14 $
   */
  
  public class Aggregate02 extends HttpServlet {
  
      public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws IOException, ServletException {
  
          response.setContentType("text/plain");
          PrintWriter writer = response.getWriter();
  
          // Accumulate any errors that are noticed
          StringBuffer errors = new StringBuffer();
          Map map = request.getParameterMap();
          if (map == null) {
              errors.append("  No parameter map returned.");
              map = new HashMap();
          }
          String values[] = (String[]) map.get("a");
          if (values == null)
              errors.append("  Received no parameter values for 'a'.");
          else if (values.length != 2)
              errors.append("  Received " + values.length +
                            " parameter values for 'a' instead of 2.");
          else {
              if (!"1".equals(values[0]))
                  errors.append("  First value for 'a' was '" + values[0] +
                                "' instead of '1'.");
              if (!"2".equals(values[1]))
                  errors.append("  Second value for 'a' was '" + values[1] +
                                "' instead of '2'.");
          }
          values = (String[]) map.get("b");
          if (values == null)
              errors.append("  Received no parameter values for 'b'.");
          else if (values.length != 1)
              errors.append("  Received " + values.length +
                            " parameter values for 'b' instead of 1.");
          else {
              if (!"3".equals(values[0]))
                  errors.append("  Value for 'b' was '" + values[0] +
                                "' instead of '3'.");
          }
          Iterator names = map.keySet().iterator();
          while (names.hasNext()) {
              String name = (String) names.next();
              if ("a".equals(name))
                  continue;
              if ("b".equals(name))
                  continue;
              errors.append("  Received parameter '" + name + "'.");
          }
  
          // Report the results
          if (errors.length() < 1)
              writer.println("Aggregate02 PASSED");
          else
              writer.println("Aggregate02 FAILED -" + errors.toString());
          while (true) {
              String message = StaticLogger.read();
              if (message == null)
                  break;
              writer.println(message);
          }
          StaticLogger.reset();
  
      }
  
  }
  
  
  
  1.8       +40 -0     jakarta-tomcat-4.0/tester/web/WEB-INF/web.xml
  
  Index: web.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/tester/web/WEB-INF/web.xml,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- web.xml   2001/01/23 20:12:17     1.7
  +++ web.xml   2001/01/27 01:49:14     1.8
  @@ -42,6 +42,16 @@
   
       <filter-mapping>
           <filter-name>HttpFilter</filter-name>
  +        <url-pattern>/WrappedAggregate01</url-pattern>
  +    </filter-mapping>
  +
  +    <filter-mapping>
  +        <filter-name>HttpFilter</filter-name>
  +        <url-pattern>/WrappedAggregate02</url-pattern>
  +    </filter-mapping>
  +
  +    <filter-mapping>
  +        <filter-name>HttpFilter</filter-name>
           <url-pattern>/WrappedForward01</url-pattern>
       </filter-mapping>
   
  @@ -114,6 +124,16 @@
       <!-- ========== Servlet Definitions =================================== -->
   
       <servlet>
  +        <servlet-name>Aggregate01</servlet-name>
  +        <servlet-class>org.apache.tester.Aggregate01</servlet-class>
  +    </servlet>
  +
  +    <servlet>
  +        <servlet-name>Aggregate02</servlet-name>
  +        <servlet-class>org.apache.tester.Aggregate02</servlet-class>
  +    </servlet>
  +
  +    <servlet>
           <servlet-name>Authentication01</servlet-name>
           <servlet-class>org.apache.tester.Authentication01</servlet-class>
       </servlet>
  @@ -195,6 +215,26 @@
   
   
       <!-- ========== Servlet Mappings ====================================== -->
  +
  +    <servlet-mapping>
  +        <servlet-name>Aggregate01</servlet-name>
  +        <url-pattern>/Aggregate01</url-pattern>
  +    </servlet-mapping>
  +
  +    <servlet-mapping>
  +        <servlet-name>Aggregate01</servlet-name>
  +        <url-pattern>/WrappedAggregate01</url-pattern>
  +    </servlet-mapping>
  +
  +    <servlet-mapping>
  +        <servlet-name>Aggregate02</servlet-name>
  +        <url-pattern>/Aggregate02</url-pattern>
  +    </servlet-mapping>
  +
  +    <servlet-mapping>
  +        <servlet-name>Aggregate02</servlet-name>
  +        <url-pattern>/WrappedAggregate02</url-pattern>
  +    </servlet-mapping>
   
       <servlet-mapping>
           <servlet-name>Authentication01</servlet-name>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to