def test_pasync_queue_cleanup_before_job(self): old_now = datetime.datetime.now() job, job_infos = self.make_simpleOne(self.cqueue.get_job_infos()) self.assertEquals(len(self.queue), 1) self.cqueue.cleanup_before_job(job_infos) self.assertEquals(len(self.queue), 1) self.cqueue.cleanup_before_job(job_infos, force=True) self.assertEquals(len(self.queue), 0) job, job_infos = self.make_simpleOne(self.cqueue.get_job_infos()) self.assertEquals(len(self.queue), 1) dt = job.begin_after dt_minus_5 = dt - datetime.timedelta(minutes=5) dt_plus_5 = dt + datetime.timedelta(minutes=5) job_infos["begin_after"] = dt_minus_5 self.cqueue.cleanup_before_job(job_infos, force=True) self.assertEquals(len(self.queue), 0) job, job_infos = self.make_simpleOne(self.cqueue.get_job_infos()) set_now(dt_plus_5) job_infos["begin_after"] = dt self.cqueue.cleanup_before_job(job_infos, force=True) self.assertEquals(len(self.queue), 0) job_infos = self.cron_manager.get_job_infos() job, job_infos = self.make_simpleOne(job_infos) cron = job.args[5] ncron = crontab.Cron(**cron.dump()) self.cqueue.cleanup_before_job(job_infos) self.assertEquals(len(self.queue), 1) ncron.name = u"othercron" job_infos["args"] = [ncron] self.cqueue.cleanup_before_job(job_infos) self.assertEquals(len(self.queue), 0) set_now(old_now)
def test_pasync_queue_is_job_pending_running_and_finished(self): transaction.commit() job_infos = self.cqueue.get_job_infos(job=test_job) job, job_infos = self.make_simpleOne(job_infos) self.assertTrue(self.cqueue.is_job_pending(job_infos)) self.assertFalse(self.cqueue.is_job_running(job_infos)) transaction.commit() wait_for_start(job) self.assertTrue(self.cqueue.is_job_running(job_infos)) wait_for_result(job) self.assertTrue(self.cqueue.is_job_finished(job_infos)) fjob = self.cqueue.get_job_present(job_infos) # run another job and verify that the related one is # this job and not the first run now = datetime.datetime.now() + datetime.timedelta(minutes=5) set_now(now) transaction.commit() job1_infos = self.cqueue.get_job_infos(job=test_job) job1, job1_infos = self.make_simpleOne(job1_infos) self.assertFalse(self.cqueue.is_job_running(job1_infos)) transaction.commit() wait_for_start(job1) self.assertTrue(self.cqueue.is_job_running(job1_infos)) wait_for_result(job1) self.assertTrue(self.cqueue.is_job_finished(job1_infos)) # we cant determine which was first anyway, those are the same job ffjob = self.cqueue.get_job_in_agents(job_infos) sjob = self.cqueue.get_job_in_agents(job1_infos) self.assertTrue(ffjob.key == sjob.key) self.assertTrue(job1.key == sjob.key)
def test_pasync_startup_relaunch(self): """Test the startup event which needs to relaunch all jobs which are actived""" old_now = datetime.datetime.now() nextR = datetime.datetime(2008, 1, 1, 3, 1) set_now(pytz.UTC.localize(nextR)) self.assertTrue(self.marker.marked) self.crontab.save() [self.queue.remove(j) for j in self.queue] e = QueueReady(self.queue) self.assertEquals(len(self.queue), 0) notify(e) dt1 = datetime.datetime(2008, 1, 1, 15, 0) set_now(pytz.UTC.localize(dt1)) transaction.commit() e = QueueReady(self.queue) notify(e) dt2 = datetime.datetime(2008, 1, 1, 17, 0) set_now(pytz.UTC.localize(dt2)) transaction.commit() notify(e) transaction.commit() self.assertEquals(len(self.queue), 1) [self.queue.remove(j) for j in self.queue] set_now(old_now) transaction.commit()
def test_cron_register_job(self): transaction.commit() now = pytz.UTC.localize(datetime.datetime(2008,1,4)) set_now(now) transaction.commit() ba = pytz.UTC.localize(datetime.datetime(2008,1,4)) r = self.cron_manager.register_job(begin_after = ba) self.assertTrue(r) # force a new run which will replace our cron job # as it will be runned sooner r = self.cron_manager.register_job(force=True) self.assertEquals(len(self.queue), 1) self.assertEquals(self.queue[0].begin_after, ba) self.cron_manager.remove_jobs() self.assertEquals(len(self.queue), 0) # if we deactivate the crontab or the cron # we will not have any job queued self.cron.activated = False r = self.cron_manager.register_job() self.assertEquals(len(self.queue), 0) self.assertTrue(r == False) self.assertEquals(len(self.queue), 0) self.cron.activated = True self.crontab.activated = False r = self.cron_manager.register_job() self.assertTrue(r == False) self.assertEquals(len(self.queue), 0) # first resiter a job # then register a job with a smaller datetime delay self.crontab.activated = True r = self.cron_manager.register_job() self.cron.periodicity = u'1 23 * * *' r = self.cron_manager.register_job() self.cron.periodicity = u'1 22 * * *' r = self.cron_manager.register_job() job3 = self.queue[-1] self.assertTrue(self.cron.next, job3.begin_after) [self.queue.remove(j) for j in self.queue]
def test_cron_register_or_remove(self): transaction.commit() now = pytz.UTC.localize(datetime.datetime(2008,1,4)) set_now(now) self.crontab.activated = self.cron.activated = True transaction.commit() ret = self.cron_manager.register_or_remove() job = self.queue[-1] self.assertTrue(self.queue[0] is job) self.cron.activated = False self.assertTrue(ret[0]) ret = self.cron_manager.register_or_remove() self.assertEquals(len(self.queue), 0) self.assertTrue(not ret[0]) self.cron.activated = True ret = self.cron_manager.register_or_remove() self.assertTrue(ret[0]) job = self.queue[-1] self.assertTrue(self.queue[0] is job) self.cron.crontab.activated = False ret = self.cron_manager.register_or_remove() self.assertTrue(not ret[0]) self.assertEquals(len(self.queue), 0)