/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestDatabaseMailQueueExecutor.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.mail.executors;
import com.uwyn.rife.database.Datasource;
import com.uwyn.rife.mail.Email;
import com.uwyn.rife.mail.dam.DatabaseMailQueue;
import com.uwyn.rife.mail.dam.DatabaseMailQueueFactory;
import com.uwyn.rife.scheduler.Task;
import java.util.List;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import junit.framework.TestCase;
import org.subethamail.wiser.Wiser;
import org.subethamail.wiser.WiserMessage;
public class TestDatabaseMailQueueExecutor extends TestCase
{
private Datasource mDatasource = null;
private String mDatasourceName = null;
public TestDatabaseMailQueueExecutor(Datasource datasource, String datasourceName, String name)
{
super(name);
mDatasource = datasource;
mDatasourceName = datasourceName;
}
public void setUp()
throws Exception
{
DatabaseMailQueueFactory.getInstance(mDatasource).install();
}
public void tearDown()
throws Exception
{
try
{
DatabaseMailQueueFactory.getInstance(mDatasource).remove();
}
catch (Throwable e)
{
// discart errors
}
}
public void testQueue()
throws Exception
{
DatabaseMailQueue manager = DatabaseMailQueueFactory.getInstance(mDatasource);
assertTrue(manager.queue(new Email()
.from("info@uwyn.com")
.toAddresses("test@uwyn.com")
.ccAddresses("test2@uwyn.com,test3@uwyn.com")
.bccAddresses("test4@uwyn.com")
.subject("Test subject")
.body("Test body")));
assertTrue(manager.queue(new Email()
.from("infob@uwyn.com")
.toAddresses("testb@uwyn.com")
.ccAddresses("test2b@uwyn.com,test3b@uwyn.com")
.bccAddresses("test4b@uwyn.com")
.subject("subjectb")
.body("bodyb")));
Wiser wiser = new Wiser();
wiser.setPort(8025);
wiser.start();
DatabaseMailQueueExecutor executor = new DatabaseMailQueueExecutor();
Task task = new ProcessQueueTask();
executor.executeTask(task);
List<WiserMessage> messages = wiser.getMessages();
assertEquals(8, messages.size());
int first_count = 0;
int second_count = 0;
MimeMessage mime_email;
for (WiserMessage email : messages)
{
mime_email = email.getMimeMessage();
if (email.getEnvelopeSender().equals("info@uwyn.com"))
{
assertEquals("test@uwyn.com", mime_email.getHeader("To", null));
assertEquals("test2@uwyn.com, test3@uwyn.com", mime_email.getHeader("Cc", null));
assertEquals("Test subject", mime_email.getSubject());
assertEquals("Test body", mime_email.getContent());
first_count++;
}
if (email.getEnvelopeSender().equals("infob@uwyn.com"))
{
assertEquals("testb@uwyn.com", mime_email.getHeader("To", null));
assertEquals("test2b@uwyn.com, test3b@uwyn.com", mime_email.getHeader("Cc", null));
assertEquals("subjectb", mime_email.getSubject());
assertEquals("bodyb", mime_email.getContent());
second_count++;
}
}
assertEquals(4, first_count);
assertEquals(4, second_count);
wiser.stop();
}
public void testQueueJavaMail()
throws Exception
{
DatabaseMailQueue manager = DatabaseMailQueueFactory.getInstance(mDatasource);
Session mail_session = Session.getDefaultInstance(new Properties());
MimeMessage message1 = new MimeMessage(mail_session);
message1.setFrom(new InternetAddress("info@uwyn.com"));
message1.addRecipient(Message.RecipientType.TO, new InternetAddress("test@uwyn.com"));
message1.addRecipients(Message.RecipientType.CC, new InternetAddress[] {new InternetAddress("test2@uwyn.com"), new InternetAddress("test3@uwyn.com")});
message1.addRecipient(Message.RecipientType.BCC, new InternetAddress("test4@uwyn.com"));
message1.setSubject("Test subject");
message1.setText("Test body");
MimeMessage message2 = new MimeMessage(mail_session);
message2.setFrom(new InternetAddress("infob@uwyn.com"));
message2.addRecipient(Message.RecipientType.TO, new InternetAddress("testb@uwyn.com"));
message2.addRecipients(Message.RecipientType.CC, new InternetAddress[] {new InternetAddress("test2b@uwyn.com"), new InternetAddress("test3b@uwyn.com")});
message2.addRecipient(Message.RecipientType.BCC, new InternetAddress("test4b@uwyn.com"));
message2.setSubject("subjectb");
message2.setText("bodyb");
assertTrue(manager.queue(message1));
assertTrue(manager.queue(message2));
Wiser wiser = new Wiser();
wiser.setPort(8025);
wiser.start();
DatabaseMailQueueExecutor executor = new DatabaseMailQueueExecutor();
Task task = new ProcessQueueTask();
executor.executeTask(task);
List<WiserMessage> messages = wiser.getMessages();
assertEquals(8, messages.size());
int first_count = 0;
int second_count = 0;
MimeMessage mime_email;
for (WiserMessage email : messages)
{
mime_email = email.getMimeMessage();
if (email.getEnvelopeSender().equals("info@uwyn.com"))
{
assertEquals("test@uwyn.com", mime_email.getHeader("To", null));
assertEquals("test2@uwyn.com, test3@uwyn.com", mime_email.getHeader("Cc", null));
assertEquals("Test subject", mime_email.getSubject());
assertEquals("Test body", mime_email.getContent());
first_count++;
}
if (email.getEnvelopeSender().equals("infob@uwyn.com"))
{
assertEquals("testb@uwyn.com", mime_email.getHeader("To", null));
assertEquals("test2b@uwyn.com, test3b@uwyn.com", mime_email.getHeader("Cc", null));
assertEquals("subjectb", mime_email.getSubject());
assertEquals("bodyb", mime_email.getContent());
second_count++;
}
}
assertEquals(4, first_count);
assertEquals(4, second_count);
wiser.stop();
}
class ProcessQueueTask extends Task
{
public String getTaskoptionValue(String name)
{
if ("smtp_server".equals(name))
{
return "localhost";
}
if ("smtp_port".equals(name))
{
return "8025";
}
if ("datasource".equals(name))
{
return mDatasourceName;
}
return null;
}
}
}