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;
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) {
}
@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 ( !assureLocalConnection() && 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);
}
}
- private void assureLocalConnection() throws IOException {
+ private boolean assureLocalConnection() throws IOException {
if (out != null) {
try {
out.writeUTF("ping");
}
}
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() && getTarget() != null) {
+ return super.checkEmailServer(forUid, address);
+ }
try {
out.writeUTF("challengeAddrBox");
out.writeUTF(address);
out.writeUTF(to);
}
}
-
}