MailQueueTest.java
/***************************************************************************
Copyright 2012 Emily Estes
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
***************************************************************************/
package net.metanotion.emailqueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.metanotion.email.MailMergeDbQueue;
import net.metanotion.functor.Block;
import net.metanotion.sql.DbUtil;
import net.metanotion.util.JDBCTransaction;
import net.metanotion.web.servlets.ServerUtil;
public final class MailQueueTest {
private final static Logger logger = LoggerFactory.getLogger(MailQueueTest.class);
final static Queries q = new Queries();
public static final int ARGS_DB_URL = 0;
public static final int ARGS_DB_NAME = 1;
public static final int ARGS_DB_USER = 2;
public static final int ARGS_DB_PASS = 3;
public static final int BURST_RATE = 2;
public static final int MAX_RETRIES = 1;
public static final int TIMEOUT_IN_MS = 4000;
public static final int ROUND_TWO = 9500;
public static final int END_TEST = 19000;
public static void main(final String[] args) throws Exception {
final String url = args[ARGS_DB_URL];
final String dbName = args[ARGS_DB_NAME];
final String user = args[ARGS_DB_USER];
final String pass = args[ARGS_DB_PASS];
try (final Connection conn = DriverManager.getConnection(url, user, pass)) {
DbUtil.createDatabase(conn, dbName, user, true);
}
final DataSource ds = DbUtil.startDBConnectionPool(url + dbName, user, pass);
try (final Connection conn = ds.getConnection()) {
DbUtil.runSchema(conn, MailMergeDbQueue.schemaFactory());
}
JDBCTransaction.doTX(ds, new Block<Connection,Integer>() {
@Override public Integer eval(final Connection conn) throws Exception {
logger.debug("Stuffing the queue");
q.queueMessage(conn, "matt@metanotion.mailgun.org", "matt.estes@metanotion.net", "Test 1", "A mail queue test 1");
q.queueMessage(conn, "matt@metanotion.mailgun.org", "matt.estes@metanotion.net", "Test 2", "A mail queue test 2");
q.queueMessage(conn, "matt@metanotion.mailgun.org", "matt.estes@metanotion.net", "Test 3", "A mail queue test 3");
return 4;
}
});
ScheduledExecutorService es = Executors.newScheduledThreadPool(5);
NullSender mailSender = new NullSender();
MailQueue mq = new MailQueue(ds, es, mailSender, BURST_RATE, MAX_RETRIES, TIMEOUT_IN_MS);
mq.run();
es.schedule(new MessageSender(ds), ROUND_TWO, TimeUnit.MILLISECONDS);
Thread.sleep(END_TEST);
es.shutdownNow();
}
private static class MessageSender implements Runnable {
private final static Queries q = new Queries();
private final DataSource ds;
public MessageSender(final DataSource ds) { this.ds = ds; }
@Override public void run() {
JDBCTransaction.doTX(ds, new Block<Connection,Integer>() {
@Override public Integer eval(final Connection conn) throws Exception {
logger.debug("Adding a new message");
return q.queueMessage(conn, "matt@metanotion.mailgun.org", "matt.estes@metanotion.net", "Another Test", "A mail queue test");
}
});
}
}
}