/*
* Copyright (C) 2012 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.crsh.mail;
import junit.framework.Assert;
import test.plugin.TestPluginLifeCycle;
import org.crsh.lang.impl.groovy.GroovyLanguageProxy;
import org.crsh.lang.impl.java.JavaLanguage;
import org.subethamail.smtp.MessageHandlerFactory;
import org.subethamail.smtp.helper.SimpleMessageListenerAdapter;
import org.subethamail.smtp.server.SMTPServer;
import org.subethamail.wiser.Wiser;
import org.subethamail.wiser.WiserMessage;
import javax.mail.MessagingException;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
/** @author Julien Viet */
public class Support {
protected SMTPServer createServer(MessageHandlerFactory mhf) {
return new SMTPServer(mhf);
}
protected TestPluginLifeCycle createLifeCycle() throws Exception {
TestPluginLifeCycle test = new TestPluginLifeCycle(new MailPlugin(), new GroovyLanguageProxy(), new JavaLanguage());
test.setProperty(MailPlugin.SMTP_HOST, "localhost");
test.setProperty(MailPlugin.SMTP_PORT, 5000);
test.setProperty(MailPlugin.SMTP_FROM, "foo@gmail.com");
return test;
}
protected Future<Boolean> send(MailPlugin plugin) throws IOException, MessagingException {
return plugin.send(Arrays.asList("dst@gmail.com"), "Testing Subject", "Dear Mail Crawler,"
+ "\n\n No spam to my email, please!");
}
protected void assertResponse(Wiser wiser, Future<Boolean> response) throws MessagingException, ExecutionException, InterruptedException {
Assert.assertTrue(response.get());
Assert.assertEquals(1, wiser.getMessages().size());
WiserMessage msg = wiser.getMessages().get(0);
assertMessage(msg);
}
protected void assertMessage(WiserMessage msg) throws MessagingException {
Assert.assertEquals("foo@gmail.com", msg.getEnvelopeSender());
Assert.assertEquals("dst@gmail.com", msg.getEnvelopeReceiver());
Assert.assertEquals("Testing Subject", msg.getMimeMessage().getSubject());
}
protected void execute(TestPluginLifeCycle lifeCycle, Wiser wiser) throws IOException, MessagingException, ExecutionException, InterruptedException {
MailPlugin plugin = lifeCycle.getContext().getPlugin(MailPlugin.class);
Future<Boolean> future = send(plugin);
assertResponse(wiser, future);
}
public void doTest() throws Exception {
Wiser wiser = new Wiser();
SMTPServer smtpServer = createServer(new SimpleMessageListenerAdapter(wiser));
smtpServer.setHostName("localhost");
smtpServer.setPort(5000);
TestPluginLifeCycle lifeCycle = createLifeCycle();
try {
lifeCycle.start();
smtpServer.start();
execute(lifeCycle, wiser);
}
finally {
smtpServer.stop();
lifeCycle.stop();
}
}
}