diff --git a/activemq-core/src/test/java/org/apache/activemq/blob/DefaultBlobUploadStrategyTest.java b/activemq-core/src/test/java/org/apache/activemq/blob/DefaultBlobUploadStrategyTest.java deleted file mode 100755 index cd7f7daabd..0000000000 --- a/activemq-core/src/test/java/org/apache/activemq/blob/DefaultBlobUploadStrategyTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.blob; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.InputStream; -import java.net.URL; - -import junit.framework.TestCase; -import org.apache.activemq.ActiveMQConnectionFactory; -import org.apache.activemq.command.ActiveMQBlobMessage; -import org.apache.activemq.command.MessageId; - -public class DefaultBlobUploadStrategyTest extends TestCase { - - private static final String FILESERVER_URL = "http://localhost:8080/"; - private static final String URI = "vm://localhost?jms.blobTransferPolicy.defaultUploadUrl=http://localhost:8080/"; - - public static void main(String[] args) { - junit.textui.TestRunner.run(DefaultBlobUploadStrategyTest.class); - } - - public void testDummy() throws Exception { - - } - - // DISABLED UNTIL WE EMBED JETTY - public void xtestUploadViaDefaultBlobUploadStrategy() throws Exception { - // 0. Initialise - File file = File.createTempFile("amq-data-file-", ".dat"); - // lets write some data - BufferedWriter writer = new BufferedWriter(new FileWriter(file)); - writer.append("Hello World!"); - writer.close(); - - ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(URI); - BlobTransferPolicy policy = factory.getBlobTransferPolicy(); - - ActiveMQBlobMessage msg = new ActiveMQBlobMessage(); - msg.setMessageId(new MessageId()); - - // 1. Upload - DefaultBlobUploadStrategy strategy = new DefaultBlobUploadStrategy(policy); - strategy.uploadFile(msg, file); - - // 2. Download - msg.setURL(new URL(FILESERVER_URL + msg.getMessageId())); - - InputStream in = msg.getInputStream(); - long bytesRead = 0; - byte[] buffer = new byte[1024 * 1024]; - - while (true) { - int c = in.read(buffer); - if (c == -1) { - break; - } - bytesRead += c; - } - in.close(); - TestCase.assertTrue(bytesRead == file.length()); - - // 3. Delete - //strategy.deleteFile(msg); - } - -} diff --git a/activemq-fileserver/pom.xml b/activemq-fileserver/pom.xml index e2ee451045..8e0b71f826 100755 --- a/activemq-fileserver/pom.xml +++ b/activemq-fileserver/pom.xml @@ -87,19 +87,35 @@ activemq-jaas true - + - org.eclipse.jetty.aggregate - jetty-all-server + org.apache.geronimo.specs + geronimo-servlet_2.5_spec + provided + junit junit test + + + ${pom.groupId} + activemq-core + test-jar + test + + + + org.eclipse.jetty.aggregate + jetty-all-server + test + + diff --git a/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java b/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java index 48332fc4d4..d41de8cf8a 100644 --- a/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java +++ b/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java @@ -38,8 +38,6 @@ import javax.servlet.http.HttpServletResponse; 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 Filter { } 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 Filter { 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 Filter { 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 Filter { 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 diff --git a/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpBlobTest.java b/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpBlobTest.java new file mode 100644 index 0000000000..898af2716c --- /dev/null +++ b/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpBlobTest.java @@ -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()); + } + +} diff --git a/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpTestSupport.java b/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpTestSupport.java new file mode 100644 index 0000000000..3786a3dbb8 --- /dev/null +++ b/activemq-fileserver/src/test/java/org/apache/activemq/util/HttpTestSupport.java @@ -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)); + } + +} + diff --git a/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java b/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java index 0b7224d189..7e2b7990e2 100644 --- a/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java +++ b/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java @@ -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 class RestFilterTest extends HttpTestSupport { - public RestFilterTest(String s) { - super(s); - } - - 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();