JAMES-2285 Rely on MemoryMailQueue in SMTPServerTest

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ad7e51d9
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ad7e51d9
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ad7e51d9

Branch: refs/heads/master
Commit: ad7e51d92cb500e6a27dc73ce842cf61cd513ab9
Parents: 368a5d8
Author: benwa <[email protected]>
Authored: Thu Jan 11 14:18:39 2018 +0700
Committer: benwa <[email protected]>
Committed: Thu Jan 18 09:48:49 2018 +0700

----------------------------------------------------------------------
 server/protocols/protocols-smtp/pom.xml         |   5 +
 .../apache/james/smtpserver/SMTPServerTest.java |  18 +--
 .../james/queue/api/mock/MockMailQueue.java     | 150 -------------------
 .../queue/api/mock/MockMailQueueFactory.java    |  45 ------
 .../queue/memory/MemoryMailQueueFactory.java    |  13 +-
 .../james/queue/memory/MemoryMailQueueTest.java |  47 ++++++
 6 files changed, 71 insertions(+), 207 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ad7e51d9/server/protocols/protocols-smtp/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/pom.xml 
b/server/protocols/protocols-smtp/pom.xml
index a18c272..13267c2 100644
--- a/server/protocols/protocols-smtp/pom.xml
+++ b/server/protocols/protocols-smtp/pom.xml
@@ -117,6 +117,11 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-queue-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-queue-api</artifactId>
             <type>test-jar</type>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad7e51d9/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
 
b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
index 3b2d869..3453882 100644
--- 
a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
+++ 
b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
@@ -39,7 +39,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
 import org.apache.commons.net.ProtocolCommandEvent;
@@ -59,8 +58,8 @@ import 
org.apache.james.protocols.api.utils.ProtocolServerUtils;
 import org.apache.james.protocols.lib.mock.MockProtocolHandlerLoader;
 import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
 import org.apache.james.queue.api.MailQueueFactory;
-import org.apache.james.queue.api.mock.MockMailQueue;
-import org.apache.james.queue.api.mock.MockMailQueueFactory;
+import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
+import org.apache.james.queue.memory.MemoryMailQueueFactory;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.james.rrt.lib.Mappings;
@@ -178,8 +177,8 @@ public class SMTPServerTest {
     protected MockFileSystem fileSystem;
     protected DNSService dnsService;
     protected MockProtocolHandlerLoader chain;
-    protected MockMailQueueFactory queueFactory;
-    protected MockMailQueue queue;
+    protected MemoryMailQueueFactory queueFactory;
+    protected MemoryMailQueueFactory.MemoryMailQueue queue;
 
     private SMTPServer smtpServer;
 
@@ -308,8 +307,8 @@ public class SMTPServerTest {
             }
         });
     
