JAMES-2132 Add tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/811b8478 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/811b8478 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/811b8478 Branch: refs/heads/master Commit: 811b84780732332776ebcfb2e0e372760c47a591 Parents: bbc0bfa Author: benwa <btell...@linagora.com> Authored: Mon Aug 28 13:45:15 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Thu Aug 31 18:00:19 2017 +0700 ---------------------------------------------------------------------- mdn/pom.xml | 9 + .../java/org/apache/james/mdn/MDNFactory.java | 34 +- .../org/apache/james/mdn/MDNFactoryTest.java | 357 +++++++++++++++++++ 3 files changed, 389 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/811b8478/mdn/pom.xml ---------------------------------------------------------------------- diff --git a/mdn/pom.xml b/mdn/pom.xml index 39f58a9..0a7be2b 100644 --- a/mdn/pom.xml +++ b/mdn/pom.xml @@ -38,6 +38,15 @@ <groupId>org.apache.james</groupId> <artifactId>apache-mailet-base</artifactId> </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/james-project/blob/811b8478/mdn/src/main/java/org/apache/james/mdn/MDNFactory.java ---------------------------------------------------------------------- diff --git a/mdn/src/main/java/org/apache/james/mdn/MDNFactory.java b/mdn/src/main/java/org/apache/james/mdn/MDNFactory.java index bc3312f..31aae2b 100644 --- a/mdn/src/main/java/org/apache/james/mdn/MDNFactory.java +++ b/mdn/src/main/java/org/apache/james/mdn/MDNFactory.java @@ -72,6 +72,28 @@ public class MDNFactory multiPart.addBodyPart(humanPart); // Part 2: MDN Report Part + String mdnReport = generateMDNReport(reporting_UA_name, + reporting_UA_product, + original_recipient, + final_recipient, + original_message_id, + disposition); + + MimeBodyPart mdnPart = new MimeBodyPart(); + mdnPart.setContent(mdnReport, "message/disposition-notification"); + multiPart.addBodyPart(mdnPart); + + // Part 3: The optional third part, the original message is omitted. + // We don't want to propogate over-sized, virus infected or + // other undesirable mail! + // There is the option of adding a Text/RFC822-Headers part, which + // includes only the RFC 822 headers of the failed message. This is + // described in RFC 1892. It would be a useful addition! + return multiPart; + } + + public static String generateMDNReport(String reporting_UA_name, String reporting_UA_product, String original_recipient, + String final_recipient, String original_message_id, Disposition disposition) { // 1) reporting-ua-field StringBuilder mdnReport = new StringBuilder(128); mdnReport.append("Reporting-UA: "); @@ -99,17 +121,7 @@ public class MDNFactory // 5) disposition-field mdnReport.append(disposition.toString()); mdnReport.append("\r\n"); - MimeBodyPart mdnPart = new MimeBodyPart(); - mdnPart.setContent(mdnReport.toString(), "message/disposition-notification"); - multiPart.addBodyPart(mdnPart); - - // Part 3: The optional third part, the original message is omitted. - // We don't want to propogate over-sized, virus infected or - // other undesirable mail! - // There is the option of adding a Text/RFC822-Headers part, which - // includes only the RFC 822 headers of the failed message. This is - // described in RFC 1892. It would be a useful addition! - return multiPart; + return mdnReport.toString(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/811b8478/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java ---------------------------------------------------------------------- diff --git a/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java b/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java new file mode 100644 index 0000000..18337c6 --- /dev/null +++ b/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java @@ -0,0 +1,357 @@ +/**************************************************************** + * 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.mdn; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.james.mdn.action.mode.ActionModeAutomatic; +import org.apache.james.mdn.action.mode.ActionModeManual; +import org.apache.james.mdn.action.mode.DispositionActionMode; +import org.apache.james.mdn.modifier.DispositionModifier; +import org.apache.james.mdn.modifier.ModifierError; +import org.apache.james.mdn.modifier.ModifierExpired; +import org.apache.james.mdn.modifier.ModifierFailed; +import org.apache.james.mdn.modifier.ModifierMailboxTerminated; +import org.apache.james.mdn.modifier.ModifierSuperseded; +import org.apache.james.mdn.modifier.ModifierWarning; +import org.apache.james.mdn.sending.mode.DispositionSendingMode; +import org.apache.james.mdn.sending.mode.SendingModeAutomatic; +import org.apache.james.mdn.sending.mode.SendingModeManual; +import org.apache.james.mdn.type.DispositionType; +import org.apache.james.mdn.type.TypeDeleted; +import org.apache.james.mdn.type.TypeDenied; +import org.apache.james.mdn.type.TypeDispatched; +import org.apache.james.mdn.type.TypeDisplayed; +import org.apache.james.mdn.type.TypeFailed; +import org.apache.james.mdn.type.TypeProcessed; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class MDNFactoryTest { + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void generateMDNReportShouldFormatAutomaticActions() { + Disposition disposition = new Disposition(new ActionModeAutomatic(), new SendingModeAutomatic(), new TypeProcessed()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatManualActions() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), new TypeProcessed()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;processed/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatTypeDenied() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), new TypeDenied()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;denied/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatTypeDispatcher() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), new TypeDispatched()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;dispatched/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatTypeDisplayed() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), new TypeDisplayed()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;displayed/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatTypeFailed() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), new TypeFailed()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;failed/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatTypeDeleted() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;deleted/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatAllModifier() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierExpired(), new ModifierFailed(), + new ModifierMailboxTerminated(), new ModifierSuperseded(), new ModifierWarning()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;deleted/error,expired,failed,mailbox-terminated,superseded,warning\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNoModifier() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;deleted\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNoModifierNullType() { + DispositionType type = null; + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeManual(), type); + DispositionModifier[] dispostionModifiers = {}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-manually;\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNullActionMode() { + DispositionActionMode actionMode = null; + Disposition disposition = new Disposition(actionMode, new SendingModeManual(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: /MDN-sent-manually;deleted/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNullSendingMode() { + DispositionSendingMode sendingMode = null; + Disposition disposition = new Disposition(new ActionModeManual(), sendingMode, new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/;deleted/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNullUserAgentName() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeAutomatic(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String reporting_ua_name = null; + String report = MDNFactory.generateMDNReport(reporting_ua_name, "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: ; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNullUserAgentProduct() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeAutomatic(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String reporting_ua_product = null; + String report = MDNFactory.generateMDNReport("UA_name", reporting_ua_product, "originalRecipient", + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; \r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNullOriginalRecipient() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeAutomatic(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String original_recipient = null; + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", original_recipient, + "final_recipient", "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNullFinalRecipient() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeAutomatic(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String final_recipient = null; + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + final_recipient, "original_message_id", disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; \r\n" + + "Original-Message-ID: original_message_id\r\n" + + "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n"); + } + + @Test + public void generateMDNReportShouldFormatNullOriginalMessageId() { + Disposition disposition = new Disposition(new ActionModeManual(), new SendingModeAutomatic(), new TypeDeleted()); + DispositionModifier[] dispostionModifiers = {new ModifierError(), new ModifierFailed()}; + disposition.setDispositionModifiers(dispostionModifiers); + + String original_message_id = null; + String report = MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", original_message_id, disposition); + + assertThat(report) + .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" + + "Original-Recipient: rfc822; originalRecipient\r\n" + + "Final-Recepient: rfc822; final_recipient\r\n" + + "Original-Message-ID: \r\n" + + "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n"); + } + + @Test + public void generateMDNReportThrowOnNullDisposition() { + Disposition disposition = null; + expectedException.expect(NullPointerException.class); + MDNFactory.generateMDNReport("UA_name", "UA_product", "originalRecipient", + "final_recipient", "original_message_id", disposition); + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org