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/05 02:57:01 UTC

[42/44] james-project git commit: JAMES-2262 Upgrade SpamAssassin tests code quality

JAMES-2262 Upgrade SpamAssassin tests code quality


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

Branch: refs/heads/improve-mailet-testing-experience-v1
Commit: 1c529101b6eb28166ccc89dbb562ab95e43c9824
Parents: 1d9f9df
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 25 11:59:20 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 5 09:34:39 2018 +0700

----------------------------------------------------------------------
 .../transport/mailets/SpamAssassinTest.java     | 198 +++++++------------
 1 file changed, 74 insertions(+), 124 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1c529101/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index bf1541e..f20a7e2 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -19,18 +19,24 @@
 package org.apache.james.transport.mailets;
 
 import static org.apache.james.MemoryJamesServerMain.SMTP_AND_IMAP_MODULE;
+import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
+import static org.apache.james.mailets.configuration.Constants.FROM;
+import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
+import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
+import static org.apache.james.mailets.configuration.Constants.PASSWORD;
+import static org.apache.james.mailets.configuration.Constants.RECIPIENT;
+import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
+import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
-import javax.mail.internet.MimeMessage;
+import javax.mail.MessagingException;
 
-import org.apache.james.core.MailAddress;
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.CommonProcessors;
 import org.apache.james.mailets.configuration.MailetConfiguration;
 import org.apache.james.mailets.configuration.MailetContainer;
 import org.apache.james.mailets.configuration.ProcessorConfiguration;
 import org.apache.james.transport.matchers.All;
-import org.apache.james.transport.matchers.RecipientIsLocal;
 import org.apache.james.util.docker.Images;
 import org.apache.james.util.docker.SwarmGenericContainer;
 import org.apache.james.util.scanner.SpamAssassinInvoker;
@@ -43,81 +49,52 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.RuleChain;
 import org.junit.rules.TemporaryFolder;
 import org.testcontainers.containers.wait.HostPortWaitStrategy;
 
-import com.jayway.awaitility.Awaitility;
-import com.jayway.awaitility.Duration;
-import com.jayway.awaitility.core.ConditionFactory;
-
 public class SpamAssassinTest {
-    private static final String LOCALHOST_IP = "127.0.0.1";
-    private static final int IMAP_PORT = 1143;
-    private static final int SMTP_PORT = 1025;
-
-    public static final String JAMES_ORG = "james.org";
-    public static final String SENDER = "sender@" + JAMES_ORG;
-    public static final String TO = "to@" + JAMES_ORG;
-    public static final String PASSWORD = "secret";
+    private static final String SPAM_CONTENT = "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X";
 
+    @Rule
     public SwarmGenericContainer spamAssassinContainer = new SwarmGenericContainer(Images.SPAMASSASSIN)
         .withExposedPorts(783)
         .withAffinityToContainer()
         .waitingFor(new HostPortWaitStrategy());
-
+    @Rule
     public TemporaryFolder temporaryFolder = new TemporaryFolder();
-
     @Rule
-    public RuleChain chain = RuleChain.outerRule(temporaryFolder).around(spamAssassinContainer);
+    public IMAPMessageReader messageReader = new IMAPMessageReader();
+    @Rule
+    public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
 
     private TemporaryJamesServer jamesServer;
-    private ConditionFactory calmlyAwait;
 
     @Before
     public void setup() throws Exception {
-        MailetContainer mailets = MailetContainer
-            .builder()
-            .threads(5)
-            .postmaster(SENDER)
-            .addProcessor(CommonProcessors.root())
-            .addProcessor(CommonProcessors.error())
+        MailetContainer.Builder mailets = TemporaryJamesServer.DEFAUL_MAILET_CONTAINER_CONFIGURATION
             .addProcessor(
-                ProcessorConfiguration.builder()
-                    .state("transport")
+                ProcessorConfiguration.transport()
                     .addMailet(MailetConfiguration.builder()
                         .matcher(All.class)
                         .mailet(SpamAssassin.class)
-                        .addProperty(SpamAssassin.SPAMD_HOST, spamAssassinContainer.getContainerIp())
-                        .build())
+                        .addProperty(SpamAssassin.SPAMD_HOST, spamAssassinContainer.getContainerIp()))
                     .addMailet(MailetConfiguration.builder()
                         .matcher(All.class)
                         .mailet(MailAttributesToMimeHeaders.class)
                         .addProperty("simplemapping",
                             SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ";" + SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + "," +
-                            SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ";" + SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME)
-                        .build())
-                    .addMailet(MailetConfiguration.builder()
-                        .matcher(All.class)
-                        .mailet(RemoveMimeHeader.class)
-                        .addProperty("name", "bcc")
-                        .build())
-                    .addMailet(MailetConfiguration.builder()
-                        .matcher(RecipientIsLocal.class)
-                        .mailet(LocalDelivery.class)
-                        .build())
-                    .build())
-            .build();
+                            SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ";" + SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME))
+                    .addMailetsFrom(CommonProcessors.deliverOnlyTransport()));
+
         jamesServer = TemporaryJamesServer.builder()
             .withBase(SMTP_AND_IMAP_MODULE)
