package net.joelinn.quartz;
import net.jodah.concurrentunit.Waiter;
import org.junit.Test;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.matchers.NameMatcher;
import static net.joelinn.quartz.TestUtils.createCronTrigger;
import static net.joelinn.quartz.TestUtils.createJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
/**
* @author Joe Linn
* 12/4/2016
*/
public class SingleThreadedIntegrationTest extends BaseIntegrationTest {
@Test
public void testMisfireListener() throws Exception {
final String jobName = "oneJob";
JobDetail jobDetail = createJob(TestJob.class, jobName, "oneGroup");
final String triggerName = "trigger1";
final String everySecond = "* * * * * ?";
CronTrigger trigger = createCronTrigger(triggerName, "oneGroup", everySecond);
JobDetail sleepJob = createJob(SleepJob.class, "sleepJob", "twoGroup");
CronTrigger sleepTrigger = createCronTrigger("sleepTrigger", "twoGroup", everySecond);
Waiter waiter = new Waiter();
scheduler.scheduleJob(sleepJob, sleepTrigger);
scheduler.scheduleJob(jobDetail, trigger);
scheduler.getListenerManager().addTriggerListener(new MisfireListener(waiter), NameMatcher.triggerNameEquals(triggerName));
// wait for MisfireListener.triggerMisfired() to be called
waiter.await(2500);
}
@Test
public void testSingleExecution() throws Exception {
final String jobName = "oneJob";
JobDetail jobDetail = createJob(TestJob.class, jobName, "oneGroup");
SimpleTrigger trigger = TriggerBuilder.newTrigger().withSchedule(simpleSchedule().withRepeatCount(0).withIntervalInMilliseconds(200)).build();
Waiter waiter = new Waiter();
scheduler.getListenerManager().addTriggerListener(new CompleteListener(waiter), NameMatcher.triggerNameEquals(trigger.getKey().getName()));
scheduler.scheduleJob(jobDetail, trigger);
waiter.await(2000);
}
}