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 bt...@apache.org on 2018/01/30 08:12:21 UTC

[10/16] james-project git commit: JAMES-2285 RemoteDelivery should not re-implement a MailQueue

JAMES-2285 RemoteDelivery should not re-implement a MailQueue

Instead we should be using the Memory mail queue

Solve mail checking issues with a projection. (Because Memory mail queue returns MailImpl, that can not be checked against FakeMail)


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

Branch: refs/heads/master
Commit: 35f964717f7723b839830cc94d7c5d8b84543293
Parents: 80d1e9d
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 29 11:55:08 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jan 30 15:10:26 2018 +0700

----------------------------------------------------------------------
 server/mailet/mailets/pom.xml                   |   5 +
 .../remote/delivery/RemoteDeliveryTest.java     | 147 +++++++++++--------
 2 files changed, 88 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/35f96471/server/mailet/mailets/pom.xml
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/pom.xml b/server/mailet/mailets/pom.xml
index f269dfa..1abfda0 100644
--- a/server/mailet/mailets/pom.xml
+++ b/server/mailet/mailets/pom.xml
@@ -139,6 +139,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-testing</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/35f96471/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
index f54203c..79850b0 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
@@ -21,21 +21,25 @@ package org.apache.james.transport.mailets.remote.delivery;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
+import java.io.Serializable;
+import java.util.Collection;
 import java.util.List;
-import java.util.concurrent.TimeUnit;
+import java.util.Map;
+import java.util.Objects;
 
-import javax.mail.MessagingException;
-
-import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.james.core.MailAddress;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.api.DomainList;
-import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.queue.api.MailPrioritySupport;
-import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueueFactory;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
+import org.apache.james.queue.memory.MemoryMailQueueFactory;
 import org.apache.james.transport.mailets.RemoteDelivery;
+import org.apache.james.util.streams.Iterators;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.MailAddressFixture;
 import org.apache.mailet.base.test.FakeMail;
