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