]> WPIA git - gigi.git/blobdiff - util-testing/org/cacert/gigi/email/TestEmailProvider.java
upd: correct internal method name "ensureLocalConnection"
[gigi.git] / util-testing / org / cacert / gigi / email / TestEmailProvider.java
index c5c94470750da5d214fe39dcbb1a18d39e64830c..91c0440504e7c46c259dbc5da1807045b32e3415 100644 (file)
@@ -6,13 +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;
 
 /**
  * This class intercepts emails so that the test cases can evaluate them
  * automatically.
  */
-public class TestEmailProvider extends EmailProvider {
+public class TestEmailProvider extends DelegateMailProvider {
 
     private ServerSocket servs;
 
@@ -23,6 +24,7 @@ public 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) {
@@ -31,10 +33,16 @@ public 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 from, String replyto, String toname, String fromname, String errorsto, boolean extra) throws IOException {
         while (true) {
-            assureLocalConnection();
+            if ( !ensureLocalConnection() && getTarget() != null) {
+                super.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra);
+                return;
+            }
             try {
+                if (out == null) {
+                    continue;
+                }
                 out.writeUTF("mail");
                 write(to);
                 write(subject);
@@ -49,7 +57,7 @@ public class TestEmailProvider extends EmailProvider {
         }
     }
 
-    private void assureLocalConnection() throws IOException {
+    private boolean ensureLocalConnection() throws IOException {
         if (out != null) {
             try {
                 out.writeUTF("ping");
@@ -58,16 +66,24 @@ public 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);
@@ -85,5 +101,4 @@ public class TestEmailProvider extends EmailProvider {
             out.writeUTF(to);
         }
     }
-
 }