On 8/7/06, Garrett Rooney <[EMAIL PROTECTED]> wrote:

FWIW, I'd like to see us bundle a minimal web server (Jetty?) and have
our tests just automatically set it up prior to execution.  It seems
considerably less error prone than expecting someone to set up a
server.

Here's a patch that switches over to using Jetty for the server side.
I'm not committing it yet because I don't know for sure what the
server side of the caching tests is supposed to do (is the code
available anywhere?), and it needs to be cleaned up a bit (shouldn't
hardcode the port it runs on, for example).

-garrett

[[[
Use an embedded jetty server for the caching tests.

* build/build.xml: Build test client tests, download the jars needed for
 jetty.

* dependencies/deps.properties: Add jetty related jars.

[ in client/src/test/java/org/apache/abdera/test/client/cache ]

* CacheTests.java
 Add a bunch of imports.
 (CHECK_CACHE_INVALIDATE): Point to localhost.
 (server): New static variable.
 (setUp): Initialize server.
 (Servlet): A servlet that implements the server side of the tests.
]]]
Index: build/build.xml
===================================================================
--- build/build.xml     (revision 429478)
+++ build/build.xml     (working copy)
@@ -66,6 +66,7 @@
   <property name="client" value="${basedir}/client" />
   <property name="client.src" value="${client}/src/main/java" />
   <property name="client.work" value="${work}/client" />
+  <property name="client.test.java" value="${client}/src/test/java" />
   <property name="client.jar" 
value="${dist}/${ant.project.name}.client.${version}.jar" />
   
   <property environment="env" />
@@ -132,6 +133,8 @@
           <available file="${dependencies}/${commons.httpclient.jar}" />
           <available file="${dependencies}/${junit.jar}" />
           <available file="${dependencies}/${wstx.jar}" />
+          <available file="${dependencies}/${jetty.jar}" />
+          <available file="${dependencies}/${jetty-util.jar}" />
         </and>
       </not>
     </condition>
@@ -268,6 +271,10 @@
            destdir="${client.work}"
            classpathref="jar.dependencies"
            classpath="${core.work}" />
+    <javac srcdir="${client.test.java}"
+           destdir="${test}"
+           classpathref="jar.dependencies"
+           
classpath="${core.work};${parser.work};${extensions.work};${client.work}" />
     <mkdir dir="${client.work}/META-INF" />
     <copy todir="${client.work}/META-INF">
       <fileset dir="${basedir}">
@@ -455,6 +462,12 @@
       <get src="${wstx.dir}/${wstx.jar}"
            dest="${dependencies}/${wstx.jar}"
            usetimestamp="true" />
+      <get src="${jetty.dir}/${jetty.jar}"
+           dest="${dependencies}/${jetty.jar}"
+           usetimestamp="true" />
+      <get src="${jetty-util.dir}/${jetty-util.jar}"
+           dest="${dependencies}/${jetty-util.jar}"
+           usetimestamp="true" />
     </parallel>
   </target>
   
Index: dependencies/deps.properties
===================================================================
--- dependencies/deps.properties        (revision 429478)
+++ dependencies/deps.properties        (working copy)
@@ -70,4 +70,10 @@
 retroweaver.zip=retroweaver-1.2.3.zip
 
 xmlsecurity.dir=http://www.apache.org/dist/java-repository/xml-security/jars
-xmlsecurity.jar=xmlsec-1.3.0.jar
\ No newline at end of file
+xmlsecurity.jar=xmlsec-1.3.0.jar
+
+jetty.dir=http://www.ibiblio.org/maven2/jetty/jetty/6.0.0rc0
+jetty.jar=jetty-6.0.0rc0.jar
+
+jetty-util.dir=http://www.ibiblio.org/maven2/jetty/jetty-util/6.0.0rc0
+jetty-util.jar=jetty-util-6.0.0rc0.jar
Index: client/src/test/java/org/apache/abdera/test/client/cache/CacheTests.java
===================================================================
--- client/src/test/java/org/apache/abdera/test/client/cache/CacheTests.java    
(revision 429478)
+++ client/src/test/java/org/apache/abdera/test/client/cache/CacheTests.java    
(working copy)
@@ -21,6 +21,11 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.Connector;
+import org.mortbay.jetty.bio.SocketConnector;
+import org.mortbay.jetty.servlet.ServletHandler;
+
 import org.apache.abdera.protocol.client.Client;
 import org.apache.abdera.protocol.client.CommonsClient;
 import org.apache.abdera.protocol.client.RequestOptions;
@@ -28,6 +33,11 @@
 
 import junit.framework.TestCase;
 
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletException;
+
 /**
  * For now these are hitting Mark Nottingham's set of caching tests.  We'll
  * need to set up our own server.  The hard part about testing caching is
@@ -37,10 +47,51 @@
  * on how to set up a local server and have a portable suite of tests. 
  */
 public class CacheTests extends TestCase {
-  
-  private final static String CHECK_CACHE_INVALIDATE = 
-    "http://www.mnot.net/javascript/xmlhttprequest/check_cache_invalidate.s";;
-  
+
+  private final static String CHECK_CACHE_INVALIDATE = 
"http://localhost:8080/";;
+
+  private static Server server;
+
+  protected void setUp() throws Exception {
+    if (server == null) {
+      server = new Server();
+
+      Connector connector = new SocketConnector();
+
+      // TODO: use a port defined by a property
+      connector.setPort(8080);
+
+      server.setConnectors(new Connector[]{connector});
+
+      ServletHandler handler = new ServletHandler();
+
+      server.setHandler(handler);
+
+      handler.addServletWithMapping(
+        "org.apache.abdera.test.client.cache.CacheTests$Servlet",
+        "/"
+      );
+
+      server.start();
+    }
+  }
+
+  public static class Servlet extends HttpServlet {
+    protected void doGet(HttpServletRequest request,
+                         HttpServletResponse response)
+      throws ServletException, IOException
+    {
+      String reqnum = request.getHeader("X-Reqnum");
+
+      response.setContentType("text/plain");
+      response.setStatus(HttpServletResponse.SC_OK);
+      response.setHeader("Cache-Control", "max-age=60");
+      response.setDateHeader("Date", System.currentTimeMillis());
+
+      response.getWriter().println(reqnum);
+    }
+  }
+
   public static void testRequestNoStore() throws Exception {
     
       Client client = new CommonsClient();

Reply via email to