-        queueFactory = new MockMailQueueFactory();
-        queue = (MockMailQueue) 
queueFactory.getQueue(MockMailQueueFactory.SPOOL);
+        queueFactory = new MemoryMailQueueFactory(new 
RawMailQueueItemDecoratorFactory());
+        queue = (MemoryMailQueueFactory.MemoryMailQueue) 
queueFactory.getQueue(MailQueueFactory.SPOOL);
         chain.put("mailqueuefactory", MailQueueFactory.class, queueFactory);
         chain.put("domainlist", DomainList.class, new SimpleDomainList() {
     
@@ -393,11 +392,10 @@ public class SMTPServerTest {
 
     @After
     public void tearDown() throws Exception {
-        queue.clear();
         smtpServer.destroy();
     }
 
-    public void verifyLastMail(String sender, String recipient, MimeMessage 
msg) throws IOException, MessagingException {
+    public void verifyLastMail(String sender, String recipient, MimeMessage 
msg) throws Exception {
         Mail mailData = queue.getLastMail();
         assertThat(mailData)
             .as("mail received by mail server")
@@ -818,7 +816,7 @@ public class SMTPServerTest {
         doTestHeloEhloResolv("helo");
     }
 
-    private void doTestHeloEhloResolv(String heloCommand) throws IOException {
+    private void doTestHeloEhloResolv(String heloCommand) throws Exception {
         SMTPClient smtpProtocol = new SMTPClient();
         InetSocketAddress bindedAddress = new 
ProtocolServerUtils(smtpServer).retrieveBindedAddress();
         smtpProtocol.connect(bindedAddress.getAddress().getHostAddress(), 
bindedAddress.getPort());

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad7e51d9/server/queue/queue-api/src/test/java/org/apache/james/queue/api/mock/MockMailQueue.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/mock/MockMailQueue.java
 
b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/mock/MockMailQueue.java
deleted file mode 100644
index 3bdbcdc..0000000
--- 
a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/mock/MockMailQueue.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.queue.api.mock;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Random;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import javax.mail.MessagingException;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.james.queue.api.MailQueue;
-import org.apache.james.server.core.MailImpl;
-import org.apache.mailet.Mail;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class MockMailQueue implements MailQueue {
-
-    private static final Logger log = 
LoggerFactory.getLogger(MockMailQueue.class.getName());
-
-    private final LinkedBlockingQueue<Mail> queue = new 
LinkedBlockingQueue<>();
-    private boolean throwException;
-    private final ScheduledExecutorService scheduler = 
Executors.newScheduledThreadPool(1);
-
-    /**
-     * Throw an {@link MailQueueException} on next operation
-     */
-    public void throwExceptionOnNextOperation() {
-        this.throwException = true;
-    }
-
-    @Override
-    public MailQueueItem deQueue() throws MailQueueException {
-        if (throwException) {
-            throwException = false;
-            throw new MailQueueException("Mock");
-        }
-
-        try {
-            final Mail mail = queue.take();
-            return new MailQueueItem() {
-
-                @Override
-                public Mail getMail() {
-                    return mail;
-                }
-
-                @Override
-                public void done(boolean success) throws MailQueueException {
-                    // do nothing here
-                }
-            };
-
-        } catch (InterruptedException e) {
-            log.error("", e);
-            throw new MailQueueException("Mock", e);
-        }
-    }
-
-    private Mail cloneMail(Mail mail) {
-        ByteArrayOutputStream baos = null;
-        ByteArrayInputStream bais = null;
-        try {
-            baos = new ByteArrayOutputStream();
-            ((MailImpl) mail).writeMessageTo(baos);
-            if (log.isTraceEnabled()) {
-                log.trace("mimemessage stream: >>>" + new 
String(baos.toByteArray()) + "<<<");
-            }
-            bais = new ByteArrayInputStream(baos.toByteArray());
-            return new MailImpl("MockMailCopy" + new Random().nextLong(),
-                    mail.getSender(), mail.getRecipients(), bais);
-        } catch (MessagingException | IOException ex) {
-            log.error("Exception caught", ex);
-            throw new RuntimeException(ex);
-        } finally {
-            IOUtils.closeQuietly(bais);
-            IOUtils.closeQuietly(baos);
-        }
-    }
-
-    @Override
-    public void enQueue(final Mail mail, long delay, TimeUnit unit) throws 
MailQueueException {
-        if (throwException) {
-            throwException = false;
-            throw new MailQueueException("Mock");
-        }
-
-        scheduler.schedule(() -> {
-            try {
-                queue.put(MockMailQueue.this.cloneMail(mail));
-            } catch (InterruptedException e) {
-                log.error("", e);
-                throw new RuntimeException("Mock", e);
-            }
-        }, delay, unit);
-    }
-
-    @Override
-    public void enQueue(Mail mail) throws MailQueueException {
-        if (throwException) {
-            throwException = false;
-            throw new MailQueueException("Mock");
-        }
-
-        try {
-            queue.put(cloneMail(mail));
-        } catch (InterruptedException e) {
-            log.error("", e);
-            throw new MailQueueException("Mock", e);
-        }
-    }
-
-    public Mail getLastMail() {
-        Iterator<Mail> it = queue.iterator();
-
-        Mail mail = null;
-        while (it.hasNext()) {
-            mail = it.next();
-        }
-
-        return mail;
-    }
-
-    public void clear() {
-        queue.clear();
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad7e51d9/server/queue/queue-api/src/test/java/org/apache/james/queue/api/mock/MockMailQueueFactory.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/mock/MockMailQueueFactory.java
 
b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/mock/MockMailQueueFactory.java
deleted file mode 100644
index 1cf77db..0000000
--- 
a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/mock/MockMailQueueFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.queue.api.mock;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.james.queue.api.MailQueue;
-import org.apache.james.queue.api.MailQueueFactory;
-
-public class MockMailQueueFactory implements MailQueueFactory {
-
-    private final Map<String, MailQueue> queues = new HashMap<>();
-
-    @Override
-    public synchronized MailQueue getQueue(String name) {
-        MailQueue queue = queues.get(name);
-        if (queue == null) {
-            queue = new MockMailQueue();
-            queues.put(name, queue);
-        }
-
-        return queue;
-    }
-
-    public void clear() {
-        queues.clear();
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad7e51d9/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
 
b/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
index 3a81099..5c0a4e1 100644
--- 
a/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
+++ 
b/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.queue.memory;
 
+import java.util.NoSuchElementException;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.LinkedBlockingDeque;
@@ -80,7 +81,7 @@ public class MemoryMailQueueFactory implements 
MailQueueFactory {
         @Override
         public void enQueue(Mail mail) throws MailQueueException {
             try {
-                mailItems.addFirst(new MemoryMailQueueItem(cloneMail(mail)));
+                mailItems.addLast(new MemoryMailQueueItem(cloneMail(mail)));
             } catch (MessagingException e) {
                 throw new MailQueueException("Error while copying mail " + 
mail.getName(), e);
             }
@@ -99,11 +100,19 @@ public class MemoryMailQueueFactory implements 
MailQueueFactory {
         @Override
         public MailQueueItem deQueue() throws MailQueueException, 
InterruptedException {
             while (true) {
-                MemoryMailQueueItem item = mailItems.takeLast();
+                MemoryMailQueueItem item = mailItems.takeFirst();
                 return mailQueueItemDecoratorFactory.decorate(item);
             }
         }
 
+        public Mail getLastMail() throws MailQueueException, 
InterruptedException {
+            try {
+                return mailItems.getLast().getMail();
+            } catch (NoSuchElementException e) {
+                return null;
+            }
+        }
+
         @Override
         public boolean equals(Object o) {
             if (o == null || getClass() != o.getClass()) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/ad7e51d9/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueTest.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueTest.java
 
b/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueTest.java
index 0c798a3..7f6f0f9 100644
--- 
a/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueTest.java
+++ 
b/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueTest.java
@@ -19,10 +19,14 @@
 
 package org.apache.james.queue.memory;
 
+import static org.apache.james.queue.api.Mails.defaultMail;
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueueContract;
 import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 public class MemoryMailQueueTest implements MailQueueContract {
 
@@ -37,4 +41,47 @@ public class MemoryMailQueueTest implements 
MailQueueContract {
     public MailQueue getMailQueue() {
         return mailQueue;
     }
+
+    @Test
+    public void getLastMailShouldReturnNullWhenNoMail() throws Exception {
+        assertThat(mailQueue.getLastMail())
+            .isNull();
+    }
+
+    @Test
+    public void getLastMailShouldReturnSingleMail() throws Exception {
+        mailQueue.enQueue(defaultMail()
+            .name("name")
+            .build());
+
+        assertThat(mailQueue.getLastMail().getName())
+            .isEqualTo("name");
+    }
+
+    @Test
+    public void getLastMailShouldReturnLastEnqueuedMail() throws Exception {
+        mailQueue.enQueue(defaultMail()
+            .name("name1")
+            .build());
+        mailQueue.enQueue(defaultMail()
+            .name("name2")
+            .build());
+
+        assertThat(mailQueue.getLastMail().getName())
+            .isEqualTo("name2");
+    }
+
+    @Test
+    public void getLastMailShouldNotAlterMailQueueState() throws Exception {
+        mailQueue.enQueue(defaultMail()
+            .name("name1")
+            .build());
+        mailQueue.enQueue(defaultMail()
+            .name("name2")
+            .build());
+
+        mailQueue.getLastMail();
+        assertThat(mailQueue.getLastMail().getName())
+            .isEqualTo("name2");
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to