import org.cacert.gigi.email.EmailProvider;
-public class TestEmailReciever extends EmailProvider implements Runnable {
+public final class TestEmailReciever extends EmailProvider implements Runnable {
public class TestMail {
s.setSoTimeout(1000 * 60 * 60);
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
- new Thread(this).start();
setInstance(this);
}
+ public void start() {
+ new Thread(this, "Mail reciever").start();
+ }
+
LinkedBlockingQueue<TestMail> mails = new LinkedBlockingQueue<TestEmailReciever.TestMail>();
- public TestMail recieve() throws InterruptedException {
- return mails.poll(5, TimeUnit.SECONDS);
+ /**
+ * Retrieves an outgoing mail from the system. The method will return a
+ * {@link TestMail} or fail.
+ *
+ * @return The intercepted {@link TestMail}
+ * @see #poll()
+ */
+ public TestMail receive() {
+ TestMail poll;
+
+ try {
+ poll = mails.poll(60, TimeUnit.SECONDS);
+
+ } catch (InterruptedException e) {
+ throw new AssertionError("Interrupted while recieving mails");
+ }
+ if (poll == null) {
+ throw new AssertionError("Mail recieving timed out");
+ }
+
+ return poll;
+ }
+
+ /**
+ * Retrieves an outgoing mail from the system or returns <code>null</code>
+ * if there was no mail sent in 30 seconds.
+ *
+ * @return The intercepted {@link TestMail} or <code>null</code> if no mail
+ * has been sent.
+ * @see #receive()
+ */
+ public TestMail poll() {
+ try {
+ return mails.poll(60, TimeUnit.SECONDS);
+
+ } catch (InterruptedException e) {
+ throw new AssertionError("Interrupted while recieving mails");
+ }
}
@Override