From 7c8c31300b338ce8a19fab549c5b4dd8fa58f49e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Thu, 5 Nov 2015 16:34:55 +0100 Subject: [PATCH] add: devel-convenience TestEmailProvider can have a secondary mail provider --- src/org/cacert/gigi/email/EmailProvider.java | 2 +- .../cacert/gigi/email/TestEmailProvider.java | 43 +++++++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/org/cacert/gigi/email/EmailProvider.java b/src/org/cacert/gigi/email/EmailProvider.java index a625e401..ff9fde7a 100644 --- a/src/org/cacert/gigi/email/EmailProvider.java +++ b/src/org/cacert/gigi/email/EmailProvider.java @@ -34,7 +34,7 @@ public abstract class EmailProvider { private PrivateKey k; - protected final void init(Certificate c, Key k) { + protected void init(Certificate c, Key k) { this.c = (X509Certificate) c; this.k = (PrivateKey) k; } diff --git a/util-testing/org/cacert/gigi/email/TestEmailProvider.java b/util-testing/org/cacert/gigi/email/TestEmailProvider.java index c5c94470..bee64f4b 100644 --- a/util-testing/org/cacert/gigi/email/TestEmailProvider.java +++ b/util-testing/org/cacert/gigi/email/TestEmailProvider.java @@ -6,6 +6,9 @@ import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; +import java.net.SocketTimeoutException; +import java.security.Key; +import java.security.cert.Certificate; import java.util.Properties; /** @@ -22,7 +25,18 @@ public class TestEmailProvider extends EmailProvider { private DataInputStream in; + private EmailProvider target; + protected TestEmailProvider(Properties props) { + try { + String name = props.getProperty("emailProvider.test.target"); + if (name != null) { + Class c = Class.forName(name); + target = (EmailProvider) c.getDeclaredConstructor(Properties.class).newInstance(props); + } + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } try { servs = new ServerSocket(Integer.parseInt(props.getProperty("emailProvider.port")), 10, InetAddress.getByName("127.0.0.1")); } catch (IOException e) { @@ -33,8 +47,14 @@ 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 { while (true) { - assureLocalConnection(); + if ( !assureLocalConnection() && target != null) { + target.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 +69,7 @@ public class TestEmailProvider extends EmailProvider { } } - private void assureLocalConnection() throws IOException { + private boolean assureLocalConnection() throws IOException { if (out != null) { try { out.writeUTF("ping"); @@ -58,16 +78,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 ( !assureLocalConnection() && target != null) { + return checkEmailServer(forUid, address); + } try { out.writeUTF("challengeAddrBox"); out.writeUTF(address); @@ -86,4 +114,11 @@ public class TestEmailProvider extends EmailProvider { } } + @Override + protected void init(Certificate c, Key k) { + super.init(c, k); + if (target != null) { + target.init(c, k); + } + } } -- 2.39.2