package net.joelinn.quartz; import org.junit.Before; import org.junit.Test; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobPersistenceException; import org.quartz.Trigger; import org.quartz.impl.triggers.CronTriggerImpl; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.mockito.Mockito.verify; /** * Joe Linn * 7/22/2014 */ public class TriggeredJobCompleteTest extends BaseTest{ protected JobDetail job; protected CronTriggerImpl trigger1; protected CronTriggerImpl trigger2; @Before public void setUp() throws JobPersistenceException { // store a job with some triggers job = getJobDetail("job1", "jobGroup1"); trigger1 = getCronTrigger("trigger1", "triggerGroup1", job.getKey()); trigger2 = getCronTrigger("trigger2", "triggerGroup1", job.getKey()); storeJobAndTriggers(job, trigger1, trigger2); } @Test public void triggeredJobCompleteDelete() throws JobPersistenceException { jobStore.triggeredJobComplete(trigger1, job, Trigger.CompletedExecutionInstruction.DELETE_TRIGGER); // ensure that the proper trigger was deleted assertThat(jobStore.retrieveTrigger(trigger1.getKey()), nullValue()); assertThat(jobStore.retrieveTrigger(trigger2.getKey()), not(nullValue())); verify(mockScheduleSignaler).signalSchedulingChange(0L); } @Test public void triggeredJobCompleteComplete() throws JobPersistenceException { jobStore.triggeredJobComplete(trigger1, job, Trigger.CompletedExecutionInstruction.SET_TRIGGER_COMPLETE); // ensure that neither trigger was deleted assertThat(jobStore.retrieveTrigger(trigger1.getKey()), not(nullValue())); assertThat(jobStore.retrieveTrigger(trigger2.getKey()), not(nullValue())); // ensure that the proper trigger was set to COMPLETE assertEquals(Trigger.TriggerState.COMPLETE, jobStore.getTriggerState(trigger1.getKey())); assertEquals(Trigger.TriggerState.NORMAL, jobStore.getTriggerState(trigger2.getKey())); verify(mockScheduleSignaler).signalSchedulingChange(0L); } @Test public void triggeredJobCompleteError() throws JobPersistenceException { jobStore.triggeredJobComplete(trigger1, job, Trigger.CompletedExecutionInstruction.SET_TRIGGER_ERROR); // ensure that the proper trigger was set to ERROR assertEquals(Trigger.TriggerState.ERROR, jobStore.getTriggerState(trigger1.getKey())); assertEquals(Trigger.TriggerState.NORMAL, jobStore.getTriggerState(trigger2.getKey())); verify(mockScheduleSignaler).signalSchedulingChange(0L); } @Test public void triggeredJobCompleteAllError() throws JobPersistenceException { jobStore.triggeredJobComplete(trigger1, job, Trigger.CompletedExecutionInstruction.SET_ALL_JOB_TRIGGERS_ERROR); // ensure that both triggers were set to ERROR assertEquals(Trigger.TriggerState.ERROR, jobStore.getTriggerState(trigger1.getKey())); assertEquals(Trigger.TriggerState.ERROR, jobStore.getTriggerState(trigger2.getKey())); verify(mockScheduleSignaler).signalSchedulingChange(0L); } @Test public void triggeredJobCompleteAllComplete() throws JobPersistenceException { jobStore.triggeredJobComplete(trigger1, job, Trigger.CompletedExecutionInstruction.SET_ALL_JOB_TRIGGERS_COMPLETE); // ensure that both triggers were set to COMPLETE assertEquals(Trigger.TriggerState.COMPLETE, jobStore.getTriggerState(trigger1.getKey())); assertEquals(Trigger.TriggerState.COMPLETE, jobStore.getTriggerState(trigger2.getKey())); verify(mockScheduleSignaler).signalSchedulingChange(0L); } @Test public void triggeredJobCompletePersist() throws JobPersistenceException { JobDetail jobPersist = JobBuilder.newJob(TestJobPersist.class) .withIdentity("testJobPersist1", "jobGroupPersist1") .usingJobData("timeout", 42) .withDescription("I am describing a job!") .build(); CronTriggerImpl triggerPersist1 = getCronTrigger("triggerPersist1", "triggerPersistGroup1", jobPersist.getKey()); CronTriggerImpl triggerPersist2 = getCronTrigger("triggerPersist2", "triggerPersistGroup1", jobPersist.getKey()); storeJobAndTriggers(jobPersist, triggerPersist1, triggerPersist1); jobStore.triggeredJobComplete(triggerPersist1, jobPersist, Trigger.CompletedExecutionInstruction.SET_TRIGGER_COMPLETE); assertEquals(Trigger.TriggerState.COMPLETE, jobStore.getTriggerState(triggerPersist1.getKey())); } @Test public void triggeredJobCompleteNonConcurrent() throws JobPersistenceException { JobDetail job = JobBuilder.newJob(TestJobNonConcurrent.class) .withIdentity("testJobNonConcurrent1", "jobGroupNonConcurrent1") .usingJobData("timeout", 42) .withDescription("I am describing a job!") .build(); CronTriggerImpl trigger1 = getCronTrigger("triggerNonConcurrent1", "triggerNonConcurrentGroup1", job.getKey()); CronTriggerImpl trigger2 = getCronTrigger("triggerNonConcurrent2", "triggerNonConcurrentGroup1", job.getKey()); storeJobAndTriggers(job, trigger1, trigger2); jobStore.triggeredJobComplete(trigger1, job, Trigger.CompletedExecutionInstruction.SET_TRIGGER_COMPLETE); assertEquals(Trigger.TriggerState.COMPLETE, jobStore.getTriggerState(trigger1.getKey())); final String jobHashKey = schema.jobHashKey(job.getKey()); assertFalse(jedis.sismember(schema.blockedJobsSet(), jobHashKey)); } }