X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=tests%2Forg%2Fcacert%2Fgigi%2Femail%2FTestSendmail.java;h=aa0e8a351164633c7ad629dec2eea8baf4d086de;hp=ce51307be89a7650e97d33223b907162e977edee;hb=f97a9d4028195b328b7ff4267b7b4d893eee8995;hpb=3ad63175cc8309ab090f2df24b593e61da421bbe diff --git a/tests/org/cacert/gigi/email/TestSendmail.java b/tests/org/cacert/gigi/email/TestSendmail.java index ce51307b..aa0e8a35 100644 --- a/tests/org/cacert/gigi/email/TestSendmail.java +++ b/tests/org/cacert/gigi/email/TestSendmail.java @@ -1,12 +1,14 @@ package org.cacert.gigi.email; -import static org.junit.Assume.*; -import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; +import static org.junit.Assume.*; import java.io.BufferedReader; +import java.io.EOFException; import java.io.IOException; import java.io.InputStreamReader; +import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.security.GeneralSecurityException; @@ -19,10 +21,12 @@ import java.security.cert.CertificateException; import java.util.Base64; import java.util.Date; import java.util.Properties; +import java.util.Random; import javax.net.ssl.SSLSocketFactory; import org.cacert.gigi.testUtils.ConfiguredTest; +import org.cacert.gigi.util.ServerConstants; import org.junit.Test; import sun.security.x509.AlgorithmId; @@ -37,6 +41,8 @@ import sun.security.x509.X509CertInfo; public class TestSendmail extends ConfiguredTest { + private static final Random rng = new Random(); + @Test public void testSendmail() throws IOException, GeneralSecurityException { initSelfsign(); @@ -49,43 +55,43 @@ public class TestSendmail extends ConfiguredTest { String subj = "subj-" + createUniqueName(); String msg = "msg-" + createUniqueName(); - EmailProvider.getInstance().sendmail(succmail, subj, msg, "system@cacert.org", "system@cacert.org", "Testtarget", "Testsender", null, false); + EmailProvider.getInstance().sendMail(succmail, subj, msg, "system@cacert.org", "Testtarget", "Testsender", null, false); - Socket s = SSLSocketFactory.getDefault().createSocket(imap, 993); - PrintWriter pw = new PrintWriter(s.getOutputStream(), true); - BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); - pw.println("a001 login " + imapuser + " " + pass); - imapUntil(br, "a001"); - pw.println("a002 select inbox"); - String overview = imapUntil(br, "a002"); - overview = overview.replaceFirst(".*\\* ([0-9]+) EXISTS.*", "$1"); - int cont = Integer.parseInt(overview); + try (Socket s = SSLSocketFactory.getDefault().createSocket(imap, 993);// + PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream(), "UTF-8"), true);// + BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"))) { + pw.println("a001 login " + imapuser + " " + pass); + imapUntil(br, "a001"); + pw.println("a002 select inbox"); + String overview = imapUntil(br, "a002"); + overview = overview.replaceFirst(".*\\* ([0-9]+) EXISTS.*", "$1"); + int cont = Integer.parseInt(overview); - int msgid = -1; - for (int i = 1; i <= cont; i++) { - pw.println("m003" + i + " fetch " + i + " body[header]"); - String body = imapUntil(br, "m003" + i); - if (body.contains(subj)) { - msgid = i; - break; + int msgid = -1; + for (int i = 1; i <= cont; i++) { + pw.println("m003" + i + " fetch " + i + " body[header]"); + String body = imapUntil(br, "m003" + i); + if (body.contains(subj)) { + msgid = i; + break; + } } - } - assertNotEquals( -1, msgid); - pw.println("a003 fetch " + msgid + " body[]"); - String body = imapUntil(br, "a003"); - pw.println("delete store " + msgid + " +flags \\deleted"); - imapUntil(br, "delete"); - pw.println("exp expunge"); - imapUntil(br, "exp"); - pw.println("log logout"); - imapUntil(br, "log"); - assertThat(body, containsString("From: support@cacert.local")); - assertThat(body, containsString("To: gigi-testuser@dogcraft.de")); - assertThat(body, containsString("Subject: " + subj)); - assertThat(body, containsString(Base64.getEncoder().encodeToString(msg.getBytes("UTF-8")))); - - // TODO maybe verify signature + assertNotEquals( -1, msgid); + pw.println("a003 fetch " + msgid + " body[]"); + String body = imapUntil(br, "a003"); + pw.println("delete store " + msgid + " +flags \\deleted"); + imapUntil(br, "delete"); + pw.println("exp expunge"); + imapUntil(br, "exp"); + pw.println("log logout"); + imapUntil(br, "log"); + assertThat(body, containsString("From: support@" + ServerConstants.getWwwHostName().replaceAll("^www.", ""))); + assertThat(body, containsString("To: gigi-testuser@dogcraft.de")); + assertThat(body, containsString("Subject: " + subj)); + assertThat(body, containsString(Base64.getEncoder().encodeToString(msg.getBytes("UTF-8")))); + // TODO maybe verify signature + } } private String imapUntil(BufferedReader br, String target) throws IOException { @@ -93,19 +99,25 @@ public class TestSendmail extends ConfiguredTest { String line = ""; while ( !line.startsWith(target)) { line = br.readLine(); + if (line == null) { + throw new EOFException(); + } response.append(line); } return response.toString(); } private void initSelfsign() throws GeneralSecurityException, CertificateException, IOException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException { + assumeNotNull(getTestProps().getProperty("emailProvider.smtpHost"), getTestProps().getProperty("emailProvider.smtpPort")); Properties prop = new Properties(); - prop.setProperty("emailProvider", "org.cacert.gigi.email.Sendmail"); + prop.setProperty("emailProvider", "org.cacert.gigi.email.SendMail"); + prop.setProperty("emailProvider.smtpHost", getTestProps().getProperty("emailProvider.smtpHost")); + prop.setProperty("emailProvider.smtpPort", getTestProps().getProperty("emailProvider.smtpPort")); KeyPair kp = generateKeypair(); X509CertInfo info = new X509CertInfo(); // Add all mandatory attributes info.set(X509CertInfo.VERSION, new CertificateVersion(CertificateVersion.V3)); - info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(new java.util.Random().nextInt() & 0x7fffffff)); + info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(rng.nextInt() & 0x7fffffff)); AlgorithmId algID = AlgorithmId.get("SHA256WithRSA"); info.set(X509CertInfo.ALGORITHM_ID, new CertificateAlgorithmId(algID)); info.set(X509CertInfo.SUBJECT, new X500Name("EMAIL=system@cacert.org"));