]> WPIA git - gigi.git/blobdiff - util-testing/org/cacert/gigi/email/TestEmailProvider.java
upd: make email sender address fixed.
[gigi.git] / util-testing / org / cacert / gigi / email / TestEmailProvider.java
index 7beaa9a98001bf190cbe79546cc8ea3601473a69..eb5eb820d795c8e21e10030404a0ce9d8def203c 100644 (file)
@@ -6,9 +6,14 @@ import java.io.IOException;
 import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.net.SocketTimeoutException;
 import java.util.Properties;
 
-class TestEmailProvider extends EmailProvider {
+/**
+ * This class intercepts emails so that the test cases can evaluate them
+ * automatically.
+ */
+public class TestEmailProvider extends DelegateMailProvider {
 
     private ServerSocket servs;
 
@@ -19,6 +24,7 @@ class TestEmailProvider extends EmailProvider {
     private DataInputStream in;
 
     protected TestEmailProvider(Properties props) {
+        super(props, props.getProperty("emailProvider.test.target"));
         try {
             servs = new ServerSocket(Integer.parseInt(props.getProperty("emailProvider.port")), 10, InetAddress.getByName("127.0.0.1"));
         } catch (IOException e) {
@@ -27,15 +33,20 @@ class TestEmailProvider extends EmailProvider {
     }
 
     @Override
-    public synchronized void sendmail(String to, String subject, String message, String from, String replyto, String toname, String fromname, String errorsto, boolean extra) throws IOException {
+    public synchronized void sendMail(String to, String subject, String message, String replyto, String toname, String fromname, String errorsto, boolean extra) throws IOException {
         while (true) {
-            assureLocalConnection();
+            if ( !ensureLocalConnection() && getTarget() != null) {
+                super.sendMail(to, subject, message, replyto, toname, fromname, errorsto, extra);
+                return;
+            }
             try {
+                if (out == null) {
+                    continue;
+                }
                 out.writeUTF("mail");
                 write(to);
                 write(subject);
                 write(message);
-                write(from);
                 write(replyto);
                 out.flush();
                 return;
@@ -45,7 +56,7 @@ class TestEmailProvider extends EmailProvider {
         }
     }
 
-    private void assureLocalConnection() throws IOException {
+    private boolean ensureLocalConnection() throws IOException {
         if (out != null) {
             try {
                 out.writeUTF("ping");
@@ -54,16 +65,24 @@ class TestEmailProvider extends EmailProvider {
             }
         }
         if (client == null || client.isClosed()) {
-            client = servs.accept();
+            servs.setSoTimeout(2000);
+            try {
+                client = servs.accept();
+            } catch (SocketTimeoutException e) {
+                return false;
+            }
             out = new DataOutputStream(client.getOutputStream());
             in = new DataInputStream(client.getInputStream());
         }
+        return true;
     }
 
     @Override
     public synchronized String checkEmailServer(int forUid, String address) throws IOException {
         while (true) {
-            assureLocalConnection();
+            if ( !ensureLocalConnection() && getTarget() != null) {
+                return super.checkEmailServer(forUid, address);
+            }
             try {
                 out.writeUTF("challengeAddrBox");
                 out.writeUTF(address);
@@ -81,5 +100,4 @@ class TestEmailProvider extends EmailProvider {
             out.writeUTF(to);
         }
     }
-
 }