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/13 17:38:04 UTC

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

Author: dejanb
Date: Thu May 13 15:38:03 2010
New Revision: 943916

URL: http://svn.apache.org/viewvc?rev=943916&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQ-2732 - ftp blob permission denied

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/blob/FTPBlobUploadStrategy.java
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobDownloadStrategyTest.java
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobUploadStrategyTest.java
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPTestSupport.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/blob/FTPBlobUploadStrategy.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/blob/FTPBlobUploadStrategy.java?rev=943916&r1=943915&r2=943916&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/blob/FTPBlobUploadStrategy.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/blob/FTPBlobUploadStrategy.java Thu May 13 15:38:03 2010
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import java.net.ConnectException;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Arrays;
 
 import javax.jms.JMSException;
 
@@ -79,10 +80,11 @@ public class FTPBlobUploadStrategy imple
         	url = this.url.toString();
         }
         
-		ftp.storeFile(filename, in);
+		if (!ftp.storeFile(filename, in)) {
+		    throw new JMSException("FTP store failed: " + ftp.getReplyString());
+		}
 		ftp.quit();
 		ftp.disconnect();
-		
 		return new URL(url + filename);
 	}
 	

Modified: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobDownloadStrategyTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobDownloadStrategyTest.java?rev=943916&r1=943915&r2=943916&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobDownloadStrategyTest.java (original)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobDownloadStrategyTest.java Thu May 13 15:38:03 2010
@@ -24,59 +24,17 @@ import java.net.URL;
 import javax.jms.JMSException;
 
 import junit.framework.Assert;
-import junit.framework.TestCase;
 
 import org.apache.activemq.command.ActiveMQBlobMessage;