-            .build(temporaryFolder, mailets);
-        Duration slowPacedPollInterval = Duration.FIVE_HUNDRED_MILLISECONDS;
-        calmlyAwait = Awaitility.with().pollInterval(slowPacedPollInterval).and().with().pollDelay(slowPacedPollInterval).await();
+            .withMailetContainer(mailets)
+            .build(temporaryFolder);
 
         DataProbeImpl probe = jamesServer.getProbe(DataProbeImpl.class);
-        probe.addDomain(JAMES_ORG);
-        probe.addUser(SENDER, PASSWORD);
-        probe.addUser(TO, PASSWORD);
+        probe.addDomain(DEFAULT_DOMAIN);
+        probe.addUser(FROM, PASSWORD);
+        probe.addUser(RECIPIENT, PASSWORD);
     }
 
     @After
@@ -127,88 +104,61 @@ public class SpamAssassinTest {
 
     @Test
     public void spamAssassinShouldAppendNewHeaderOnMessage() throws Exception {
-        MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
-            .setSender(SENDER)
-            .addToRecipient(TO)
-            .setSubject("This is the subject")
-            .setText("This is -SPAM- my email")
-            .build();
-        FakeMail mail = FakeMail.builder()
-            .mimeMessage(message)
-            .sender(new MailAddress(SENDER))
-            .recipients(new MailAddress(TO))
-            .build();
-
-        try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, JAMES_ORG);
-             IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) {
-
-            messageSender.sendMessage(mail);
-
-            calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent);
-            calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(TO, PASSWORD));
-
-            String receivedHeaders = imapMessageReader.readFirstMessageHeadersInInbox(TO, PASSWORD);
-
-            assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME, SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME);
-        }
+        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            .sendMessage(mailWithContent("This is the content"))
+            .awaitSent(awaitOneMinute);
+
+        messageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            .login(RECIPIENT, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitOneMinute);
+
+        assertThat(messageReader.readFirstMessageHeaders())
+            .contains(
+                SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME,
+                SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME);
     }
 
     @Test
     public void spamAssassinShouldAppendNewHeaderWhichDetectIsSpamWhenSpamMessage() throws Exception {
-        String spamContent = "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X";
-        MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
-            .setSender(SENDER)
-            .addToRecipient(TO)
-            .setSubject("This is the subject")
-            .setText(spamContent)
-            .build();
-        FakeMail mail = FakeMail.builder()
-            .mimeMessage(message)
-            .sender(new MailAddress(SENDER))
-            .recipients(new MailAddress(TO))
-            .build();
-
-        try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, JAMES_ORG);
-             IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) {
-
-            messageSender.sendMessage(mail);
-
-            calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent);
-            calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(TO, PASSWORD));
-
-            String receivedHeaders = imapMessageReader.readFirstMessageInInbox(TO, PASSWORD);
-
-            assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ": YES");
-            assertThat(receivedHeaders).contains(SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ": Yes");
-        }
+        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            .sendMessage(mailWithContent(SPAM_CONTENT))
+            .awaitSent(awaitOneMinute);
+
+        messageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            .login(RECIPIENT, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitOneMinute);
+
+        String receivedHeaders = messageReader.readFirstMessageHeaders();
+        assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ": YES");
+        assertThat(receivedHeaders).contains(SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ": Yes");
     }
 
     @Test
     public void spamAssassinShouldAppendNewHeaderWhichNoWhenNonSpamMessage() throws Exception {
-        MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
-            .setSender(SENDER)
-            .addToRecipient(TO)
-            .setSubject("This is the subject")
-            .setText("This is the content")
-            .build();
-        FakeMail mail = FakeMail.builder()
-            .mimeMessage(message)
-            .sender(new MailAddress(SENDER))
-            .recipients(new MailAddress(TO))
-            .build();
-
-        try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, JAMES_ORG);
-             IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) {
-
-            messageSender.sendMessage(mail);
-
-            calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent);
-            calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(TO, PASSWORD));
-
-            String receivedHeaders = imapMessageReader.readFirstMessageInInbox(TO, PASSWORD);
-
-            assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ": NO");
-            assertThat(receivedHeaders).contains(SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ": No");
-        }
+        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            .sendMessage(mailWithContent("This is the content"))
+            .awaitSent(awaitOneMinute);
+
+        messageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            .login(RECIPIENT, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitOneMinute);
+
+        String receivedHeaders = messageReader.readFirstMessageHeaders();
+        assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ": NO");
+        assertThat(receivedHeaders).contains(SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ": No");
+    }
+
+    private FakeMail.Builder mailWithContent(String textContent) throws MessagingException {
+        return FakeMail.builder()
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .setSender(FROM)
+                .addToRecipient(RECIPIENT)
+                .setSubject("This is the subject")
+                .setText(textContent))
+            .sender(FROM)
+            .recipient(RECIPIENT);
     }
 }


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