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 ad...@apache.org on 2017/11/16 14:19:55 UTC

[08/18] james-project git commit: JAMES-2220 port MailImpl tests to assertj and covers constructors

JAMES-2220 port MailImpl tests to assertj and covers constructors


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

Branch: refs/heads/master
Commit: 549f7aef3953c40edcb832fea3bff6dea7b0c641
Parents: 7c1685b
Author: Matthieu Baechler <ma...@apache.org>
Authored: Tue Nov 14 15:36:59 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Thu Nov 16 12:30:30 2017 +0100

----------------------------------------------------------------------
 .../org/apache/james/server/core/MailImpl.java  |  14 +-
 .../apache/james/server/core/MailImplTest.java  | 129 +++++++++++--------
 .../server/core/MailTestAllImplementations.java |  72 -----------
 .../core/MimeMessageCopyOnWriteProxyTest.java   |  10 +-
 4 files changed, 86 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/549f7aef/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java b/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
index 2e9aa38..ad66e7f 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
@@ -49,6 +49,7 @@ import org.apache.mailet.PerRecipientHeaders.Header;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 
 /**
@@ -170,7 +171,7 @@ public class MailImpl implements Disposable, Mail {
      * @throws MessagingException
      */
     @SuppressWarnings("unchecked")
-    public MailImpl(Mail mail, String newName) throws MessagingException {
+    private MailImpl(Mail mail, String newName) throws MessagingException {
         this(newName, mail.getSender(), mail.getRecipients(), mail.getMessage());
         setRemoteHost(mail.getRemoteHost());
         setRemoteAddr(mail.getRemoteAddr());
@@ -229,22 +230,13 @@ public class MailImpl implements Disposable, Mail {
     }
 
     /**
-     * Duplicate the MailImpl.
-     *
-     * @return a MailImpl that is a duplicate of this one
-     */
-    public Mail duplicate() {
-        return duplicate(name);
-    }
-
-    /**
      * Duplicate the MailImpl, replacing the mail name with the one passed in as
      * an argument.
      *
      * @param newName the name for the duplicated mail
      * @return a MailImpl that is a duplicate of this one with a different name
      */
-    public Mail duplicate(String newName) {
+    @VisibleForTesting Mail duplicate(String newName) {
         try {
             return new MailImpl(this, newName);
         } catch (MessagingException me) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/549f7aef/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
index 5ab4cd0..5f299a4 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
@@ -18,15 +18,14 @@
  ****************************************************************/
 package org.apache.james.server.core;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
 
 import javax.mail.MessagingException;
 import javax.mail.Session;
@@ -35,83 +34,110 @@ import javax.mail.internet.MimeMessage;
 import org.apache.james.core.MailAddress;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.test.MailUtil;
+import org.junit.Before;
 import org.junit.Test;
 
-public class MailImplTest extends MailTestAllImplementations {
+import com.google.common.collect.ImmutableList;
+
+public class MailImplTest {
 
     private static final Session NO_SESSION = null;
-    
-    @Override
-    protected Mail createMailImplementation() {
-        return new MailImpl();
+    private MimeMessage emptyMessage;
+
+    @Before
+    public void setup() throws MessagingException {
+        emptyMessage = new MimeMessage(NO_SESSION, new ByteArrayInputStream(new byte[0]));
+    }
+
+    @Test
+    public void mailImplShouldHaveSensibleInitialValues() throws MessagingException {
+        MailImpl mail = new MailImpl();
+
+        assertThat(mail.hasAttributes()).describedAs("no initial attributes").isFalse();
+        assertThat(mail.getErrorMessage()).describedAs("no initial error").isNull();
+        assertThat(mail.getLastUpdated()).isCloseTo(new Date(), TimeUnit.SECONDS.toMillis(1));
+        assertThat(mail.getRecipients()).describedAs("no initial recipient").isNullOrEmpty();
+        assertThat(mail.getRemoteAddr()).describedAs("initial remote address is localhost ip").isEqualTo("127.0.0.1");
+        assertThat(mail.getRemoteHost()).describedAs("initial remote host is localhost").isEqualTo("localhost");
+        assertThat(mail.getState()).describedAs("default initial state").isEqualTo(Mail.DEFAULT);
+        assertThat(mail.getMessage()).isNull();
+        assertThat(mail.getSender()).isNull();
+        assertThat(mail.getName()).isNull();
     }
 
     @Test
-    public void testConstr1() throws MessagingException {
+    public void mailImplShouldThrowWhenComputingSizeOnDefaultInstance() throws MessagingException {
         MailImpl mail = new MailImpl();
 
-        helperTestInitialState(mail);
-        helperTestMessageSize(mail, 0); // MimeMessageWrapper default is 0
-        assertNull("no initial message", mail.getMessage());
-        assertNull("no initial sender", mail.getSender());
-        assertNull("no initial name", mail.getName());
+        assertThatThrownBy(mail::getMessageSize).isInstanceOf(NullPointerException.class);
     }
 
     @Test
-    public void testConstr2() throws MessagingException {
-        ArrayList<MailAddress> recepients = new ArrayList<>();
+    public void mailImplConstructionShouldSetDefaultValuesOnUnspecifiedFields() throws MessagingException {
+        ArrayList<MailAddress> recipients = new ArrayList<>();
         String name = MailUtil.newId();
         String sender = "sender@localhost";
         MailAddress senderMailAddress = new MailAddress(sender);
-        MailImpl mail = new MailImpl(name, senderMailAddress, recepients);
+        MailImpl mail = new MailImpl(name, senderMailAddress, recipients);
 
-        helperTestInitialState(mail); // MimeMessageWrapper default is 0
-        helperTestMessageSize(mail, 0); // MimeMessageWrapper default is 0
-        assertNull("no initial message", mail.getMessage());
-        assertEquals("sender", sender, mail.getSender().toString());
-        assertEquals("name", name, mail.getName());
 
-        mail.setMessage(new MimeMessage(NO_SESSION));
-        assertNotNull("message", mail.getMessage());
+        MailImpl expected = new MailImpl();
+        assertThat(mail).isEqualToIgnoringGivenFields(expected, "sender", "name", "recipients", "lastUpdated");
+        assertThat(mail.getLastUpdated()).isCloseTo(new Date(), TimeUnit.SECONDS.toMillis(1));
     }
 
     @Test
-    public void testConstr3() throws MessagingException {
-        ArrayList<MailAddress> recepients = new ArrayList<>();
+    public void mailImplConstructionShouldSetSpecifiedFields() throws MessagingException {
+        ImmutableList<MailAddress> recipients = ImmutableList.of();
+        String name = MailUtil.newId();
+        String sender = "sender@localhost";
+        MailAddress senderMailAddress = new MailAddress(sender);
+        MailImpl mail = new MailImpl(name, senderMailAddress, recipients);
+
+        assertThat(mail.getSender().asString()).isEqualTo(sender);
+        assertThat(mail.getName()).isEqualTo(name);
+
+     }
+
+    @Test
+    public void mailImplConstructionWithMimeMessageShouldSetSpecifiedFields() throws MessagingException {
+        ImmutableList<MailAddress> recipients = ImmutableList.of();
         String name = MailUtil.newId();
         String sender = "sender@localhost";
         MailAddress senderMailAddress = new MailAddress(sender);
-        MimeMessage mimeMessage = new MimeMessage(NO_SESSION, new ByteArrayInputStream(new byte[0]));
-        MailImpl mail = new MailImpl(name, senderMailAddress, recepients, mimeMessage);
-
-        helperTestInitialState(mail);
-        helperTestMessageSize(mail, 0);
-        assertEquals("initial message", mimeMessage.getMessageID(), mail.getMessage().getMessageID());
-        assertEquals("sender", sender, mail.getSender().toString());
-        assertEquals("name", name, mail.getName());
-        mail.dispose();
+
+        MailImpl expected = new MailImpl(name, senderMailAddress, recipients);
+        MailImpl mail = new MailImpl(name, senderMailAddress, recipients, emptyMessage);
+
+        assertThat(mail).isEqualToIgnoringGivenFields(expected, "message", "lastUpdated");
+        assertThat(mail.getLastUpdated()).isCloseTo(new Date(), TimeUnit.SECONDS.toMillis(1));
     }
 
     @Test
-    public void testDuplicate() throws MessagingException {
-        MailImpl mail = new MailImpl();
-        MailImpl duplicate = (MailImpl) mail.duplicate();
-        assertNotSame("is real duplicate", mail, duplicate);
-        helperTestInitialState(duplicate);
-        helperTestMessageSize(duplicate, 0);
+    public void mailImplConstructionWithMimeMessageShouldNotOverwriteMessageId() throws MessagingException {
+        ImmutableList<MailAddress> recipients = ImmutableList.of();
+        String name = MailUtil.newId();
+        String sender = "sender@localhost";
+        MailAddress senderMailAddress = new MailAddress(sender);
+
+        MailImpl mail = new MailImpl(name, senderMailAddress, recipients, emptyMessage);
+
+        assertThat(mail.getMessage().getMessageID()).isEqualTo(emptyMessage.getMessageID());
     }
 
     @Test
-    public void testDuplicateNewName() throws MessagingException {
-        String newName = "aNewName";
+    public void duplicateShouldGenerateNewObjectWithSameValuesButName() throws MessagingException, IOException {
+        ImmutableList<MailAddress> recipients = ImmutableList.of();
+        String name = MailUtil.newId();
+        String sender = "sender@localhost";
+        MailAddress senderMailAddress = new MailAddress(sender);
 
-        MailImpl mail = new MailImpl();
-        assertFalse("before + after names differ", newName.equals(mail.getName()));
+        MailImpl mail = new MailImpl(name, senderMailAddress, recipients, emptyMessage);
+        MailImpl duplicate = (MailImpl) mail.duplicate("new name");
 
-        MailImpl duplicate = (MailImpl) mail.duplicate(newName);
-        assertEquals("new name set", newName, duplicate.getName());
-        helperTestInitialState(duplicate);
-        helperTestMessageSize(duplicate, 0);
+        assertThat(duplicate).isNotSameAs(mail).isEqualToIgnoringGivenFields(mail, "message", "name");
+        assertThat(duplicate.getName()).isEqualTo("new name");
+        assertThat(duplicate.getMessage().getInputStream()).hasSameContentAs(mail.getMessage().getInputStream());
     }
 
     @Test
@@ -121,4 +147,5 @@ public class MailImplTest extends MailTestAllImplementations {
         assertThatThrownBy(() -> mail.setAttribute(null, "toto"))
             .isInstanceOf(NullPointerException.class);
     }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/549f7aef/server/container/core/src/test/java/org/apache/james/server/core/MailTestAllImplementations.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MailTestAllImplementations.java b/server/container/core/src/test/java/org/apache/james/server/core/MailTestAllImplementations.java
deleted file mode 100644
index 1a133b2..0000000
--- a/server/container/core/src/test/java/org/apache/james/server/core/MailTestAllImplementations.java
+++ /dev/null
@@ -1,72 +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.server.core;
-
-import javax.mail.MessagingException;
-
-import org.apache.mailet.Mail;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- * testing common behavior of Mail implementors. subclasses automatically get
- * their Mail-behavior tested.
- */
-public abstract class MailTestAllImplementations {
-
-    /** provide the concrete implementation to test */
-    protected abstract Mail createMailImplementation();
-
-    protected void helperTestInitialState(Mail mail) {
-        assertFalse("no initial attributes", mail.hasAttributes());
-        assertNull("no initial error", mail.getErrorMessage());
-        assertNotNull("initial last update set", mail.getLastUpdated());
-        try {
-            assertTrue("no initial recipient", mail.getRecipients().isEmpty());
-        } catch (NullPointerException e) {
-            // current behavior. *BUT*, shouldn't this method better return with
-            // an empty list?!
-        }
-        assertEquals("initial remote address is localhost ip", "127.0.0.1", mail.getRemoteAddr());
-        assertEquals("initial remote host is localhost", "localhost", mail.getRemoteHost());
-        assertEquals("default initial state", Mail.DEFAULT, mail.getState());
-    }
-
-    protected void helperTestMessageSize(Mail mail, int expectedMsgSize) throws MessagingException {
-        try {
-            assertEquals("initial message size == " + expectedMsgSize, expectedMsgSize, mail.getMessageSize());
-        } catch (NullPointerException e) {
-            // current behavior. *BUT*, shouldn't this method return more
-            // gracefully?!
-        }
-    }
-
-    @Test
-    public void testAttributes() {
-        Mail mail = createMailImplementation();
-        assertFalse("no initial attributes", mail.hasAttributes());
-        assertFalse("attributes initially empty", mail.getAttributeNames().hasNext());
-        assertNull("not found on emtpy list", mail.getAttribute("test"));
-        assertNull("no previous item with key", mail.setAttribute("testKey", "testValue"));
-        assertEquals("item found", "testValue", mail.getAttribute("testKey"));
-        assertTrue("has attribute", mail.hasAttributes());
-        assertEquals("item removed", "testValue", mail.removeAttribute("testKey"));
-        assertNull("item no longer found", mail.getAttribute("testKey"));
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/549f7aef/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java
index afea93c..1829d11 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java
@@ -60,7 +60,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
         MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources(
                 content + sep + body);
         MailImpl mail = new MailImpl("test", new MailAddress("test@test.com"), r, messageFromSources);
-        MailImpl m2 = (MailImpl) mail.duplicate();
+        MailImpl m2 = (MailImpl) mail.duplicate("clone");
         System.out.println("mail: " + getReferences(mail.getMessage()) + " m2: " + getReferences(m2.getMessage()));
         assertNotSame(m2, mail);
         assertNotSame(m2.getMessage(), mail.getMessage());
@@ -86,7 +86,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
         MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources(
                 content + sep + body);
         MailImpl mail = new MailImpl("test", new MailAddress("test@test.com"), r, messageFromSources);
-        MailImpl m2 = (MailImpl) mail.duplicate();
+        MailImpl m2 = (MailImpl) mail.duplicate("clone");
         System.out.println("mail: " + getReferences(mail.getMessage()) + " m2: " + getReferences(m2.getMessage()));
         assertNotSame(m2, mail);
         assertNotSame(m2.getMessage(), mail.getMessage());
@@ -104,7 +104,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
         assertEquals(m2.getMessage().getSubject(), "new Subject");
         assertEquals(mail.getMessage().getSubject(), "foo");
         // cloning again the messages
-        Mail m2clone = m2.duplicate();
+        Mail m2clone = m2.duplicate("clone2");
         assertTrue(isSameMimeMessage(m2clone.getMessage(), m2.getMessage()));
         MimeMessage mm = getWrappedMessage(m2.getMessage());
         assertNotSame(m2.getMessage(), m2clone.getMessage());
@@ -137,7 +137,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
                 content + sep + body);
         MailImpl mail = new MailImpl("test", new MailAddress("test@test.com"), r, messageFromSources);
         // cloning the message
-        Mail mailClone = mail.duplicate();
+        Mail mailClone = mail.duplicate("clone");
         assertTrue(isSameMimeMessage(mailClone.getMessage(), mail.getMessage()));
         MimeMessage mm = getWrappedMessage(mail.getMessage());
         assertNotSame(mail.getMessage(), mailClone.getMessage());
@@ -194,7 +194,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
                 content + sep + body);
         MailImpl mail = new MailImpl("test", new MailAddress("test@test.com"), r, messageFromSources);
         // cloning the message
-        MailImpl mailClone = (MailImpl) mail.duplicate();
+        MailImpl mailClone = (MailImpl) mail.duplicate("clone");
         LifecycleUtil.dispose(mail);
 
         assertNotNull(getWrappedMessage(mailClone.getMessage()));


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