/* * Copyright 2010-2017 Norwegian Agency for Public Management and eGovernment (Difi) * * Licensed under the EUPL, Version 1.1 or – as soon they * will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * * You may not use this work except in compliance with the Licence. * * You may obtain a copy of the Licence at: * * https://joinup.ec.europa.eu/community/eupl/og_page/eupl * * Unless required by applicable law or agreed to in * writing, software distributed under the Licence is * distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. * See the Licence for the specific language governing * permissions and limitations under the Licence. */ package no.difi.oxalis.as2.util; import org.testng.annotations.Test; import javax.activation.MimeType; import javax.activation.MimeTypeParseException; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.io.IOException; import java.io.InputStream; import java.util.Map; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; /** * @author steinar * Date: 13.11.13 * Time: 10:30 */ public class MdnMimeMessageInspectorTest { public static final String OPENAS2_MDN_TXT = "openas2-mdn.txt"; public static final String OPENAS2_MDN_NO_HEADERS_TXT = "openas2-mdn-no-headers.txt"; public static final String IBX_MDN_BASE64 = "real-mdn-examples/ibx-mdn-base64.txt"; @Test public void parseOpenAS2MDN() throws Exception { InputStream resourceAsStream = MdnMimeMessageInspectorTest.class.getClassLoader().getResourceAsStream(OPENAS2_MDN_TXT); assertNotNull(resourceAsStream, "Unable to find " + OPENAS2_MDN_TXT + " in class path"); MimeMessage mimeMessage = MimeMessageHelper.createMimeMessage(resourceAsStream); MdnMimeMessageInspector mdnMimeMessageInspector = new MdnMimeMessageInspector(mimeMessage); String plainText = mdnMimeMessageInspector.getPlainTextPartAsText(); assertNotNull(plainText); } @Test public void parseOpenAS2MDNWithoutHeaders() throws MimeTypeParseException, MessagingException, IOException { InputStream resourceAsStream = MdnMimeMessageInspectorTest.class.getClassLoader().getResourceAsStream(OPENAS2_MDN_NO_HEADERS_TXT); assertNotNull(resourceAsStream, "Unable to find " + OPENAS2_MDN_NO_HEADERS_TXT + " in class path"); MimeMessage mimeMessage = MimeMessageHelper.parseMultipart(resourceAsStream, "multipart/signed; protocol=\"application/pkcs7-signature\"; micalg=sha1;" + "\tboundary=\"----=_Part_2_1193010873.1384331414156\""); MimeMultipart mimeMultipart = (MimeMultipart) mimeMessage.getContent(); assertEquals(new MimeType(mimeMultipart.getContentType()).getBaseType(), new MimeType("multipart/signed").getBaseType()); MdnMimeMessageInspector mdnMimeMessageInspector = new MdnMimeMessageInspector(mimeMessage); String plainText = mdnMimeMessageInspector.getPlainTextPartAsText(); assertNotNull(plainText); } @Test public void parseOpenAS2MDNFields() throws Exception { InputStream resourceAsStream = MdnMimeMessageInspectorTest.class.getClassLoader().getResourceAsStream(OPENAS2_MDN_TXT); assertNotNull(resourceAsStream, "Unable to find " + OPENAS2_MDN_TXT + " in class path"); MimeMessage mimeMessage = MimeMessageHelper.createMimeMessage(resourceAsStream); MdnMimeMessageInspector mdnMimeMessageInspector = new MdnMimeMessageInspector(mimeMessage); Map<String, String> fields = mdnMimeMessageInspector.getMdnFields(); assertEquals(fields.get("Original-Recipient"), "rfc822; OpenAS2A"); assertEquals(fields.get("Final-Recipient"), "rfc822; OpenAS2A"); assertEquals(fields.get("Original-Message-ID"), "42"); assertEquals(fields.get("Received-Content-MIC"), "Fp67Ews9SJa5pKGXVl07dBuVW4I=, sha1"); } @Test public void parseBase64EncodedMDN() throws Exception { InputStream resourceAsStream = MdnMimeMessageInspectorTest.class.getClassLoader().getResourceAsStream(IBX_MDN_BASE64); assertNotNull(resourceAsStream, "Unable to find " + IBX_MDN_BASE64 + " in class path"); MimeMessage mimeMessage = MimeMessageHelper.createMimeMessage(resourceAsStream); MdnMimeMessageInspector mdnMimeMessageInspector = new MdnMimeMessageInspector(mimeMessage); Map<String, String> fields = mdnMimeMessageInspector.getMdnFields(); assertEquals(fields.size(), 6); assertEquals(fields.get("Reporting-UA"), "Oxalis"); assertEquals(fields.get("Disposition"), "automatic-action/MDN-sent-automatically; processed"); assertEquals(fields.get("Original-Recipient"), "rfc822; APP_1000000030"); assertEquals(fields.get("Final-Recipient"), "rfc822; APP_1000000030"); assertEquals(fields.get("Original-Message-ID"), "19a9099c-c553-4ffa-9c60-de2fcfa2922f"); assertEquals(fields.get("Received-Content-MIC"), "VZOW8aRv9e8uEQEdGRdxwcOYH1g=, sha1"); } }