]> WPIA git - gigi.git/blobdiff - tests/org/cacert/gigi/email/TestSendmail.java
upd: make email sender address fixed.
[gigi.git] / tests / org / cacert / gigi / email / TestSendmail.java
index ce51307be89a7650e97d33223b907162e977edee..aa0e8a351164633c7ad629dec2eea8baf4d086de 100644 (file)
@@ -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"));