You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2010/05/14 16:19:15 UTC

svn commit: r944278 - in /activemq/trunk: activemq-core/src/test/java/org/apache/activemq/blob/ activemq-fileserver/ activemq-fileserver/src/main/java/org/apache/activemq/util/ activemq-fileserver/src/test/java/org/apache/activemq/util/

Author: dejanb
Date: Fri May 14 14:19:14 2010
New Revision: 944278

URL: http://svn.apache.org/viewvc?rev=944278&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQ-2667 - make fileserver jetty neutral

Added:
    activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpBlobTest.java
    activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpTestSupport.java
Removed:
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/DefaultBlobUploadStrategyTest.java
Modified:
    activemq/trunk/activemq-fileserver/pom.xml
    activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java
    activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java

Modified: activemq/trunk/activemq-fileserver/pom.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/pom.xml?rev=944278&r1=944277&r2=944278&view=diff
==============================================================================
--- activemq/trunk/activemq-fileserver/pom.xml (original)
+++ activemq/trunk/activemq-fileserver/pom.xml Fri May 14 14:19:14 2010
@@ -87,19 +87,35 @@
       <artifactId>activemq-jaas</artifactId>
       <optional>true</optional>
     </dependency>
-
+    
     <!-- web container -->
     <dependency>
-      <groupId>org.eclipse.jetty.aggregate</groupId>
-      <artifactId>jetty-all-server</artifactId>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-servlet_2.5_spec</artifactId>
+      <scope>provided</scope>
     </dependency>
 
+
     <!-- used for testing -->
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
     </dependency>
+    
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>activemq-core</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>    
+
+    <dependency>
+      <groupId>org.eclipse.jetty.aggregate</groupId>
+      <artifactId>jetty-all-server</artifactId>
+      <scope>test</scope>
+    </dependency>
+    
   </dependencies>
 
   <properties>

