Skip to content

Commit 953e13e

Browse files
committed
Added junit test that uses password protected encrypted test data zip, which is only executed when the relevant password is provided in the properties file (which it is not in the repo)
1 parent f52ec45 commit 953e13e

File tree

5 files changed

+131
-2
lines changed

5 files changed

+131
-2
lines changed

modules/core-test-module/pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,21 @@
2828
<version>${project.version}</version>
2929
<scope>compile</scope>
3030
</dependency>
31+
32+
<dependency>
33+
<groupId>net.lingala.zip4j</groupId>
34+
<artifactId>zip4j</artifactId>
35+
<version>2.6.1</version>
36+
</dependency>
37+
<dependency>
38+
<groupId>commons-io</groupId>
39+
<artifactId>commons-io</artifactId>
40+
<version>2.7</version>
41+
</dependency>
42+
<dependency>
43+
<groupId>org.assertj</groupId>
44+
<artifactId>assertj-core</artifactId>
45+
<version>2.9.1</version>
46+
</dependency>
3147
</dependencies>
3248
</project>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package testutil;
2+
3+
import net.lingala.zip4j.ZipFile;
4+
import org.apache.commons.io.FileUtils;
5+
import org.simplejavamail.config.ConfigLoader;
6+
7+
import java.io.File;
8+
import java.io.IOException;
9+
import java.io.InputStream;
10+
import java.util.Properties;
11+
12+
import static demo.ResourceFolderHelper.determineResourceFolder;
13+
import static org.assertj.core.api.Assumptions.assumeThat;
14+
import static org.simplejavamail.internal.util.MiscUtil.checkArgumentNotEmpty;
15+
16+
public class SecureTestDataHelper {
17+
18+
private static final String RESOURCES = determineResourceFolder("simple-java-mail") + "/test/resources";
19+
20+
public static void runTestWithSecureTestData(PasswordsConsumer consumer)
21+
throws Exception {
22+
try {
23+
consumer.accept(accessSecureTestData());
24+
} finally {
25+
cleanupSecureTestData();
26+
}
27+
}
28+
29+
private static Properties accessSecureTestData()
30+
throws IOException {
31+
final InputStream inputStream = ConfigLoader.class.getClassLoader().getResourceAsStream("secure-testdata-passwords.properties");
32+
final Properties passwords = new Properties();
33+
passwords.load(checkArgumentNotEmpty(inputStream, "InputStream was null"));
34+
35+
assumeThat(passwords.getProperty("legacy-signed-enveloped-email-zip"))
36+
.as("secure-testdata-passwords.properties")
37+
.isNotEmpty();
38+
39+
final String secureDataPassword = passwords.getProperty("legacy-signed-enveloped-email-zip");
40+
new ZipFile(RESOURCES + "/secure-testdata/legacy-signed-enveloped-email.zip", secureDataPassword.toCharArray())
41+
.extractAll(RESOURCES + "/secure-testdata/legacy-signed-enveloped-email");
42+
43+
return passwords;
44+
}
45+
46+
private static void cleanupSecureTestData() {
47+
FileUtils.deleteQuietly(new File(RESOURCES + "/secure-testdata/legacy-signed-enveloped-email"));
48+
}
49+
50+
public interface PasswordsConsumer {
51+
void accept(Properties passwords);
52+
}
53+
}

modules/simple-java-mail/src/test/java/org/simplejavamail/internal/smimesupport/TestSmimeSelfSigned.java

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
11
package org.simplejavamail.internal.smimesupport;
22

3+
import org.assertj.core.api.Assumptions;
34
import org.junit.Test;
45
import org.simplejavamail.api.email.AttachmentResource;
56
import org.simplejavamail.api.email.Email;
67
import org.simplejavamail.api.email.EmailAssert;
78
import org.simplejavamail.api.email.OriginalSmimeDetails.SmimeMode;
89
import org.simplejavamail.api.email.Recipient;
10+
import org.simplejavamail.api.mailer.config.Pkcs12Config;
911
import org.simplejavamail.converter.EmailConverter;
1012
import org.simplejavamail.internal.smimesupport.model.OriginalSmimeDetailsImpl;
13+
import testutil.SecureTestDataHelper;
14+
import testutil.SecureTestDataHelper.PasswordsConsumer;
1115

1216
import java.io.File;
17+
import java.util.Properties;
1318

1419
import static demo.ResourceFolderHelper.determineResourceFolder;
1520
import static java.lang.String.format;
1621
import static javax.mail.Message.RecipientType.TO;
1722
import static org.assertj.core.api.Assertions.assertThat;
23+
import static org.assertj.core.api.Assumptions.assumeThat;
1824
import static org.simplejavamail.internal.util.MiscUtil.normalizeNewlines;
1925
import static org.simplejavamail.util.TestDataHelper.loadPkcs12KeyStore;
2026

2127
public class TestSmimeSelfSigned {
2228

23-
private static final String RESOURCES_PKCS = determineResourceFolder("simple-java-mail") + "/test/resources/pkcs12";
29+
private static final String RESOURCES = determineResourceFolder("simple-java-mail") + "/test/resources";
30+
private static final String RESOURCES_PKCS = RESOURCES + "/pkcs12";
2431
private static final String RESOURCES_MESSAGES = RESOURCES_PKCS + "/test messages";
2532

2633
@Test
@@ -163,6 +170,49 @@ public void testEncryptedMessageEml() {
163170
.build());
164171
}
165172

