@Test public void testDelayedStart() throws Exception { expectJobAccepted(); expectJobFetch(); // Query to test if live tasks exist for the job. expectActiveTaskFetch(TASK); // Live tasks exist, so the cron manager must delay the cron launch. delayExecutor.execute(capture(delayLaunchCapture)); // The cron manager will then try to initiate the kill. scheduler.killTasks((Query.Builder) anyObject(), eq(CronJobManager.CRON_USER)); // Immediate query and delayed query. expectActiveTaskFetch(TASK).times(2); // Simulate the live task disappearing. expectActiveTaskFetch(); stateManager.insertPendingTasks(sanitizedConfiguration.getTaskConfigs()); control.replay(); cron.receiveJob(sanitizedConfiguration); cron.startJobNow(job.getKey()); assertEquals(ImmutableSet.of(job.getKey()), cron.getPendingRuns()); delayLaunchCapture.getValue().run(); assertEquals(ImmutableSet.<IJobKey>of(), cron.getPendingRuns()); }
@Test public void testDelayedStartResets() throws Exception { expectJobAccepted(); expectJobFetch(); // Query to test if live tasks exist for the job. expectActiveTaskFetch(TASK); // Live tasks exist, so the cron manager must delay the cron launch. delayExecutor.execute(capture(delayLaunchCapture)); // The cron manager will then try to initiate the kill. scheduler.killTasks((Query.Builder) anyObject(), eq(CronJobManager.CRON_USER)); // Immediate query and delayed query. expectActiveTaskFetch(TASK).times(2); // Simulate the live task disappearing. expectActiveTaskFetch(); // Round two. expectJobFetch(); expectActiveTaskFetch(TASK); delayExecutor.execute(capture(delayLaunchCapture)); scheduler.killTasks((Query.Builder) anyObject(), eq(CronJobManager.CRON_USER)); expectActiveTaskFetch(TASK).times(2); expectActiveTaskFetch(); stateManager.insertPendingTasks(sanitizedConfiguration.getTaskConfigs()); expectLastCall().times(2); control.replay(); cron.receiveJob(sanitizedConfiguration); cron.startJobNow(job.getKey()); delayLaunchCapture.getValue().run(); // Start the job again. Since the previous delayed start completed, this should repeat the // entire process. cron.startJobNow(job.getKey()); delayLaunchCapture.getValue().run(); }
@Test public void testStart() throws Exception { expectJobAccepted(); expectJobFetch(); expectActiveTaskFetch(); // Job is executed immediately since there are no existing tasks to kill. stateManager.insertPendingTasks(sanitizedConfiguration.getTaskConfigs()); expect(cronScheduler.getSchedule(DEFAULT_JOB_KEY)) .andReturn(Optional.of(job.getCronSchedule())) .times(2); control.replay(); assertEquals(ImmutableMap.<IJobKey, String>of(), cron.getScheduledJobs()); cron.receiveJob(sanitizedConfiguration); assertEquals(ImmutableMap.of(job.getKey(), job.getCronSchedule()), cron.getScheduledJobs()); cron.startJobNow(job.getKey()); assertEquals(ImmutableMap.of(job.getKey(), job.getCronSchedule()), cron.getScheduledJobs()); }
@Test public void testDelayedStartMultiple() throws Exception { expectJobAccepted(); expectJobFetch(); // Query to test if live tasks exist for the job. expectActiveTaskFetch(TASK).times(3); // Live tasks exist, so the cron manager must delay the cron launch. delayExecutor.execute(capture(delayLaunchCapture)); // The cron manager will then try to initiate the kill. expectJobFetch(); expectJobFetch(); scheduler.killTasks((Query.Builder) anyObject(), eq(CronJobManager.CRON_USER)); expectLastCall().times(3); // Immediate queries and delayed query. expectActiveTaskFetch(TASK).times(4); // Simulate the live task disappearing. expectActiveTaskFetch(); stateManager.insertPendingTasks(sanitizedConfiguration.getTaskConfigs()); control.replay(); cron.receiveJob(sanitizedConfiguration); // Attempt to trick the cron manager into launching multiple times, or launching multiple // pollers. cron.startJobNow(job.getKey()); cron.startJobNow(job.getKey()); cron.startJobNow(job.getKey()); delayLaunchCapture.getValue().run(); }