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