-import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.ftplet.UserManager;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
-import org.apache.ftpserver.usermanager.impl.BaseUser;
-import org.jmock.Mockery;
-
-public class FTPBlobDownloadStrategyTest extends TestCase {
-
-    private static final String ftpServerListenerName = "default";
-    private FtpServer server;
-    final static String userNamePass = "activemq";
-
-    Mockery context = null;
-    int ftpPort;
-    String ftpUrl;
 
-    final int FILE_SIZE = Short.MAX_VALUE * 10;
-
-    protected void setUp() throws Exception {
-        final File ftpHomeDirFile = new File("target/FTPBlobTest/ftptest");
-        ftpHomeDirFile.mkdirs();
-        ftpHomeDirFile.getParentFile().deleteOnExit();
-
-        FtpServerFactory serverFactory = new FtpServerFactory();
-        ListenerFactory factory = new ListenerFactory();
-
-        PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
-        UserManager userManager = userManagerFactory.createUserManager();
-
-        BaseUser user = new BaseUser();
-        user.setName("activemq");
-        user.setPassword("activemq");
-        user.setHomeDirectory(ftpHomeDirFile.getParent());
-
-        userManager.save(user);
-
-        serverFactory.setUserManager(userManager);
-        factory.setPort(0);
-        serverFactory.addListener(ftpServerListenerName, factory
-                .createListener());
-        server = serverFactory.createServer();
-        server.start();
-        ftpPort = serverFactory.getListener(ftpServerListenerName)
-                .getPort();
+public class FTPBlobDownloadStrategyTest extends FTPTestSupport {
 
-        ftpUrl = "ftp://" + userNamePass + ":" + userNamePass + "@localhost:"
-                + ftpPort + "/ftptest/";
+    final int FILE_SIZE = Short.MAX_VALUE * 10;
 
+    public void testDownload() throws Exception {
+        setConnection();
+        
+        // create file
         File uploadFile = new File(ftpHomeDirFile, "test.txt");
         FileWriter wrt = new FileWriter(uploadFile);
 
@@ -87,10 +45,7 @@ public class FTPBlobDownloadStrategyTest
         }
 
         wrt.close();
-
-    }
-
-    public void testDownload() {
+        
         ActiveMQBlobMessage message = new ActiveMQBlobMessage();
         BlobDownloadStrategy strategy = new FTPBlobDownloadStrategy();
         InputStream stream;

Modified: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobUploadStrategyTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobUploadStrategyTest.java?rev=943916&r1=943915&r2=943916&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobUploadStrategyTest.java (original)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPBlobUploadStrategyTest.java Thu May 13 15:38:03 2010
@@ -19,9 +19,7 @@ package org.apache.activemq.blob;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
-import java.net.URL;
 
-import javax.jms.Connection;
 import javax.jms.JMSException;
 import javax.jms.Session;
 
@@ -29,95 +27,14 @@ import junit.framework.Assert;
 
 import org.apache.activemq.ActiveMQConnection;
 import org.apache.activemq.ActiveMQSession;
-import org.apache.activemq.EmbeddedBrokerTestSupport;
 import org.apache.activemq.command.ActiveMQBlobMessage;
 import org.apache.activemq.command.MessageId;
-import org.apache.commons.net.ftp.FTPClient;
-import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.ftplet.AuthorizationRequest;
-import org.apache.ftpserver.ftplet.User;
-import org.apache.ftpserver.ftplet.UserManager;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
-import org.apache.ftpserver.usermanager.UsernamePasswordAuthentication;
-import org.apache.ftpserver.usermanager.impl.BaseUser;
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.api.Invocation;
-import org.jmock.lib.action.CustomAction;
-
-
-public class FTPBlobUploadStrategyTest extends EmbeddedBrokerTestSupport {
-	
-    private static final String ftpServerListenerName = "default";
-    private Connection connection;
-    private FtpServer server;
-    final static String userNamePass = "activemq";
-
-	Mockery context = null;
-	String ftpUrl;
-	
-	protected void setUp() throws Exception {
-		
-        final File ftpHomeDirFile = new File("target/FTPBlobTest/ftptest");
-        ftpHomeDirFile.mkdirs();
-        ftpHomeDirFile.getParentFile().deleteOnExit();
-
-        FtpServerFactory serverFactory = new FtpServerFactory();
-        ListenerFactory factory = new ListenerFactory();
-
-		PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
-		UserManager userManager = userManagerFactory.createUserManager();
-
-		BaseUser user = new BaseUser();
-        user.setName("activemq");
-        user.setPassword("activemq");
-        user.setHomeDirectory(ftpHomeDirFile.getParent());
-        
-        userManager.save(user);
 
-        serverFactory.setUserManager(userManager);
-        factory.setPort(0);
-        serverFactory.addListener(ftpServerListenerName, factory
-                .createListener());
-        server = serverFactory.createServer();
-        server.start();
-        int ftpPort = serverFactory.getListener(ftpServerListenerName)
-                .getPort();
-		
-        ftpUrl = "ftp://"
-            + userNamePass
-            + ":"
-            + userNamePass
-            + "@localhost:"
-            + ftpPort
-            + "/ftptest/";
-        bindAddress = "vm://localhost?jms.blobTransferPolicy.defaultUploadUrl=" + ftpUrl;
-        super.setUp();
 
-        connection = createConnection();
-        connection.start();
-        
-        // check if file exist and delete it
-        URL url = new URL(ftpUrl);
-        String connectUrl = url.getHost();
-		int port = url.getPort() < 1 ? 21 : url.getPort();
-		
-		FTPClient ftp = new FTPClient();
-		ftp.connect(connectUrl, port);
-		if(!ftp.login("activemq", "activemq")) {
-			ftp.quit();
-			ftp.disconnect();
-			throw new JMSException("Cant Authentificate to FTP-Server");
-		}
-		ftp.changeWorkingDirectory("ftptest");
-		ftp.deleteFile("testmessage");
-		ftp.quit();
-		ftp.disconnect();
-    }
-	
-	public void testFileUpload() throws Exception {
+public class FTPBlobUploadStrategyTest extends FTPTestSupport {
+
+    public void testFileUpload() throws Exception {
+        setConnection();
 		File file = File.createTempFile("amq-data-file-", ".dat");
         // lets write some data
         BufferedWriter writer = new BufferedWriter(new FileWriter(file));
@@ -131,6 +48,31 @@ public class FTPBlobUploadStrategyTest e
         message.setMessageId(new MessageId("testmessage"));
         message.onSend();
         Assert.assertEquals(ftpUrl + "testmessage", message.getURL().toString()); 
+        File uploaded = new File(ftpHomeDirFile, "testmessage");
+        assertTrue("File doesn't exists", uploaded.exists());
 	}
 
+    public void testWriteDenied() throws Exception {
+        userNamePass = "guest";
+        setConnection();
+        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();
+        
+        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        ((ActiveMQConnection)connection).setCopyMessageOnSend(false);
+        
+        ActiveMQBlobMessage message = (ActiveMQBlobMessage) ((ActiveMQSession)session).createBlobMessage(file);
+        message.setMessageId(new MessageId("testmessage"));
+        try {
+            message.onSend();
+        } catch (JMSException e) {
+            e.printStackTrace();
+            return;
+        }
+        fail("Should have failed with permission denied exception!");
+    }
+    
 }

Modified: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPTestSupport.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPTestSupport.java?rev=943916&r1=943915&r2=943916&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPTestSupport.java (original)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/blob/FTPTestSupport.java Thu May 13 15:38:03 2010
@@ -17,7 +17,7 @@ import org.apache.ftpserver.usermanager.
 import org.apache.ftpserver.usermanager.impl.WritePermission;
 import org.jmock.Mockery;
 
-public class FTPTestSupport extends EmbeddedBrokerTestSupport {
+public abstract class FTPTestSupport extends EmbeddedBrokerTestSupport {
     
     protected static final String ftpServerListenerName = "default";
     protected Connection connection;