From: Felix Dörre Date: Thu, 4 Aug 2016 19:10:22 +0000 (+0200) Subject: add: allow chaining mail providers after the "TestManager" provider X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=d6c5f27b9ae2dd822d3eb6c21df0662a73ded27a add: allow chaining mail providers after the "TestManager" provider Change-Id: Iaf50da91be194af3d81ab91b28f481431fe7e861 --- diff --git a/util-testing/org/cacert/gigi/email/DelegateMailProvider.java b/util-testing/org/cacert/gigi/email/DelegateMailProvider.java new file mode 100644 index 00000000..c0143ebe --- /dev/null +++ b/util-testing/org/cacert/gigi/email/DelegateMailProvider.java @@ -0,0 +1,49 @@ +package org.cacert.gigi.email; + +import java.io.IOException; +import java.security.Key; +import java.security.cert.Certificate; +import java.util.Properties; + +public abstract class DelegateMailProvider extends EmailProvider { + + private EmailProvider target; + + public DelegateMailProvider(Properties props, String name) { + try { + if (name != null) { + Class c = Class.forName(name); + target = (EmailProvider) c.getDeclaredConstructor(Properties.class).newInstance(props); + } + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } + } + + public EmailProvider getTarget() { + return target; + } + + @Override + public void sendMail(String to, String subject, String message, String from, String replyto, String toname, String fromname, String errorsto, boolean extra) throws IOException { + if (target != null) { + target.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra); + } + } + + @Override + public String checkEmailServer(int forUid, String address) throws IOException { + if (target != null) { + return target.checkEmailServer(forUid, address); + } + return OK; + } + + @Override + protected void init(Certificate c, Key k) { + super.init(c, k); + if (target != null) { + target.init(c, k); + } + } +} diff --git a/util-testing/org/cacert/gigi/email/TestEmailProvider.java b/util-testing/org/cacert/gigi/email/TestEmailProvider.java index 8d47142d..ab1fa37b 100644 --- a/util-testing/org/cacert/gigi/email/TestEmailProvider.java +++ b/util-testing/org/cacert/gigi/email/TestEmailProvider.java @@ -7,15 +7,13 @@ 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; /** * 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; @@ -25,18 +23,8 @@ 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(); - } + 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) { @@ -47,8 +35,8 @@ 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) { - if ( !assureLocalConnection() && target != null) { - target.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra); + if ( !assureLocalConnection() && getTarget() != null) { + super.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra); return; } try { @@ -93,8 +81,8 @@ public class TestEmailProvider extends EmailProvider { @Override public synchronized String checkEmailServer(int forUid, String address) throws IOException { while (true) { - if ( !assureLocalConnection() && target != null) { - return target.checkEmailServer(forUid, address); + if ( !assureLocalConnection() && getTarget() != null) { + return super.checkEmailServer(forUid, address); } try { out.writeUTF("challengeAddrBox"); @@ -113,12 +101,4 @@ public class TestEmailProvider extends EmailProvider { out.writeUTF(to); } } - - @Override - protected void init(Certificate c, Key k) { - super.init(c, k); - if (target != null) { - target.init(c, k); - } - } } diff --git a/util-testing/org/cacert/gigi/pages/Manager.java b/util-testing/org/cacert/gigi/pages/Manager.java index f6de409b..2bc7bdea 100644 --- a/util-testing/org/cacert/gigi/pages/Manager.java +++ b/util-testing/org/cacert/gigi/pages/Manager.java @@ -42,7 +42,7 @@ import org.cacert.gigi.dbObjects.Group; import org.cacert.gigi.dbObjects.NamePart; import org.cacert.gigi.dbObjects.NamePart.NamePartType; import org.cacert.gigi.dbObjects.User; -import org.cacert.gigi.email.EmailProvider; +import org.cacert.gigi.email.DelegateMailProvider; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.IterableDataset; import org.cacert.gigi.output.template.Template; @@ -140,9 +140,11 @@ public class Manager extends Page { return instance; } - public static class MailFetcher extends EmailProvider { + public static class MailFetcher extends DelegateMailProvider { - public MailFetcher(Properties p) {} + public MailFetcher(Properties props) { + super(props, props.getProperty("emailProvider.manager.target")); + } @Override public String checkEmailServer(int forUid, String address) throws IOException { @@ -157,6 +159,7 @@ public class Manager extends Page { mails.put(to, hismails = new LinkedList<>()); } hismails.addFirst(subject + "\n" + message); + super.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra); } }