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 no...@apache.org on 2010/12/23 19:04:55 UTC

svn commit: r1052342 - in /james/server/trunk: ./ queue-activemq/ queue-activemq/src/main/java/org/apache/james/queue/activemq/ queue-activemq/src/test/ queue-activemq/src/test/java/ queue-activemq/src/test/java/org/ queue-activemq/src/test/java/org/ap...

Author: norman
Date: Thu Dec 23 18:04:54 2010
New Revision: 1052342

URL: http://svn.apache.org/viewvc?rev=1052342&view=rev
Log:
Start to write unit tests for JMSMailQueue and ActiveMQMailQueue

Added:
    james/server/trunk/queue-activemq/src/test/
    james/server/trunk/queue-activemq/src/test/java/
    james/server/trunk/queue-activemq/src/test/java/org/
    james/server/trunk/queue-activemq/src/test/java/org/apache/
    james/server/trunk/queue-activemq/src/test/java/org/apache/james/
    james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/
    james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/
    james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
    james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
    james/server/trunk/queue-jms/src/test/
    james/server/trunk/queue-jms/src/test/java/
    james/server/trunk/queue-jms/src/test/java/org/
    james/server/trunk/queue-jms/src/test/java/org/apache/
    james/server/trunk/queue-jms/src/test/java/org/apache/james/
    james/server/trunk/queue-jms/src/test/java/org/apache/james/queue/
    james/server/trunk/queue-jms/src/test/java/org/apache/james/queue/jms/
    james/server/trunk/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
Modified:
    james/server/trunk/pom.xml
    james/server/trunk/queue-activemq/pom.xml
    james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
    james/server/trunk/queue-jms/pom.xml

Modified: james/server/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/pom.xml?rev=1052342&r1=1052341&r2=1052342&view=diff
==============================================================================
--- james/server/trunk/pom.xml (original)
+++ james/server/trunk/pom.xml Thu Dec 23 18:04:54 2010
@@ -303,6 +303,13 @@
     </dependency>
     <dependency>
       <groupId>org.apache.james</groupId>
