package org.subethamail.smtp;
import java.io.IOException;
import java.io.InputStream;
import org.junit.Ignore;
import org.junit.Test;
import org.subethamail.smtp.MessageHandlerFactory;
import org.subethamail.smtp.TooMuchDataException;
import org.subethamail.smtp.client.SMTPException;
import org.subethamail.smtp.client.SmartClient;
import org.subethamail.smtp.helper.SimpleMessageListener;
import org.subethamail.smtp.helper.SimpleMessageListenerAdapter;
import org.subethamail.smtp.server.SMTPServer;
public class ThreadDeathLoggingTest
{
/**
* This test can be used to check if an Error or RuntimeException actually
* logged, but it requires manual running. For example remove mail.jar from
* the classpath, and check the error log if it contains logged NoClassDef
* exception. See also the comment within the function how to check for a
* NPE. Note that any exception that causes a thread death is printed on
* stderr by the default uncaughtExceptionHandler of the JRE, but this is
* not what you are looking for.
*/
@Ignore("Requires manual setup and verification")
@Test()
public void testNoMailJar() throws SMTPException, IOException
{
// if this variable is set to null, than a NPE will be thrown, which is
// also good for testing.
MessageHandlerFactory handlerFactory = new SimpleMessageListenerAdapter(new SimpleMessageListener()
{
@Override
public void deliver(String from, String recipient, InputStream data) throws TooMuchDataException,
IOException
{
return;
}
@Override
public boolean accept(String from, String recipient)
{
return false;
}
});
SMTPServer smtpServer = new SMTPServer(handlerFactory);
smtpServer.setPort(0);
smtpServer.start();
try
{
SmartClient client = new SmartClient("localhost", smtpServer.getPort(), "test-client.example.org");
client.from("john@exmaple.com");
client.to("jane@example.org");
client.quit();
}
finally
{
smtpServer.stop();
}
}
}