def test_backoff(self): now = utcnow() two_hours_ago = now - datetime.timedelta(hours=2) self.assertTrue(models.should_schedule_next(two_hours_ago, now, "3600", 5)) self.assertFalse(models.should_schedule_next(two_hours_ago, now, "3600", 10))
def test_exact_time_with_day_change(self): now = utcnow().replace(hour=0, minute=1) previous = (now - datetime.timedelta(days=2)).replace(hour=23, minute=59) schedule = "23:59".format(now.hour + 3) self.assertTrue(models.should_schedule_next(previous, now, schedule, 0))
def test_exact_time_that_needs_reschedule(self): now = utcnow() yesterday = now - datetime.timedelta(days=1) scheduled_datetime = now - datetime.timedelta(hours=3) scheduled_time = "{:02d}:00".format(scheduled_datetime.hour) self.assertTrue(models.should_schedule_next(yesterday, now, scheduled_time, 0))
def test_exact_time_every_x_days_that_doesnt_need_reschedule(self): now = utcnow() four_days_ago = now - datetime.timedelta(days=2) three_day_interval = "259200" scheduled_datetime = now - datetime.timedelta(hours=3) scheduled_time = "{:02d}:00".format(scheduled_datetime.hour) self.assertFalse(models.should_schedule_next(four_days_ago, now, three_day_interval, scheduled_time))
def test_exact_time_every_x_weeks_that_needs_reschedule(self): # Setup: # # 1) The query should run every 3 weeks on Tuesday # 2) The last time it ran was 3 weeks ago from this week's Thursday # 3) It is now Wednesday of this week # # Expectation: Even though less than 3 weeks have passed since the # last run 3 weeks ago on Thursday, it's overdue since # it should be running on Tuesdays. this_thursday = utcnow() + datetime.timedelta(days=list(calendar.day_name).index("Thursday") - utcnow().weekday()) three_weeks_ago = this_thursday - datetime.timedelta(weeks=3) now = this_thursday - datetime.timedelta(days=1) three_week_interval = "1814400" scheduled_datetime = now - datetime.timedelta(hours=3) scheduled_time = "{:02d}:00".format(scheduled_datetime.hour) self.assertTrue(models.should_schedule_next(three_weeks_ago, now, three_week_interval, scheduled_time, "Tuesday"))
def test_interval_schedule_that_needs_reschedule(self): now = datetime.datetime.now() two_hours_ago = now - datetime.timedelta(hours=2) self.assertTrue(models.should_schedule_next(two_hours_ago, now, "3600"))
def test_exact_time_that_needs_reschedule(self): now = datetime.datetime.now() yesterday = now - datetime.timedelta(days=1) schedule = "{:02d}:00".format(now.hour - 3) self.assertTrue(models.should_schedule_next(yesterday, now, schedule))
def test_exact_time_that_doesnt_need_reschedule(self): now = datetime.datetime.now() yesterday = (now - datetime.timedelta(days=1)).replace(hour=now.hour+3, minute=now.minute+1) schedule = "{:02d}:00".format(now.hour + 3) self.assertFalse(models.should_schedule_next(yesterday, now, schedule))
def test_next_iteration_overflow(self): now = utcnow() two_hours_ago = now - datetime.timedelta(hours=2) self.assertFalse( models.should_schedule_next(two_hours_ago, now, "3600", failures=32) )
def test_exact_time_that_doesnt_need_reschedule(self): now = date_parse("2015-10-16 20:10") yesterday = date_parse("2015-10-15 23:07") schedule = "23:00" self.assertFalse(models.should_schedule_next(yesterday, now, schedule))
def test_interval_schedule_that_doesnt_need_reschedule(self): now = utcnow() half_an_hour_ago = now - datetime.timedelta(minutes=30) self.assertFalse( models.should_schedule_next(half_an_hour_ago, now, "3600"))
def test_interval_schedule_that_needs_reschedule(self): now = utcnow() two_hours_ago = now - datetime.timedelta(hours=2) self.assertTrue(models.should_schedule_next(two_hours_ago, now, "3600"))
def test_exact_time_every_x_days_with_day_change(self): now = utcnow().replace(hour=23, minute=59) previous = (now - datetime.timedelta(days=2)).replace(hour=0, minute=1) schedule = "23:58" three_day_interval = "259200" self.assertTrue(models.should_schedule_next(previous, now, three_day_interval, schedule))
def test_interval_schedule_that_doesnt_need_reschedule(self): now = datetime.datetime.now() half_an_hour_ago = now - datetime.timedelta(minutes=30) self.assertFalse(models.should_schedule_next(half_an_hour_ago, now, "3600"))
def test_exact_time_with_day_change(self): now = utcnow().replace(hour=0, minute=1) previous = (now - datetime.timedelta(days=2)).replace(hour=23, minute=59) schedule = "23:59".format(now.hour + 3) self.assertTrue(models.should_schedule_next(previous, now, schedule))
def test_exact_time_that_doesnt_need_reschedule(self): now = datetime.datetime.now() yesterday = (now - datetime.timedelta(days=1)).replace( hour=now.hour + 3, minute=now.minute + 1) schedule = "{:02d}:00".format(now.hour + 3) self.assertFalse(models.should_schedule_next(yesterday, now, schedule))