173+
@Test
174+
public void testEncryptedMessageEml_LegacySignedEnvelopedAttachment()
175+
throws Exception {
176+
SecureTestDataHelper.runTestWithSecureTestData(new PasswordsConsumer() {
177+
@Override
178+
public void accept(final Properties passwords) {
179+
final Pkcs12Config pkcs12Config = Pkcs12Config.builder()
180+
.pkcs12Store(RESOURCES + "/secure-testdata/legacy-signed-enveloped-email/7acc30df-26dd-40b3-9d45-e31f681e755b.p12")
181+
.storePassword(passwords.getProperty("legacy-signed-enveloped-email-zip-keystore-password"))
182+
.keyAlias("sectigo limited id von ")
183+
.keyPassword(passwords.getProperty("legacy-signed-enveloped-email-zip-key-password"))
184+
.build();
185+
Email emailParsedFromEml = EmailConverter.emlToEmail(new File(RESOURCES + "/secure-testdata/legacy-signed-enveloped-email/email.eml"), pkcs12Config);
186+
187+
EmailAssert.assertThat(emailParsedFromEml).hasSubject("Ausarbeitung einer Schutzrechtsanmeldung : R.389390, Hr/Pv");
188+
189+
assertThat(normalizeNewlines(emailParsedFromEml.getPlainText())).doesNotStartWith("This is a multipart message in MIME format.");
190+
assertThat(normalizeNewlines(emailParsedFromEml.getPlainText())).contains("Sehr geehrte Damen und Herren,");
191+
192+
assertThat(emailParsedFromEml.getEmbeddedImages()).isEmpty();
193+
194+
assertThat(emailParsedFromEml.getAttachments()).extracting("name")
195+
.containsExactlyInAnyOrder("smime.p7m",
196+
"PDmembran_m_Stuelement_pdf_3373833.pdf",
197+
"IN_COVER_SHEET_3374652_pdf_3374715.pdf",
198+
"389390_Pruefung_des_Entwurfs_3493097.doc"
199+
);
200+
assertThat(emailParsedFromEml.getDecryptedAttachments()).extracting("name")
201+
.containsExactlyInAnyOrder("signed-email.eml",
202+
"PDmembran_m_Stuelement_pdf_3373833.pdf",
203+
"IN_COVER_SHEET_3374652_pdf_3374715.pdf",
204+
"389390_Pruefung_des_Entwurfs_3493097.doc");
205+
206+
EmailAssert.assertThat(emailParsedFromEml).hasOriginalSmimeDetails(OriginalSmimeDetailsImpl.builder()
207+
.smimeMode(SmimeMode.SIGNED_ENCRYPTED)
208+
.smimeMime("application/pkcs7-mime")
209+
.smimeType("enveloped-data")
210+
.smimeName("smime.p7m")
211+
.build());
212+
}
213+
});
214+
}
215+
166216
@Test
167217
public void testSignedAndEncryptedMessageMsg() {
168218
Email emailParsedFromMsg = EmailConverter.outlookMsgToEmail(new File(RESOURCES_MESSAGES + "/S_MIME test message signed & encrypted.msg"), loadPkcs12KeyStore());
@@ -185,7 +235,8 @@ public void testSignedAndEncryptedMessageMsg() {
185235
assertThat(emailParsedFromMsg.getHTMLText()).contains(format("<img src=\"cid:%s\"", embeddedImg.getName()));
186236

187237
assertThat(emailParsedFromMsg.getAttachments()).hasSize(3);
188-
assertThat(emailParsedFromMsg.getAttachments()).extracting("name").containsExactlyInAnyOrder("smime.p7m", "smime.p7s", "03-07-2005 errata SharnErrata.pdf");
238+
assertThat(emailParsedFromMsg.getAttachments()).extracting("name")
239+
.containsExactlyInAnyOrder("smime.p7m", "smime.p7s", "03-07-2005 errata SharnErrata.pdf");
189240
assertThat(emailParsedFromMsg.getDecryptedAttachments()).hasSize(3);
190241
assertThat(emailParsedFromMsg.getDecryptedAttachments()).extracting("name").containsExactlyInAnyOrder("smime.p7s", "signed-email.eml", "03-07-2005 errata SharnErrata.pdf");
191242

@@ -204,4 +255,10 @@ public void testSignedAndEncryptedMessageMsg() {
204255
.smimeSignedBy("Benny Bottema")
205256
.build());
206257
}
258+
259+
private static String assumeSystemVariablePresent(String name) {
260+
final String systemVariable = System.getenv(name);
261+
assumeThat(systemVariable).as("system variable " + name).isNotNull();
262+
return systemVariable;
263+
}
207264
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
legacy-signed-enveloped-email-zip=
2+
legacy-signed-enveloped-email-zip-keystore-password=
3+
legacy-signed-enveloped-email-zip-key-password=
Binary file not shown.

0 commit comments

Comments
 (0)