Modified: activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java?rev=944278&r1=944277&r2=944278&view=diff
==============================================================================
--- activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java (original)
+++ activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java Fri May 14 14:19:14 2010
@@ -38,8 +38,6 @@ import javax.servlet.http.HttpServletRes
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.eclipse.jetty.util.IO;
-import org.eclipse.jetty.util.URIUtil;
 
 
 /**
@@ -71,7 +69,7 @@ public class RestFilter implements Filte
     }
 
     private File locateFile(HttpServletRequest request) {
-        return new File(filterConfig.getServletContext().getRealPath(URIUtil.addPaths(request.getServletPath(), request.getPathInfo())));
+        return new File(filterConfig.getServletContext().getRealPath(request.getServletPath()), request.getPathInfo());
     }
 
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
@@ -122,8 +120,8 @@ public class RestFilter implements Filte
 
         try {
             URL destinationUrl = new URL(destination);
-            IO.copyFile(file, new File(destinationUrl.getFile()));
-            IO.delete(file);
+            IOHelper.copyFile(file, new File(destinationUrl.getFile()));
+            IOHelper.deleteFile(file);
         } catch (IOException e) {
             response.sendError(HttpURLConnection.HTTP_INTERNAL_ERROR); // file
                                                                         // could
@@ -178,7 +176,7 @@ public class RestFilter implements Filte
 
         FileOutputStream out = new FileOutputStream(file);
         try {
-            IO.copy(request.getInputStream(), out);
+            IOHelper.copyInputStream(request.getInputStream(), out);
         } catch (IOException e) {
             LOG.warn("Exception occured" , e);
             out.close();
@@ -207,7 +205,7 @@ public class RestFilter implements Filte
             return;
         }
 
-        boolean success = IO.delete(file); // actual delete operation
+        boolean success = IOHelper.deleteFile(file); // actual delete operation
 
         if (success) {
             response.setStatus(HttpURLConnection.HTTP_NO_CONTENT); // we return

Added: activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpBlobTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpBlobTest.java?rev=944278&view=auto
==============================================================================
--- activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpBlobTest.java (added)
+++ activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpBlobTest.java Fri May 14 14:19:14 2010
@@ -0,0 +1,64 @@
+package org.apache.activemq.util;
+
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+
+import junit.framework.Assert;
+
+import org.apache.activemq.ActiveMQSession;
+import org.apache.activemq.BlobMessage;
+import org.apache.activemq.command.ActiveMQBlobMessage;
+import org.eclipse.jetty.util.IO;
+
+public class HttpBlobTest extends HttpTestSupport {
+    
+    public void testBlobFile() throws Exception {
+        // first create Message
+        File file = File.createTempFile("amq-data-file-", ".dat");
+        // lets write some data
+        String content = "hello world " + System.currentTimeMillis();
+        BufferedWriter writer = new BufferedWriter(new FileWriter(file));
+        writer.append(content);
+        writer.close();
+
+        ActiveMQSession session = (ActiveMQSession) connection.createSession(
+                false, Session.AUTO_ACKNOWLEDGE);
+        MessageProducer producer = session.createProducer(destination);
+        MessageConsumer consumer = session.createConsumer(destination);
+        BlobMessage message = session.createBlobMessage(file);
+
+        producer.send(message);
+        Thread.sleep(1000);
+
+        // check message send
+        Message msg = consumer.receive(1000);
+        Assert.assertTrue(msg instanceof ActiveMQBlobMessage);
+
+        InputStream input = ((ActiveMQBlobMessage) msg).getInputStream();
+        StringBuilder b = new StringBuilder();
+        int i = input.read();
+        while (i != -1) {
+            b.append((char) i);
+            i = input.read();
+        }
+        input.close();
+        File uploaded = new File(homeDir, msg.getJMSMessageID().toString().replace(":", "_")); 
+        Assert.assertEquals(content, b.toString());
+        assertTrue(uploaded.exists());
+        ((ActiveMQBlobMessage)msg).deleteFile();
+        assertFalse(uploaded.exists());
+    }
+    
+}

Added: activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpTestSupport.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpTestSupport.java?rev=944278&view=auto
==============================================================================
--- activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpTestSupport.java (added)
+++ activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpTestSupport.java Fri May 14 14:19:14 2010
@@ -0,0 +1,106 @@
+package org.apache.activemq.util;
+
+import java.io.File;
+import java.net.Socket;
+import java.net.URL;
+
+import javax.jms.Connection;
+import javax.jms.Destination;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.net.SocketFactory;
+
+import junit.framework.TestCase;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.webapp.WebAppContext;
+
+public abstract class HttpTestSupport extends TestCase {
+    private static final Log LOG = LogFactory.getLog(HttpTestSupport.class);
+    
+    BrokerService broker;
+    Server server;
+    ActiveMQConnectionFactory factory;
+    Connection connection;
+    Session session;
+    MessageProducer producer;
+    Destination destination;
+    
+    protected boolean createBroker = true;
+    
+    final File homeDir = new File("src/main/webapp/uploads/");
+    
+    protected void setUp() throws Exception {
+        
+        server = new Server();
+        SelectChannelConnector connector = new SelectChannelConnector();
+        connector.setPort(8080);
+        connector.setServer(server);
+        WebAppContext context = new WebAppContext();
+
+        context.setResourceBase("src/main/webapp");
+        context.setContextPath("/");
+        context.setServer(server);
+        server.setHandler(context);
+        server.setConnectors(new Connector[] {
+            connector
+        });
+        server.start();
+        waitForJettySocketToAccept("http://localhost:8080");
+        
+        if (createBroker) {
+            broker = new BrokerService();
+            broker.setPersistent(false);
+            broker.setUseJmx(true);
+            broker.addConnector("vm://localhost");
+            broker.start();
+            broker.waitUntilStarted();
+            
+            factory = new ActiveMQConnectionFactory("vm://localhost");
+            connection = factory.createConnection();
+            connection.start();
+            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            destination = session.createQueue("test");
+            producer = session.createProducer(destination);
+            
+            IOHelper.deleteFile(homeDir);
+            homeDir.mkdir();
+        }
+    }
+
+    protected void tearDown() throws Exception {
+        server.stop();
+        if (createBroker) {
+            broker.stop();
+            broker.waitUntilStopped();
+            session.close();
+            connection.close();
+            IOHelper.deleteFile(homeDir);
+        }
+    }
+
+    public void waitForJettySocketToAccept(String bindLocation) throws Exception {
+        final URL url = new URL(bindLocation);
+        assertTrue("Jetty endpoint is available", Wait.waitFor(new Wait.Condition() {
+
+            public boolean isSatisified() throws Exception {
+                boolean canConnect = false;
+                try {
+                    Socket socket = SocketFactory.getDefault().createSocket(url.getHost(), url.getPort());
+                    socket.close();
+                    canConnect = true;
+                } catch (Exception e) {
+                    LOG.warn("verify jetty available, failed to connect to " + url + e);
+                }
+                return canConnect;
+            }}, 60 * 1000));
+    }
+    
+}
+

Modified: activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java?rev=944278&r1=944277&r2=944278&view=diff
==============================================================================
--- activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java (original)
+++ activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java Fri May 14 14:19:14 2010
@@ -23,21 +23,17 @@ import java.io.OutputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
 
-import junit.framework.TestCase;
-
 import org.eclipse.jetty.util.IO;
 
-public class RestFilterTest extends TestCase {
-
-    public RestFilterTest(String s) {
-        super(s);
-    }
+public class RestFilterTest extends HttpTestSupport {
 
-    public void test() throws Exception {
+    protected boolean createBroker = false;
+    
+    public void testFilter() throws Exception {
         byte[] fileContents = new byte[] {
             'a', 'b', 'c'
         };
-        URL url = new URL("http://localhost:8080/fileserver/repository/file.txt");
+        URL url = new URL("http://localhost:8080/uploads/file.txt");
 
         // 1. upload
         HttpURLConnection connection = (HttpURLConnection)url.openConnection();