You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ie...@apache.org on 2013/03/04 14:11:35 UTC

svn commit: r1452287 - in /james/server/trunk/queue: queue-activemq/src/test/java/org/apache/james/queue/activemq/ queue-api/src/main/java/org/apache/james/queue/api/ queue-file/src/main/java/org/apache/james/queue/file/ queue-jms/src/test/java/org/apa...

Author: ieugen
Date: Mon Mar  4 13:11:35 2013
New Revision: 1452287

URL: http://svn.apache.org/r1452287
Log:
JMS queue and ActiveMQ queue test speed-up

* start the broker just once

Added:
    james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
      - copied, changed from r1452285, james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
Modified:
    james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
    james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
    james/server/trunk/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueue.java
    james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
    james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java
    james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java

Modified: james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java?rev=1452287&r1=1452286&r2=1452287&view=diff
==============================================================================
--- james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java (original)
+++ james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java Mon Mar  4 13:11:35 2013
@@ -18,18 +18,22 @@
  ****************************************************************/
 package org.apache.james.queue.activemq;
 
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.queue.jms.JMSMailQueue;
+
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.james.filesystem.api.FileSystem;
 
 public class ActiveMQMailQueueBlobTest extends ActiveMQMailQueueTest {
 
     public final static String BASE_DIR = "file://target/james-test";
     private MyFileSystem fs;
 
+    private JMSMailQueue queue;
+
     @Override
     protected ActiveMQConnectionFactory createConnectionFactory() {
         ActiveMQConnectionFactory factory = super.createConnectionFactory();
@@ -48,15 +52,23 @@ public class ActiveMQMailQueueBlobTest e
         super.setUp();
     }
 
-    @Override
     public void tearDown() throws Exception {
-        super.tearDown();
         if (fs != null) {
             fs.destroy();
         }
     }
 
     @Override
+    public JMSMailQueue getQueue() {
+        return queue;
+    }
+
+    @Override
+    public void setQueue(JMSMailQueue queue) {
+        this.queue = queue;
+    }
+
+    @Override
     protected boolean useBlobMessages() {
         return true;
     }

Modified: james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java?rev=1452287&r1=1452286&r2=1452287&view=diff
==============================================================================
--- james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java (original)
+++ james/server/trunk/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java Mon Mar  4 13:11:35 2013
@@ -20,19 +20,49 @@ package org.apache.james.queue.activemq;
 
 import org.apache.activemq.broker.BrokerPlugin;
 import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.region.policy.PolicyEntry;
+import org.apache.activemq.broker.region.policy.PolicyMap;
 import org.apache.activemq.plugin.StatisticsBrokerPlugin;
+import org.apache.james.queue.jms.AbstractJMSMailQueueTest;
 import org.apache.james.queue.jms.JMSMailQueue;
-import org.apache.james.queue.jms.JMSMailQueueTest;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.jms.ConnectionFactory;
+import java.util.Arrays;
 
-public class ActiveMQMailQueueTest extends JMSMailQueueTest {
+public abstract class ActiveMQMailQueueTest extends AbstractJMSMailQueueTest {
 
-    @Override
-    protected BrokerService createBroker() throws Exception {
-        BrokerService broker = super.createBroker();
+    private static BrokerService brokerService;
+
+    @BeforeClass
+    public static void setupBroker() throws Exception {
+        brokerService = createBroker();
+        brokerService.start();
+    }
+
+    @AfterClass
+    public static void tearDownBroker() throws Exception {
+        if (brokerService != null) {
+            brokerService.stop();
+        }
+    }
+
+    protected static BrokerService createBroker() throws Exception {
+        BrokerService broker = new BrokerService();
+        broker.setPersistent(false);
+        broker.setUseJmx(false);
+        broker.addConnector("tcp://127.0.0.1:61616");
+
+        // Enable priority support
+        PolicyMap pMap = new PolicyMap();
+        PolicyEntry entry = new PolicyEntry();
+        entry.setPrioritizedMessages(true);
+        entry.setQueue(QUEUE_NAME);
+        pMap.setPolicyEntries(Arrays.asList(entry));
+        broker.setDestinationPolicy(pMap);
         // Enable statistics
         broker.setPlugins(new BrokerPlugin[]{new StatisticsBrokerPlugin()});
         broker.setEnableStatistics(true);
@@ -42,14 +72,11 @@ public class ActiveMQMailQueueTest exten
 
     @Override
     protected JMSMailQueue createQueue(ConnectionFactory factory, String queueName) {
-        Logger log = LoggerFactory.getLogger("MockLog");
-        // slf4j can't set programmatically any log level. It's just a facade
-        // log.setLevel(SimpleLog.LOG_LEVEL_DEBUG);
+        Logger log = LoggerFactory.getLogger(ActiveMQMailQueueTest.class);
         return new ActiveMQMailQueue(factory, queueName, useBlobMessages(), log);
     }
 
     protected boolean useBlobMessages() {
         return false;
     }
-
 }

Modified: james/server/trunk/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueue.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueue.java?rev=1452287&r1=1452286&r2=1452287&view=diff
==============================================================================
--- james/server/trunk/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueue.java (original)
+++ james/server/trunk/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueue.java Mon Mar  4 13:11:35 2013
@@ -107,7 +107,6 @@ public interface MailQueue {
     }
 
     /**
-     * 
      *
      */
     public interface MailQueueItem {

Modified: james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java?rev=1452287&r1=1452286&r2=1452287&view=diff
==============================================================================
--- james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java (original)
+++ james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java Mon Mar  4 13:11:35 2013
@@ -18,6 +18,17 @@
  ****************************************************************/
 package org.apache.james.queue.file;
 
+import com.google.common.io.Closeables;
+import org.apache.james.core.MimeMessageCopyOnWriteProxy;
+import org.apache.james.core.MimeMessageSource;
+import org.apache.james.lifecycle.api.Disposable;
+import org.apache.james.lifecycle.api.LifecycleUtil;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.mailet.Mail;
+import org.slf4j.Logger;
+
+import javax.mail.MessagingException;
+import javax.mail.util.SharedFileInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -38,24 +49,14 @@ import java.util.concurrent.ScheduledExe
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
-import javax.mail.MessagingException;
-import javax.mail.util.SharedFileInputStream;
-
-import org.slf4j.Logger;
-import org.apache.james.core.MimeMessageCopyOnWriteProxy;
-import org.apache.james.core.MimeMessageSource;
-import org.apache.james.lifecycle.api.Disposable;
-import org.apache.james.lifecycle.api.LifecycleUtil;
-import org.apache.james.queue.api.ManageableMailQueue;
-import org.apache.mailet.Mail;
-
 /**
  * {@link ManageableMailQueue} implementation which use the fs to store {@link Mail}'s
- * 
- * On create of the {@link FileMailQueue} the {@link #init()} will get called. This takes care of 
+ * <p/>
+ * On create of the {@link FileMailQueue} the {@link #init()} will get called. This takes care of
  * loading the needed meta-data into memory for fast access.
  */
 public class FileMailQueue implements ManageableMailQueue {
+
     private final ConcurrentHashMap<String, FileItem> keyMappings = new ConcurrentHashMap<String, FileMailQueue.FileItem>();
     private final BlockingQueue<String> inmemoryQueue = new LinkedBlockingQueue<String>();
     private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
@@ -63,7 +64,7 @@ public class FileMailQueue implements Ma
     private final String queueDirName;
     private final File queueDir;
     private final Logger log;
-    
+
     private final boolean sync;
     private final static String MSG_EXTENSION = ".msg";
     private final static String OBJECT_EXTENSION = ".obj";
@@ -77,16 +78,16 @@ public class FileMailQueue implements Ma
         this.queueDirName = queueDir.getAbsolutePath();
         init();
     }
-    
+
     private void init() throws IOException {
-        
+
         for (int i = 1; i <= SPLITCOUNT; i++) {
 
             File qDir = new File(queueDir, Integer.toString(i));
             if (!qDir.exists() && !qDir.mkdirs()) {
-                throw new IOException("Unable to create queue directory " +  qDir);
+                throw new IOException("Unable to create queue directory " + qDir);
             }
-            
+
             String[] files = qDir.list(new FilenameFilter() {
                 @Override
                 public boolean accept(File dir, String name) {
@@ -156,7 +157,7 @@ public class FileMailQueue implements Ma
             }
         }
     }
-    
+
     @Override
     public void enQueue(final Mail mail, long delay, TimeUnit unit) throws MailQueueException {
         final String key = mail.getName() + "-" + COUNTER.incrementAndGet();
@@ -166,9 +167,9 @@ public class FileMailQueue implements Ma
         try {
             int i = (int) (Math.random() * SPLITCOUNT + 1);
 
-            
+
             String name = queueDirName + "/" + i + "/" + key;
-            
+
             final FileItem item = new FileItem(name + OBJECT_EXTENSION, name + MSG_EXTENSION);
             if (delay > 0) {
                 mail.setAttribute(NEXT_DELIVERY, System.currentTimeMillis() + unit.toMillis(delay));
@@ -179,33 +180,33 @@ public class FileMailQueue implements Ma
             oout.flush();
             if (sync) foout.getFD().sync();
             out = new FileOutputStream(item.getMessageFile());
-           
+
             mail.getMessage().writeTo(out);
             out.flush();
             if (sync) out.getFD().sync();
-            
+
             keyMappings.put(key, item);
 
             if (delay > 0) {
                 // The message should get delayed so schedule it for later
                 scheduler.schedule(new Runnable() {
-                    
+
                     @Override
                     public void run() {
-                        try {                           
+                        try {
                             inmemoryQueue.put(key);
 
                         } catch (InterruptedException e) {
                             Thread.currentThread().interrupt();
                             throw new RuntimeException("Unable to init", e);
-                        }                                
+                        }
                     }
                 }, delay, unit);
-            
+
             } else {
                 inmemoryQueue.put(key);
             }
-            
+
             //TODO: Think about exception handling in detail
         } catch (FileNotFoundException e) {
             throw new MailQueueException("Unable to enqueue mail", e);
@@ -255,7 +256,7 @@ public class FileMailQueue implements Ma
             String k = null;
             while (item == null) {
                 k = inmemoryQueue.take();
-                
+
                 item = keyMappings.get(k);
 
             }
@@ -292,7 +293,7 @@ public class FileMailQueue implements Ma
                         LifecycleUtil.dispose(mail);
                     }
                 };
-                
+
                 // TODO: Think about exception handling in detail
             } catch (FileNotFoundException e) {
                 throw new MailQueueException("Unable to dequeue", e);
@@ -302,7 +303,7 @@ public class FileMailQueue implements Ma
                 throw new MailQueueException("Unable to dequeue", e);
             } catch (MessagingException e) {
                 throw new MailQueueException("Unable to dequeue", e);
-                
+
             } finally {
                 if (oin != null) {
                     try {
@@ -319,7 +320,7 @@ public class FileMailQueue implements Ma
         }
     }
 
-    private final class FileMimeMessageSource extends MimeMessageSource implements Disposable{
+    private final class FileMimeMessageSource extends MimeMessageSource implements Disposable {
 
         private File file;
         private SharedFileInputStream in;
@@ -328,7 +329,7 @@ public class FileMailQueue implements Ma
             this.file = file;
             this.in = new SharedFileInputStream(file);
         }
-        
+
         @Override
         public String getSourceId() {
             return file.getAbsolutePath();
@@ -336,9 +337,10 @@ public class FileMailQueue implements Ma
 
         /**
          * Get an input stream to retrieve the data stored in the temporary file
-         * 
+         *
          * @return a <code>BufferedInputStream</code> containing the data
          */
+        @Override
         public InputStream getInputStream() throws IOException {
             return in.newStream(0, -1);
         }
@@ -348,19 +350,14 @@ public class FileMailQueue implements Ma
             return file.length();
         }
 
-        /**
-         */
+        @Override
         public void dispose() {
-            try {
-                in.close();
-            } catch (IOException e) {
-            }
-            
+            Closeables.closeQuietly(in);
             file = null;
         }
-        
+
     }
-    
+
     /**
      * Helper class which is used to reference the path to the object and msg file
      */
@@ -372,33 +369,32 @@ public class FileMailQueue implements Ma
             this.objectfile = objectfile;
             this.messagefile = messagefile;
         }
-        
-        
+
         public String getObjectFile() {
             return objectfile;
         }
-        
+
         public String getMessageFile() {
             return messagefile;
         }
-        
+
         public void delete() throws MailQueueException {
             File msgFile = new File(getMessageFile());
             File objectFile = new File(getObjectFile());
-            
+
             if (objectFile.exists()) {
                 if (!objectFile.delete()) {
                     throw new MailQueueException("Unable to delete mail");
-                } 
+                }
             }
             if (msgFile.exists()) {
                 if (!msgFile.delete()) {
                     log.debug("Remove of msg file for mail failed");
                 }
-                
+
             }
         }
-        
+
     }
 
     @Override
@@ -410,7 +406,7 @@ public class FileMailQueue implements Ma
     public long flush() throws MailQueueException {
         Iterator<String> keys = keyMappings.keySet().iterator();
         long i = 0;
-        while(keys.hasNext()) {
+        while (keys.hasNext()) {
             String key = keys.next();
             if (!inmemoryQueue.contains(key)) {
                 inmemoryQueue.add(key);
@@ -424,11 +420,11 @@ public class FileMailQueue implements Ma
     public long clear() throws MailQueueException {
         final Iterator<Entry<String, FileItem>> items = keyMappings.entrySet().iterator();
         long count = 0;
-        while(items.hasNext()) {
+        while (items.hasNext()) {
             Entry<String, FileItem> entry = items.next();
             FileItem item = entry.getValue();
             String key = entry.getKey();
-           
+
             item.delete();
             keyMappings.remove(key);
             count++;
@@ -439,23 +435,23 @@ public class FileMailQueue implements Ma
 
     /**
      * TODO: implement me
-     * 
+     *
      * @see ManageableMailQueue#remove(org.apache.james.queue.api.ManageableMailQueue.Type, String)
      */
     @Override
     public long remove(Type type, String value) throws MailQueueException {
         switch (type) {
-        case Name:
-            FileItem item = keyMappings.remove(value);
-            if (item != null) {
-                item.delete();
-                return 1;
-            } else {
-                return 0;
-            }
-            
-        default:
-            break;
+            case Name:
+                FileItem item = keyMappings.remove(value);
+                if (item != null) {
+                    item.delete();
+                    return 1;
+                } else {
+                    return 0;
+                }
+
+            default:
+                break;
         }
         throw new MailQueueException("Not supported yet");
 
@@ -479,7 +475,7 @@ public class FileMailQueue implements Ma
                     item = null;
                     return vitem;
                 } else {
-                    
+
                     throw new NoSuchElementException();
                 }
             }
@@ -534,5 +530,5 @@ public class FileMailQueue implements Ma
             }
         };
     }
-    
+
 }

Modified: james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java?rev=1452287&r1=1452286&r2=1452287&view=diff
==============================================================================
--- james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java (original)
+++ james/server/trunk/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java Mon Mar  4 13:11:35 2013
@@ -18,45 +18,44 @@
  ****************************************************************/
 package org.apache.james.queue.file;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.inject.Inject;
-
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.lifecycle.api.LogEnabled;
 import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.slf4j.Logger;
 
+import javax.inject.Inject;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * {@link MailQueueFactory} implementation which returns {@link FileMailQueue} instances
  */
-public class FileMailQueueFactory implements MailQueueFactory, LogEnabled{
+public class FileMailQueueFactory implements MailQueueFactory, LogEnabled {
 
     private final Map<String, MailQueue> queues = new HashMap<String, MailQueue>();
     private FileSystem fs;
     private Logger log;
     private boolean sync = true;
-    
+
     @Inject
     public void setFileSystem(FileSystem fs) {
         this.fs = fs;
     }
-    
+
     /**
      * If <code>true</code> the later created {@link FileMailQueue} will call <code>fsync</code> after each message {@link FileMailQueue#enQueue(org.apache.mailet.Mail)} call. This
      * is needed to be fully RFC conform but gives a performance penalty. If you are brave enough you man set it to <code>false</code>
-     * 
+     * <p/>
      * The default is <code>true</code>
-     * 
+     *
      * @param sync
      */
     public void setSync(boolean sync) {
         this.sync = sync;
     }
-    
+
     @Override
     public MailQueue getQueue(String name) {
         MailQueue queue = queues.get(name);

Copied: james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java (from r1452285, james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java?p2=james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java&p1=james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java&r1=1452285&r2=1452287&rev=1452287&view=diff
==============================================================================
--- james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java (original)
+++ james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java Mon Mar  4 13:11:35 2013
@@ -19,9 +19,6 @@
 package org.apache.james.queue.jms;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.broker.region.policy.PolicyEntry;
-import org.apache.activemq.broker.region.policy.PolicyMap;
 import org.apache.james.core.MailImpl;
 import org.apache.james.protocols.smtp.MailAddressException;
 import org.apache.james.queue.api.MailQueue.MailQueueItem;
@@ -29,7 +26,6 @@ import org.apache.james.queue.api.Manage
 import org.apache.james.queue.api.ManageableMailQueue.MailQueueIterator;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
-import org.junit.After;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -52,56 +48,36 @@ import java.util.Properties;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
-public class JMSMailQueueTest {
+/**
+ * Basic JMS test class. Extend this class and start the JMS broker in the super class,
+ * Create a queue and implement the getter and setter for the tests to run.
+ */
+public abstract class AbstractJMSMailQueueTest {
 
     protected final static String QUEUE_NAME = "test";
-    protected JMSMailQueue queue;
-    private BrokerService broker;
 
-    @Before
-    public void setUp() throws Exception {
-        broker = createBroker();
-        broker.start();
+    public abstract JMSMailQueue getQueue();
 
-        ConnectionFactory connectionFactory = createConnectionFactory();
-        queue = createQueue(connectionFactory, QUEUE_NAME);
-    }
+    public abstract void setQueue(JMSMailQueue queue);
 
     protected ActiveMQConnectionFactory createConnectionFactory() {
         return new ActiveMQConnectionFactory("vm://localhost?create=false");
     }
 
-    protected BrokerService createBroker() throws Exception {
-        BrokerService aBroker = new BrokerService();
-        aBroker.setPersistent(false);
-        aBroker.setUseJmx(false);
-        aBroker.addConnector("tcp://127.0.0.1:61616");
-
-        // Enable priority support
-        PolicyMap pMap = new PolicyMap();
-        PolicyEntry entry = new PolicyEntry();
-        entry.setPrioritizedMessages(true);
-        entry.setQueue(QUEUE_NAME);
-        pMap.setPolicyEntries(Arrays.asList(entry));
-        aBroker.setDestinationPolicy(pMap);
-
-        return aBroker;
-    }
-
     protected JMSMailQueue createQueue(ConnectionFactory factory, String queueName) {
-        Logger log = LoggerFactory.getLogger(JMSMailQueueTest.class);
+        Logger log = LoggerFactory.getLogger(AbstractJMSMailQueueTest.class);
         return new JMSMailQueue(factory, queueName, log);
     }
 
-    @After
-    public void tearDown() throws Exception {
-        if (broker != null) {
-            broker.stop();
-        }
+    @Before
+    public void setUp() throws Exception {
+        ConnectionFactory connectionFactory = createConnectionFactory();
+        setQueue(createQueue(connectionFactory, QUEUE_NAME));
     }
 
     @Test
     public void testFIFO() throws MessagingException, InterruptedException, IOException, MailAddressException {
+        final JMSMailQueue queue = getQueue();
         // should be empty
         assertEquals(0, queue.getSize());
 
@@ -111,7 +87,7 @@ public class JMSMailQueueTest {
         queue.enQueue(mail);
         queue.enQueue(mail2);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(2, queue.getSize());
 
@@ -119,7 +95,7 @@ public class JMSMailQueueTest {
         checkMail(mail, item.getMail());
         item.done(false);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         // ok we should get the same email again
         assertEquals(2, queue.getSize());
@@ -127,14 +103,14 @@ public class JMSMailQueueTest {
         checkMail(mail, item2.getMail());
         item2.done(true);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(1, queue.getSize());
         MailQueueItem item3 = queue.deQueue();
         checkMail(mail2, item3.getMail());
         item3.done(true);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         // should be empty
         assertEquals(0, queue.getSize());
@@ -142,6 +118,7 @@ public class JMSMailQueueTest {
 
     @Test
     public void testDelayedDeQueue() throws MessagingException, InterruptedException, IOException, MailAddressException {
+        final JMSMailQueue queue = getQueue();
         // should be empty
         assertEquals(0, queue.getSize());
 
@@ -152,7 +129,7 @@ public class JMSMailQueueTest {
         queue.enQueue(mail, 3, TimeUnit.SECONDS);
         queue.enQueue(mail2);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(2, queue.getSize());
 
@@ -161,7 +138,7 @@ public class JMSMailQueueTest {
         checkMail(mail2, item.getMail());
         item.done(true);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(1, queue.getSize());
         MailQueueItem item2 = queue.deQueue();
@@ -169,7 +146,7 @@ public class JMSMailQueueTest {
         checkMail(mail, item2.getMail());
         item2.done(true);
         assertTrue(dequeueTime >= 2000);
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         // should be empty
         assertEquals(0, queue.getSize());
@@ -177,6 +154,7 @@ public class JMSMailQueueTest {
 
     @Test
     public void testFlush() throws MessagingException, InterruptedException, IOException, MailAddressException {
+        final JMSMailQueue queue = getQueue();
         // should be empty
         assertEquals(0, queue.getSize());
 
@@ -185,7 +163,7 @@ public class JMSMailQueueTest {
         long enqueueTime = System.currentTimeMillis();
         queue.enQueue(mail, 30, TimeUnit.SECONDS);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(1, queue.getSize());
 
@@ -195,7 +173,7 @@ public class JMSMailQueueTest {
             public void run() {
                 try {
                     // wait for 2 seconds then flush the queue
-                    Thread.sleep(4000);
+                    TimeUnit.MILLISECONDS.sleep(4000);
                     assertEquals(1, queue.flush());
                 } catch (Exception e) {
                     throw new RuntimeException(e);
@@ -220,6 +198,8 @@ public class JMSMailQueueTest {
 
     @Test
     public void testRemoveWithRecipient() throws MessagingException, InterruptedException, MailAddressException {
+        final JMSMailQueue queue = getQueue();
+
         assertEquals(0, queue.getSize());
 
         Mail mail = createMail();
@@ -231,12 +211,12 @@ public class JMSMailQueueTest {
         queue.enQueue(mail);
         queue.enQueue(mail2);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(2, queue.getSize());
         assertEquals(1, queue.remove(ManageableMailQueue.Type.Recipient, "remove@me1"));
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
         assertEquals(1, queue.getSize());
 
         assertEquals(1, queue.remove(ManageableMailQueue.Type.Recipient, "remove@me2"));
@@ -246,6 +226,7 @@ public class JMSMailQueueTest {
 
     @Test
     public void testRemoveWithSender() throws MessagingException, InterruptedException, MailAddressException {
+        final JMSMailQueue queue = getQueue();
         assertEquals(0, queue.getSize());
 
         MailImpl mail = createMail();
@@ -257,12 +238,12 @@ public class JMSMailQueueTest {
         queue.enQueue(mail);
         queue.enQueue(mail2);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(2, queue.getSize());
         assertEquals(1, queue.remove(ManageableMailQueue.Type.Sender, "remove@me1"));
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
         assertEquals(1, queue.getSize());
 
         assertEquals(1, queue.remove(ManageableMailQueue.Type.Sender, "remove@me2"));
@@ -272,6 +253,7 @@ public class JMSMailQueueTest {
 
     @Test
     public void testRemoveWithName() throws MessagingException, InterruptedException, MailAddressException {
+        final JMSMailQueue queue = getQueue();
         assertEquals(0, queue.getSize());
 
         MailImpl mail = createMail();
@@ -283,12 +265,12 @@ public class JMSMailQueueTest {
         queue.enQueue(mail);
         queue.enQueue(mail2);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(2, queue.getSize());
         assertEquals(1, queue.remove(ManageableMailQueue.Type.Name, "remove@me1"));
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
         assertEquals(1, queue.getSize());
 
         assertEquals(1, queue.remove(ManageableMailQueue.Type.Name, "remove@me2"));
@@ -348,6 +330,7 @@ public class JMSMailQueueTest {
 
     @Test
     public void testPrioritySupport() throws InterruptedException, MessagingException, IOException, MailAddressException {
+        final JMSMailQueue queue = getQueue();
         // should be empty
         assertEquals(0, queue.getSize());
 
@@ -358,7 +341,7 @@ public class JMSMailQueueTest {
         queue.enQueue(mail);
         queue.enQueue(mail2);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(2, queue.getSize());
 
@@ -368,14 +351,14 @@ public class JMSMailQueueTest {
         checkMail(mail2, item2.getMail());
         item2.done(true);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(1, queue.getSize());
         MailQueueItem item3 = queue.deQueue();
         checkMail(mail, item3.getMail());
         item3.done(true);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         // should be empty
         assertEquals(0, queue.getSize());
@@ -383,6 +366,7 @@ public class JMSMailQueueTest {
 
     @Test
     public void testBrowse() throws MessagingException, InterruptedException, IOException, MailAddressException {
+        final JMSMailQueue queue = getQueue();
         // should be empty
         assertEquals(0, queue.getSize());
 
@@ -392,7 +376,7 @@ public class JMSMailQueueTest {
         queue.enQueue(mail);
         queue.enQueue(mail2);
 
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(2, queue.getSize());
 
@@ -406,7 +390,7 @@ public class JMSMailQueueTest {
         MailQueueItem item2 = queue.deQueue();
         checkMail(mail, item2.getMail());
         item2.done(true);
-        Thread.sleep(200);
+        TimeUnit.MILLISECONDS.sleep(200);
 
         assertEquals(1, queue.getSize());
         it = queue.browse();

Modified: james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java?rev=1452287&r1=1452286&r2=1452287&view=diff
==============================================================================
--- james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java (original)
+++ james/server/trunk/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java Mon Mar  4 13:11:35 2013
@@ -1,77 +1,32 @@
-/****************************************************************
- * 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.james.queue.jms;
 
-import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.broker.region.policy.PolicyEntry;
 import org.apache.activemq.broker.region.policy.PolicyMap;
-import org.apache.james.core.MailImpl;
-import org.apache.james.protocols.smtp.MailAddressException;
-import org.apache.james.queue.api.MailQueue.MailQueueItem;
-import org.apache.james.queue.api.ManageableMailQueue;
-import org.apache.james.queue.api.ManageableMailQueue.MailQueueIterator;
-import org.apache.mailet.Mail;
-import org.apache.mailet.MailAddress;
-import org.junit.After;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.jms.ConnectionFactory;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.internet.MimeMessage;
-import java.io.IOException;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
 import java.util.Arrays;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
-
-public class JMSMailQueueTest {
-
-    protected final static String QUEUE_NAME = "test";
-    protected JMSMailQueue queue;
-    private BrokerService broker;
 
-    @Before
-    public void setUp() throws Exception {
+public class JMSMailQueueTest extends AbstractJMSMailQueueTest {
+
+    private JMSMailQueue queue;
+    private static BrokerService broker;
+
+    @BeforeClass
+    public static void setUpBroker() throws Exception {
         broker = createBroker();
         broker.start();
-
-        ConnectionFactory connectionFactory = createConnectionFactory();
-        queue = createQueue(connectionFactory, QUEUE_NAME);
     }
 
-    protected ActiveMQConnectionFactory createConnectionFactory() {
-        return new ActiveMQConnectionFactory("vm://localhost?create=false");
+    @AfterClass
+    public static void tearDownBroker() throws Exception {
+        if (broker != null) {
+            broker.stop();
+        }
     }
 
-    protected BrokerService createBroker() throws Exception {
+    protected static BrokerService createBroker() throws Exception {
         BrokerService aBroker = new BrokerService();
         aBroker.setPersistent(false);
         aBroker.setUseJmx(false);
@@ -88,330 +43,13 @@ public class JMSMailQueueTest {
         return aBroker;
     }
 
-    protected JMSMailQueue createQueue(ConnectionFactory factory, String queueName) {
-        Logger log = LoggerFactory.getLogger(JMSMailQueueTest.class);
-        return new JMSMailQueue(factory, queueName, log);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        if (broker != null) {
-            broker.stop();
-        }
-    }
-
-    @Test
-    public void testFIFO() throws MessagingException, InterruptedException, IOException, MailAddressException {
-        // should be empty
-        assertEquals(0, queue.getSize());
-
-        Mail mail = createMail();
-        Mail mail2 = createMail();
-
-        queue.enQueue(mail);
-        queue.enQueue(mail2);
-
-        Thread.sleep(200);
-
-        assertEquals(2, queue.getSize());
-
-        MailQueueItem item = queue.deQueue();
-        checkMail(mail, item.getMail());
-        item.done(false);
-
-        Thread.sleep(200);
-
-        // ok we should get the same email again
-        assertEquals(2, queue.getSize());
-        MailQueueItem item2 = queue.deQueue();
-        checkMail(mail, item2.getMail());
-        item2.done(true);
-
-        Thread.sleep(200);
-
-        assertEquals(1, queue.getSize());
-        MailQueueItem item3 = queue.deQueue();
-        checkMail(mail2, item3.getMail());
-        item3.done(true);
-
-        Thread.sleep(200);
-
-        // should be empty
-        assertEquals(0, queue.getSize());
-    }
-
-    @Test
-    public void testDelayedDeQueue() throws MessagingException, InterruptedException, IOException, MailAddressException {
-        // should be empty
-        assertEquals(0, queue.getSize());
-
-        Mail mail = createMail();
-        Mail mail2 = createMail();
-
-        long enqueueTime = System.currentTimeMillis();
-        queue.enQueue(mail, 3, TimeUnit.SECONDS);
-        queue.enQueue(mail2);
-
-        Thread.sleep(200);
-
-        assertEquals(2, queue.getSize());
-
-        // as we enqueued the mail with delay we should get mail2 first
-        MailQueueItem item = queue.deQueue();
-        checkMail(mail2, item.getMail());
-        item.done(true);
-
-        Thread.sleep(200);
-
-        assertEquals(1, queue.getSize());
-        MailQueueItem item2 = queue.deQueue();
-        long dequeueTime = System.currentTimeMillis() - enqueueTime;
-        checkMail(mail, item2.getMail());
-        item2.done(true);
-        assertTrue(dequeueTime >= 2000);
-        Thread.sleep(200);
-
-        // should be empty
-        assertEquals(0, queue.getSize());
-    }
-
-    @Test
-    public void testFlush() throws MessagingException, InterruptedException, IOException, MailAddressException {
-        // should be empty
-        assertEquals(0, queue.getSize());
-
-        final Mail mail = createMail();
-
-        long enqueueTime = System.currentTimeMillis();
-        queue.enQueue(mail, 30, TimeUnit.SECONDS);
-
-        Thread.sleep(200);
-
-        assertEquals(1, queue.getSize());
-
-        Thread flushThread = new Thread(new Runnable() {
-
-            @Override
-            public void run() {
-                try {
-                    // wait for 2 seconds then flush the queue
-                    Thread.sleep(4000);
-                    assertEquals(1, queue.flush());
-                } catch (Exception e) {
-                    throw new RuntimeException(e);
-                }
-
-            }
-        });
-        flushThread.start();
-
-        // this will block until flush is called
-        MailQueueItem item = queue.deQueue();
-        checkMail(mail, item.getMail());
-        item.done(true);
-
-        long dequeueTime = System.currentTimeMillis() - enqueueTime;
-
-        assertEquals(0, queue.getSize());
-
-        // check if the flush kicked in
-        assertTrue(dequeueTime < 30 * 1000);
-    }
-
-    @Test
-    public void testRemoveWithRecipient() throws MessagingException, InterruptedException, MailAddressException {
-        assertEquals(0, queue.getSize());
-
-        Mail mail = createMail();
-        mail.setRecipients(Arrays.asList(new MailAddress("remove@me1")));
-
-        Mail mail2 = createMail();
-        mail2.setRecipients(Arrays.asList(new MailAddress("remove@me2")));
-
-        queue.enQueue(mail);
-        queue.enQueue(mail2);
-
-        Thread.sleep(200);
-
-        assertEquals(2, queue.getSize());
-        assertEquals(1, queue.remove(ManageableMailQueue.Type.Recipient, "remove@me1"));
-
-        Thread.sleep(200);
-        assertEquals(1, queue.getSize());
-
-        assertEquals(1, queue.remove(ManageableMailQueue.Type.Recipient, "remove@me2"));
-        assertEquals(0, queue.getSize());
-
-    }
-
-    @Test
-    public void testRemoveWithSender() throws MessagingException, InterruptedException, MailAddressException {
-        assertEquals(0, queue.getSize());
-
-        MailImpl mail = createMail();
-        mail.setSender(new MailAddress("remove@me1"));
-
-        MailImpl mail2 = createMail();
-        mail2.setSender(new MailAddress("remove@me2"));
-
-        queue.enQueue(mail);
-        queue.enQueue(mail2);
-
-        Thread.sleep(200);
-
-        assertEquals(2, queue.getSize());
-        assertEquals(1, queue.remove(ManageableMailQueue.Type.Sender, "remove@me1"));
-
-        Thread.sleep(200);
-        assertEquals(1, queue.getSize());
-
-        assertEquals(1, queue.remove(ManageableMailQueue.Type.Sender, "remove@me2"));
-        assertEquals(0, queue.getSize());
-
-    }
-
-    @Test
-    public void testRemoveWithName() throws MessagingException, InterruptedException, MailAddressException {
-        assertEquals(0, queue.getSize());
-
-        MailImpl mail = createMail();
-        mail.setName("remove@me1");
-
-        MailImpl mail2 = createMail();
-        mail2.setName("remove@me2");
-
-        queue.enQueue(mail);
-        queue.enQueue(mail2);
-
-        Thread.sleep(200);
-
-        assertEquals(2, queue.getSize());
-        assertEquals(1, queue.remove(ManageableMailQueue.Type.Name, "remove@me1"));
-
-        Thread.sleep(200);
-        assertEquals(1, queue.getSize());
-
-        assertEquals(1, queue.remove(ManageableMailQueue.Type.Name, "remove@me2"));
-        assertEquals(0, queue.getSize());
-
-    }
-
-    protected MailImpl createMail() throws MessagingException {
-        MailImpl mail = new MailImpl();
-        mail.setName("" + System.currentTimeMillis());
-        mail.setAttribute("test1", System.currentTimeMillis());
-        mail.setErrorMessage(UUID.randomUUID().toString());
-        mail.setLastUpdated(new Date());
-        mail.setRecipients(Arrays.asList(new MailAddress("test@test"), new MailAddress("test@test2")));
-        mail.setSender(new MailAddress("sender@senderdomain"));
-
-        MimeMessage message = new MimeMessage(Session.getInstance(new Properties()));
-        message.setText("test");
-        message.setHeader("testheader", "testvalie");
-        message.saveChanges();
-        mail.setMessage(message);
-        return mail;
-
-    }
-
-    @SuppressWarnings("unchecked")
-    protected void checkMail(Mail enqueuedMail, Mail dequeuedMail) throws MessagingException, IOException {
-        assertEquals(enqueuedMail.getErrorMessage(), dequeuedMail.getErrorMessage());
-        assertEquals(enqueuedMail.getMessageSize(), dequeuedMail.getMessageSize());
-        assertEquals(enqueuedMail.getName(), dequeuedMail.getName());
-        assertEquals(enqueuedMail.getRemoteAddr(), dequeuedMail.getRemoteAddr());
-        assertEquals(enqueuedMail.getState(), dequeuedMail.getState());
-        assertEquals(enqueuedMail.getLastUpdated(), dequeuedMail.getLastUpdated());
-        assertEquals(enqueuedMail.getRemoteHost(), dequeuedMail.getRemoteHost());
-        assertEquals(enqueuedMail.getSender(), dequeuedMail.getSender());
-
-        assertEquals(enqueuedMail.getRecipients().size(), dequeuedMail.getRecipients().size());
-        Iterator<String> attributes = enqueuedMail.getAttributeNames();
-        while (attributes.hasNext()) {
-            String name = attributes.next();
-            assertNotNull(dequeuedMail.getAttribute(name));
-        }
-
-        MimeMessage enqueuedMsg = enqueuedMail.getMessage();
-        MimeMessage dequeuedMsg = dequeuedMail.getMessage();
-        Enumeration<String> enQueuedHeaders = enqueuedMsg.getAllHeaderLines();
-        Enumeration<String> deQueuedHeaders = dequeuedMsg.getAllHeaderLines();
-        while (enQueuedHeaders.hasMoreElements()) {
-            assertEquals(enQueuedHeaders.nextElement(), deQueuedHeaders.nextElement());
-
-        }
-        assertFalse(deQueuedHeaders.hasMoreElements());
-
-        assertEquals(enqueuedMsg.getContent(), dequeuedMsg.getContent());
-
-    }
-
-    @Test
-    public void testPrioritySupport() throws InterruptedException, MessagingException, IOException, MailAddressException {
-        // should be empty
-        assertEquals(0, queue.getSize());
-
-        Mail mail = createMail();
-        Mail mail2 = createMail();
-        mail2.setAttribute(JMSMailQueue.MAIL_PRIORITY, JMSMailQueue.HIGH_PRIORITY);
-
-        queue.enQueue(mail);
-        queue.enQueue(mail2);
-
-        Thread.sleep(200);
-
-        assertEquals(2, queue.getSize());
-
-        // we should get mail2 first as it has a higher priority set
-        assertEquals(2, queue.getSize());
-        MailQueueItem item2 = queue.deQueue();
-        checkMail(mail2, item2.getMail());
-        item2.done(true);
-
-        Thread.sleep(200);
-
-        assertEquals(1, queue.getSize());
-        MailQueueItem item3 = queue.deQueue();
-        checkMail(mail, item3.getMail());
-        item3.done(true);
-
-        Thread.sleep(200);
-
-        // should be empty
-        assertEquals(0, queue.getSize());
+    @Override
+    public JMSMailQueue getQueue() {
+        return queue;
     }
 
-    @Test
-    public void testBrowse() throws MessagingException, InterruptedException, IOException, MailAddressException {
-        // should be empty
-        assertEquals(0, queue.getSize());
-
-        Mail mail = createMail();
-        Mail mail2 = createMail();
-
-        queue.enQueue(mail);
-        queue.enQueue(mail2);
-
-        Thread.sleep(200);
-
-        assertEquals(2, queue.getSize());
-
-        MailQueueIterator it = queue.browse();
-        checkMail(mail, it.next().getMail());
-        checkMail(mail2, it.next().getMail());
-        assertFalse(it.hasNext());
-        it.close();
-
-        assertEquals(2, queue.getSize());
-        MailQueueItem item2 = queue.deQueue();
-        checkMail(mail, item2.getMail());
-        item2.done(true);
-        Thread.sleep(200);
-
-        assertEquals(1, queue.getSize());
-        it = queue.browse();
-        checkMail(mail2, it.next().getMail());
-        assertFalse(it.hasNext());
-        it.close();
+    @Override
+    public void setQueue(JMSMailQueue queue) {
+        this.queue = queue;
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org