+      <artifactId>james-server-queue-jms</artifactId>
+      <version>${project.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.james</groupId>
       <artifactId>james-server-queue-activemq</artifactId>
       <version>${project.version}</version>
     </dependency>

Modified: james/server/trunk/queue-activemq/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/pom.xml?rev=1052342&r1=1052341&r2=1052342&view=diff
==============================================================================
--- james/server/trunk/queue-activemq/pom.xml (original)
+++ james/server/trunk/queue-activemq/pom.xml Thu Dec 23 18:04:54 2010
@@ -95,5 +95,18 @@
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging-api</artifactId>
     </dependency> 
+    
+    <!-- testing -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>james-server-queue-jms</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>

Modified: james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java?rev=1052342&r1=1052341&r2=1052342&view=diff
==============================================================================
--- james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java (original)
+++ james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java Thu Dec 23 18:04:54 2010
@@ -333,7 +333,7 @@ public class ActiveMQMailQueue extends J
             msg.setJMSReplyTo(replyTo);
             producer.send(query, msg);
             MapMessage reply = (MapMessage) consumer.receive(2000);
-            if (reply.itemExists("size")) {
+            if (reply != null && reply.itemExists("size")) {
                 try {
                     size = reply.getLong("size");
                     return size;

Added: james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java?rev=1052342&view=auto
==============================================================================
--- james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java (added)
+++ james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java Thu Dec 23 18:04:54 2010
@@ -0,0 +1,99 @@
+/****************************************************************
+ * 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.activemq;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.jms.ConnectionFactory;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.commons.logging.impl.SimpleLog;
+import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.queue.jms.JMSMailQueue;
+
+public class ActiveMQMailQueueBlobTest extends ActiveMQMailQueueTest{
+    public final static String BASE_DIR = "file://target/james-test";
+
+    private MyFileSystem fs;
+    
+    protected ActiveMQConnectionFactory createConnectionFactory() {
+        ActiveMQConnectionFactory factory =  new ActiveMQConnectionFactory("vm://localhost?create=false");
+        
+        FileSystemBlobTransferPolicy policy = new FileSystemBlobTransferPolicy();
+        policy.setFileSystem(fs);
+        policy.setDefaultUploadUrl(BASE_DIR);
+        factory.setBlobTransferPolicy(policy);
+        
+        return factory;
+    }
+    
+    @Override
+    public void setUp() throws Exception {
+        fs = new MyFileSystem();
+        
+        super.setUp();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        if (fs != null) {
+            fs.destroy();
+        }
+    }
+
+    @Override
+    protected JMSMailQueue createQueue(ConnectionFactory factory) {
+        SimpleLog log = new SimpleLog("MockLog");
+        log.setLevel(SimpleLog.LOG_LEVEL_DEBUG);
+        ActiveMQMailQueue queue = new ActiveMQMailQueue(factory, "test", true,log);
+        return queue;
+    }
+
+    private final class MyFileSystem implements FileSystem {
+
+        
+        public InputStream getResource(String url) throws IOException {
+            return null;
+        }
+
+        public File getFile(String fileURL) throws FileNotFoundException {
+            if (fileURL.startsWith("file://")) {
+                return new File(fileURL.substring("file://".length()));
+
+            } else if (fileURL.startsWith("file:/")) {
+                return new File(fileURL.substring("file:".length()));
+
+            }
+            throw new FileNotFoundException();
+        }
+
+        public File getBasedir() throws FileNotFoundException {
+            throw new FileNotFoundException();
+        }
+        
+        public void destroy() throws FileNotFoundException {
+            getFile(BASE_DIR).delete();
+        }
+    }
+
+}

Added: james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java?rev=1052342&view=auto
==============================================================================
--- james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java (added)
+++ james/server/trunk/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java Thu Dec 23 18:04:54 2010
@@ -0,0 +1,48 @@
+/****************************************************************
+ * 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.activemq;
+
+import javax.jms.ConnectionFactory;
+
+import org.apache.activemq.broker.BrokerPlugin;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.plugin.StatisticsBrokerPlugin;
+import org.apache.commons.logging.impl.SimpleLog;
+import org.apache.james.queue.jms.JMSMailQueue;
+import org.apache.james.queue.jms.JMSMailQueueTest;
+
+public class ActiveMQMailQueueTest extends JMSMailQueueTest{
+
+
+    @Override
+    protected BrokerService createBroker() throws Exception {
+        BrokerService broker =  super.createBroker();
+        broker.setPlugins(new BrokerPlugin[] {new StatisticsBrokerPlugin()});
+        return broker;
+    }
+
+    @Override
+    protected JMSMailQueue createQueue(ConnectionFactory factory) {
+        SimpleLog log = new SimpleLog("MockLog");
+        log.setLevel(SimpleLog.LOG_LEVEL_DEBUG);
+        ActiveMQMailQueue queue = new ActiveMQMailQueue(factory, "test", false,log);
+        return queue;
+    }
+
+}

Modified: james/server/trunk/queue-jms/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/queue-jms/pom.xml?rev=1052342&r1=1052341&r2=1052342&view=diff
==============================================================================
--- james/server/trunk/queue-jms/pom.xml (original)
+++ james/server/trunk/queue-jms/pom.xml Thu Dec 23 18:04:54 2010
@@ -60,5 +60,16 @@
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-annotation_1.0_spec</artifactId>
     </dependency>
+    
+    <!-- test dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.activemq</groupId>
+      <artifactId>activemq-core</artifactId>
+    </dependency>
   </dependencies>
 </project>

Added: james/server/trunk/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java?rev=1052342&view=auto
==============================================================================
--- james/server/trunk/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java (added)
+++ james/server/trunk/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java Thu Dec 23 18:04:54 2010
@@ -0,0 +1,179 @@
+/****************************************************************
+ * 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 java.io.IOException;
+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 javax.jms.ConnectionFactory;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.commons.logging.impl.SimpleLog;
+import org.apache.james.core.MailImpl;
+import org.apache.james.queue.api.MailQueue.MailQueueItem;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+
+import junit.framework.TestCase;
+
+public class JMSMailQueueTest extends TestCase{
+    private JMSMailQueue queue;
+    private BrokerService broker;
+    
+    public void setUp() throws Exception{
+        broker = createBroker();
+        broker.start();
+        
+        ConnectionFactory connectionFactory = createConnectionFactory();
+        queue = createQueue(connectionFactory);
+        
+        super.setUp();
+        
+    }
+
+    protected ActiveMQConnectionFactory createConnectionFactory() {
+        return new ActiveMQConnectionFactory("vm://localhost?create=false");
+    }
+    protected BrokerService createBroker() throws Exception {
+        BrokerService broker = new BrokerService();
+        broker.setPersistent(false);
+        broker.setUseJmx(false);
+        broker.addConnector("tcp://127.0.0.1:61616");
+        return broker;
+        
+    }
+    
+    protected JMSMailQueue createQueue(ConnectionFactory factory) {
+        SimpleLog log = new SimpleLog("MockLog");
+        log.setLevel(SimpleLog.LOG_LEVEL_DEBUG);
+        JMSMailQueue queue = new JMSMailQueue(factory, "testqueue", log );
+        return queue;
+    }
+    
+    
+
+    @Override
+    protected void tearDown() throws Exception {
+        if (broker != null) {
+            broker.stop();
+        }
+    }
+
+    public void testFIFO() throws MessagingException, InterruptedException, IOException {
+        // 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());
+    }
+    
+    private Mail 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")
+    private 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());
+
+
+    }
+}



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