def test_pretty_name(self): make = lambda p: CronSchedule.create(self.t, self.q, p) self.assertEqual(make('HALFHOURLY').pretty_name(), 'HALFHOURLY') self.assertEqual(make('HOURLY').pretty_name(), 'HOURLY') self.assertEqual(make('DAILY').pretty_name(), 'DAILY') self.assertEqual(make('WEEKLY').pretty_name(), 'WEEKLY') self.assertEqual(make('MONTHLY').pretty_name(), 'MONTHLY')
def test_bad_schedule(self): task = make_task() queue = make_queue() s = CronSchedule.create(task, queue, "o*d*w*h*m*s*") s.encoding = "gibberish" s.save() self._scheduler.flag.set() wait_until(lambda: CronSchedule.objects.get(pk=s.pk).deleted, 2)
def convert_schedule(st, task, queue): o = st.month if st.__month_r__ != CronSchedule.MONTHS else '*' d = st.day_of_month if st.__day_of_month_r__ != CronSchedule.DAYS else '*' w = st.day_of_week if st.__day_of_week_r__ != CronSchedule.DAYSOFWEEK else '*' h = st.hour if st.__hour_r__ != CronSchedule.HOURS else '*' m = st.minute if st.__minute_r__ != CronSchedule.MINUTES else '*' s = random.choice(CronSchedule.SECONDS) encoding = 'o%sd%sw%sh%sm%ss%s' % (o, d, w, h, m, s) return CronSchedule.create(task, queue, encoding)
def test_update_schedule(self): task = make_task() queue = make_queue() s = CronSchedule.create(task, queue, 'o*d*w*h*m*s*', 10) self._scheduler.flag.set() wait_until(lambda: queue.count() == 2, 5) s.encoding = 'o*d*w*h*m*s4' s.save() self.assertRaises(Exception, lambda: wait_until(lambda: s.instances.count() > 3, 3))
def test_update_schedule(self): task = make_task() queue = make_queue() s = CronSchedule.create(task, queue, 'o*d*w*h*m*s*', 10) self._scheduler.flag.set() wait_until(lambda: queue.count() == 2, 5) s.encoding = 'o*d*w*h*m*s4' s.save() self.assertRaises( Exception, lambda: wait_until(lambda: s.instances.count() > 3, 3))
def test_cron(self): task = make_task() queue = make_queue() s = CronSchedule.create(task, queue, 'o*d*w*h*m*s*', 3) self._scheduler.flag.set() wait_until(lambda: queue.count() == 3, 8) enqueued = map(lambda i: i.enqueued, s.instances) def fold(acc, e): self.assertEqual(e - acc, timedelta(seconds=1)) return e reduce(fold, enqueued)
def test_reload(self): task = make_task() queue = make_queue() now = datetime.utcnow() s = CronSchedule.create(task, queue, 'o*d*w*h*m*s%s' % ((now.second - 1) % 60), 1) self._scheduler.flag.set() wait_until(lambda: self.scheduler.cronschedules.count() == 1, 5) CronSchedule.objects.get(pk=s.pk).reschedule('o*d*w*h*m*s*') self.scheduler.make_request(Request.RELOAD) self._scheduler.flag.set() wait_until(lambda: s.instances.count() == 1, 10)