@@ -43,62 +47,64 @@ import org.apache.mailet.base.test.FakeMailetConfig;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.common.base.Throwables;
+import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
+import com.google.common.collect.ImmutableMap;
 
 public class RemoteDeliveryTest {
 
-    public static final String MAIL_NAME = "mail_name";
+    public static class MailProjection {
+        public static MailProjection from(Mail mail) {
+            return new MailProjection(mail.getName(), mail.getRecipients(),
+                Iterators.toStream(mail.getAttributeNames())
+                    .map(name -> Pair.of(name, mail.getAttribute(name)))
+                    .collect(Guavate.toImmutableMap(Pair::getKey, Pair::getValue)));
+        }
+
+        public static MailProjection from(ManageableMailQueue.MailQueueItemView item) {
+            return from(item.getMail());
+        }
 
-    private static class FakeMailQueue implements MailQueue {
-        private final List<Mail> enqueuedMail;
         private final String name;
+        private final List<MailAddress> recipients;
+        private final Map<String, Serializable> attributes;
 
-        private FakeMailQueue(String name) {
+        public MailProjection(String name, Collection<MailAddress> recipients, Map<String, Serializable> attributes) {
             this.name = name;
-            this.enqueuedMail = Lists.newArrayList();
+            this.recipients = ImmutableList.copyOf(recipients);
+            this.attributes = ImmutableMap.copyOf(attributes);
         }
 
         @Override
-        public String getName() {
-            return name;
-        }
+        public final boolean equals(Object o) {
+            if (o instanceof MailProjection) {
+                MailProjection mailProjection = (MailProjection) o;
 
-        @Override
-        public void enQueue(Mail mail, long delay, TimeUnit unit) throws MailQueueException {
-            enQueue(mail);
-        }
-
-        @Override
-        public void enQueue(Mail mail) throws MailQueueException {
-            try {
-                enqueuedMail.add(FakeMail.fromMail(mail));
-            } catch (MessagingException e) {
-                throw Throwables.propagate(e);
+                return Objects.equals(this.name, mailProjection.name)
+                    && Objects.equals(this.attributes, mailProjection.attributes)
+                    && Objects.equals(this.recipients, mailProjection.recipients);
             }
+            return false;
         }
 
         @Override
-        public MailQueueItem deQueue() throws MailQueueException, InterruptedException {
-            throw new NotImplementedException();
-        }
-
-        public List<Mail> getEnqueuedMail() {
-            return ImmutableList.copyOf(enqueuedMail);
+        public final int hashCode() {
+            return Objects.hash(name, attributes, recipients);
         }
     }
 
+    public static final String MAIL_NAME = "mail_name";
+
     private RemoteDelivery remoteDelivery;
-    private FakeMailQueue mailQueue;
+    private ManageableMailQueue mailQueue;
 
     @Before
     @SuppressWarnings("unchecked")
     public void setUp() {
-        MailQueueFactory<FakeMailQueue> queueFactory = mock(MailQueueFactory.class);
-        mailQueue = new FakeMailQueue("any");
-        when(queueFactory.createQueue(RemoteDeliveryConfiguration.OUTGOING)).thenReturn(mailQueue);
-        remoteDelivery = new RemoteDelivery(mock(DNSService.class), mock(DomainList.class), queueFactory, mock(MetricFactory.class), RemoteDelivery.ThreadState.DO_NOT_START_THREADS);
+        MailQueueFactory<ManageableMailQueue> queueFactory = new MemoryMailQueueFactory(new RawMailQueueItemDecoratorFactory());
+        mailQueue = queueFactory.createQueue(RemoteDeliveryConfiguration.OUTGOING);
+        remoteDelivery = new RemoteDelivery(mock(DNSService.class), mock(DomainList.class),
+            queueFactory, new NoopMetricFactory(), RemoteDelivery.ThreadState.DO_NOT_START_THREADS);
     }
 
     @Test
@@ -110,10 +116,14 @@ public class RemoteDeliveryTest {
         Mail mail = FakeMail.builder().name(MAIL_NAME).recipients(MailAddressFixture.ANY_AT_JAMES).build();
         remoteDelivery.service(mail);
 
-        assertThat(mailQueue.getEnqueuedMail()).containsOnly(FakeMail.builder()
-            .name(MAIL_NAME + RemoteDelivery.NAME_JUNCTION + MailAddressFixture.JAMES_APACHE_ORG)
-            .recipient(MailAddressFixture.ANY_AT_JAMES)
-            .build());
+
+        assertThat(mailQueue.browse())
+            .extracting(MailProjection::from)
+            .containsOnly(MailProjection.from(
+                FakeMail.builder()
+                    .name(MAIL_NAME + RemoteDelivery.NAME_JUNCTION + MailAddressFixture.JAMES_APACHE_ORG)
+                    .recipient(MailAddressFixture.ANY_AT_JAMES)
+                    .build()));
     }
 
     @Test
@@ -128,15 +138,18 @@ public class RemoteDeliveryTest {
             .build();
         remoteDelivery.service(mail);
 
-        assertThat(mailQueue.getEnqueuedMail()).containsOnly(
-            FakeMail.builder()
-                .name(MAIL_NAME + RemoteDelivery.NAME_JUNCTION + MailAddressFixture.JAMES_APACHE_ORG)
-                .recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES)
-                .build(),
-            FakeMail.builder()
-                .name(MAIL_NAME + RemoteDelivery.NAME_JUNCTION + MailAddressFixture.JAMES2_APACHE_ORG)
-                .recipients(MailAddressFixture.ANY_AT_JAMES2)
-                .build());
+
+        assertThat(mailQueue.browse())
+            .extracting(MailProjection::from)
+            .containsOnly(
+                MailProjection.from(FakeMail.builder()
+                    .name(MAIL_NAME + RemoteDelivery.NAME_JUNCTION + MailAddressFixture.JAMES_APACHE_ORG)
+                    .recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES)
+                    .build()),
+                MailProjection.from(FakeMail.builder()
+                    .name(MAIL_NAME + RemoteDelivery.NAME_JUNCTION + MailAddressFixture.JAMES2_APACHE_ORG)
+                    .recipients(MailAddressFixture.ANY_AT_JAMES2)
+                    .build()));
     }
 
     @Test
@@ -152,11 +165,14 @@ public class RemoteDeliveryTest {
             .build();
         remoteDelivery.service(mail);
 
-        assertThat(mailQueue.getEnqueuedMail()).containsOnly(
-            FakeMail.builder()
-                .name(MAIL_NAME)
-                .recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2, MailAddressFixture.OTHER_AT_JAMES)
-                .build());
+
+        assertThat(mailQueue.browse())
+            .extracting(MailProjection::from)
+            .containsOnly(
+                MailProjection.from(FakeMail.builder()
+                    .name(MAIL_NAME)
+                    .recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2, MailAddressFixture.OTHER_AT_JAMES)
+                    .build()));
     }
 
     @Test
@@ -181,11 +197,14 @@ public class RemoteDeliveryTest {
         Mail mail = FakeMail.builder().name(MAIL_NAME).recipients(MailAddressFixture.ANY_AT_JAMES).build();
         remoteDelivery.service(mail);
 
-        assertThat(mailQueue.getEnqueuedMail()).containsOnly(FakeMail.builder()
-            .name(MAIL_NAME + RemoteDelivery.NAME_JUNCTION + MailAddressFixture.JAMES_APACHE_ORG)
-            .attribute(MailPrioritySupport.MAIL_PRIORITY, MailPrioritySupport.HIGH_PRIORITY)
-            .recipient(MailAddressFixture.ANY_AT_JAMES)
-            .build());
+
+        assertThat(mailQueue.browse())
+            .extracting(MailProjection::from)
+            .containsOnly(MailProjection.from(FakeMail.builder()
+                .name(MAIL_NAME + RemoteDelivery.NAME_JUNCTION + MailAddressFixture.JAMES_APACHE_ORG)
+                .attribute(MailPrioritySupport.MAIL_PRIORITY, MailPrioritySupport.HIGH_PRIORITY)
+                .recipient(MailAddressFixture.ANY_AT_JAMES)
+                .build()));
     }
 
     @Test
@@ -197,7 +216,7 @@ public class RemoteDeliveryTest {
         Mail mail = FakeMail.builder().name(MAIL_NAME).build();
         remoteDelivery.service(mail);
 
-        assertThat(mailQueue.getEnqueuedMail()).isEmpty();
+        assertThat(mailQueue.browse()).isEmpty();
     }
 
     @Test
@@ -210,6 +229,6 @@ public class RemoteDeliveryTest {
         Mail mail = FakeMail.builder().name(MAIL_NAME).build();
         remoteDelivery.service(mail);
 
-        assertThat(mailQueue.getEnqueuedMail()).isEmpty();
+        assertThat(mailQueue.browse()).isEmpty();
     }
 }


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