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 2019/08/28 10:32:13 UTC

[james-project] 05/12: JAMES-2865 Implement received mail memory storage for MockSMTPServer

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 4678063b9f7ccccf01aa64abcc5e470ea0acf350
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Thu Aug 22 14:31:04 2019 +0700

    JAMES-2865 Implement received mail memory storage for MockSMTPServer
---
 server/mailet/mock-smtp-server/pom.xml             |  19 ++++
 .../mock/smtp/server/ReceivedMailRepository.java   |  47 +++++++++
 .../org/apache/james/mock/smtp/server/Fixture.java |   5 +
 .../smtp/server/ReceivedMailRepositoryTest.java    | 105 +++++++++++++++++++++
 .../james/mock/smtp/server/SMTPCommandTest.java    |   1 +
 5 files changed, 177 insertions(+)

diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index afc5a9c..b1aa69e 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -46,6 +46,15 @@
             <artifactId>james-server-jetty</artifactId>
         </dependency>
         <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-testing</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
@@ -92,6 +101,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
         </dependency>
@@ -99,5 +113,10 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.subethamail</groupId>
+            <artifactId>subethasmtp</artifactId>
+            <version>3.1.7</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ReceivedMailRepository.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ReceivedMailRepository.java
new file mode 100644
index 0000000..b2faec2
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ReceivedMailRepository.java
@@ -0,0 +1,47 @@
+/****************************************************************
+ * 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.mock.smtp.server;
+
+import java.util.List;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+import org.apache.james.mock.smtp.server.model.Mail;
+
+import com.google.common.collect.ImmutableList;
+
+public class ReceivedMailRepository {
+    private final ConcurrentLinkedQueue<Mail> mails;
+
+    public ReceivedMailRepository() {
+        mails = new ConcurrentLinkedQueue<>();
+    }
+
+    public void store(Mail mail) {
+        mails.add(mail);
+    }
+
+    public List<Mail> list() {
+        return ImmutableList.copyOf(mails);
+    }
+
+    public void clear() {
+        mails.clear();
+    }
+}
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
index 34cf335..ac7b69e 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
@@ -31,6 +31,11 @@ import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
 import com.google.common.collect.ImmutableList;
 
 public interface Fixture {
+    String DOMAIN = "james.org";
+    String BOB = "bob@" + DOMAIN;
+    String ALICE = "alice@" + DOMAIN;
+    String JACK = "jack@" + DOMAIN;
+
     ObjectMapper OBJECT_MAPPER = new ObjectMapper()
         .registerModule(new Jdk8Module())
         .registerModule(new GuavaModule());
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java
new file mode 100644
index 0000000..28cecad
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java
@@ -0,0 +1,105 @@
+/****************************************************************
+ * 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.mock.smtp.server;
+
+import static org.apache.james.mock.smtp.server.Fixture.ALICE;
+import static org.apache.james.mock.smtp.server.Fixture.BOB;
+import static org.apache.james.mock.smtp.server.Fixture.JACK;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
+
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.core.MailAddress;
+import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.james.mock.smtp.server.model.Mail;
+import org.apache.james.util.MimeMessageUtil;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import com.google.common.collect.ImmutableList;
+
+class ReceivedMailRepositoryTest {
+    private ReceivedMailRepository testee;
+    private Mail mail;
+    private Mail mail2;
+
+    @BeforeEach
+    void setUp() throws Exception {
+        testee = new ReceivedMailRepository();
+        MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
+            .setSubject("test")
+            .setText("any text")
+            .build();
+        mail = new Mail(
+            new Mail.Envelope(
+                new MailAddress(BOB),
+                ImmutableList.of(new MailAddress(ALICE), new MailAddress(JACK))),
+                MimeMessageUtil.asString(message));
+        mail2 = new Mail(
+            new Mail.Envelope(
+                new MailAddress(ALICE),
+                ImmutableList.of(new MailAddress(BOB), new MailAddress(JACK))),
+                MimeMessageUtil.asString(message));
+    }
+
+    @Test
+    void listShouldBeEmptyWhenNoMailStored() {
+        assertThat(testee.list()).isEmpty();
+    }
+
+    @Test
+    void listShouldReturnStoredMail() {
+        testee.store(mail);
+
+        assertThat(testee.list()).containsExactly(mail);
+    }
+
+    @Test
+    void listShouldReturnStoredMails() {
+        testee.store(mail);
+        testee.store(mail2);
+
+        assertThat(testee.list()).containsExactly(mail, mail2);
+    }
+
+    @Test
+    void listShouldPreserveDuplicates() {
+        testee.store(mail);
+        testee.store(mail);
+
+        assertThat(testee.list()).containsExactly(mail, mail);
+    }
+
+    @Test
+    void listShouldNotReturnClearedMails() {
+        testee.store(mail);
+
+        testee.clear();
+
+        assertThat(testee.list()).isEmpty();
+    }
+
+    @Test
+    void clearShouldNotFailWhenNoElementStored() {
+        assertThatCode(() -> testee.clear())
+            .doesNotThrowAnyException();
+    }
+}
\ No newline at end of file
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
index 95abb58..12704ba 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.io.IOException;
 
+import org.apache.james.mock.smtp.server.model.SMTPCommand;
 import org.junit.jupiter.api.Test;
 
 class SMTPCommandTest {


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