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 <matth...@apache.org> Authored: Tue Nov 14 15:36:59 2017 +0100 Committer: Antoine Duprat <adup...@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("t...@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("t...@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("t...@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("t...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org