def test_now(self): call = ScheduledCall('PT1H', 'pulp.tasks.dosomething') now = datetime.utcnow().replace(tzinfo=dateutils.utc_tz()) next_run = dateutils.parse_iso8601_datetime(call.calculate_next_run()) self.assertTrue(next_run - now < timedelta(seconds=1))
def test_with_years_duration(self, mock_time): """ Test calculating the next run when the interval is a Duration object and uses years """ last_runs = ('2015-01-01T10:00Z', '2016-01-01T10:00Z', '2017-01-01T10:00Z', '2018-01-01T10:00Z') expected_next_runs = ('2016-01-01T10:00Z', '2017-01-01T10:00Z', '2018-01-01T10:00Z', '2019-01-01T10:00Z') times = ( 1451642000.0, # Just before 2016-01-01T10:00Z UTC 1483264000.0, # Just before 2017-01-01T10:00Z UTC 1514800000.0, # Just before 2018-01-01T10:00Z UTC 1546336000.0, # Just before 2019-01-01T10:00Z UTC ) for last_run, current_time, expected_next_run in zip( last_runs, times, expected_next_runs): mock_time.return_value = current_time call = ScheduledCall('2014-01-01T10:00Z/P1M', 'pulp.tasks.dosomething', total_run_count=2, last_run_at=last_run) next_run = call.calculate_next_run() self.assertEqual( dateutils.parse_iso8601_datetime(expected_next_run), dateutils.parse_iso8601_datetime(next_run))
def test_with_months_duration(self, mock_time): """ Test calculating the next run when the interval is a Duration object and uses months """ last_runs = ('2015-01-01T10:00Z', '2015-02-01T10:00Z', '2015-03-01T10:00Z', '2015-04-01T10:00Z') expected_next_runs = ('2015-02-01T10:00Z', '2015-03-01T10:00Z', '2015-04-01T10:00Z', '2015-05-01T10:00Z') times = ( 1422784799.0, # Just before 2015-02-01T10:00Z UTC 1425203999.0, # Just before 2015-03-01T10:00Z UTC 1427882399.0, # Just before 2015-04-01T10:00Z UTC 1430474399.0, # Just before 2015-05-01T10:00Z UTC ) for last_run, current_time, expected_next_run in zip( last_runs, times, expected_next_runs): mock_time.return_value = current_time call = ScheduledCall('2014-12-01T10:00Z/P1M', 'pulp.tasks.dosomething', total_run_count=2, last_run_at=last_run) next_run = call.calculate_next_run() self.assertEqual( dateutils.parse_iso8601_datetime(expected_next_run), dateutils.parse_iso8601_datetime(next_run))
def test_future(self, mock_time): mock_time.return_value = 1389307330.966561 call = ScheduledCall('2014-01-19T17:15Z/PT1H', 'pulp.tasks.dosomething') next_run = call.calculate_next_run() # make sure the next run is equal to the specified first run. # don't want to compare a generated ISO8601 string directly, because there # could be subtle variations that are valid but break string equality. self.assertEqual(dateutils.parse_iso8601_interval(call.iso_schedule)[1], dateutils.parse_iso8601_datetime(next_run))
def test_with_past_runs(self, mock_time): # setup an hourly call that first ran not quite 2 hours ago, ran again # less than one hour ago, and should be scheduled to run at the end of # this hour mock_time.return_value = 1389389758.547976 call = ScheduledCall('2014-01-10T20:00Z/PT1H', 'pulp.tasks.dosomething', total_run_count=2, last_run_at='2014-01-10T21:00Z') next_run = call.calculate_next_run() self.assertEqual(dateutils.parse_iso8601_datetime('2014-01-10T22:00Z'), dateutils.parse_iso8601_datetime(next_run))
def test_with_years_duration(self, mock_time): """ Test calculating the next run when the interval is a Duration object and uses years """ last_runs = ('2015-01-01T10:00Z', '2016-01-01T10:00Z', '2017-01-01T10:00Z', '2018-01-01T10:00Z') expected_next_runs = ('2016-01-01T10:00Z', '2017-01-01T10:00Z', '2018-01-01T10:00Z', '2019-01-01T10:00Z') times = ( 1451642000.0, # Just before 2016-01-01T10:00Z UTC 1483264000.0, # Just before 2017-01-01T10:00Z UTC 1514800000.0, # Just before 2018-01-01T10:00Z UTC 1546336000.0, # Just before 2019-01-01T10:00Z UTC ) for last_run, current_time, expected_next_run in zip(last_runs, times, expected_next_runs): mock_time.return_value = current_time call = ScheduledCall('2014-01-01T10:00Z/P1M', 'pulp.tasks.dosomething', total_run_count=2, last_run_at=last_run) next_run = call.calculate_next_run() self.assertEqual(dateutils.parse_iso8601_datetime(expected_next_run), dateutils.parse_iso8601_datetime(next_run))
def test_with_months_duration(self, mock_time): """ Test calculating the next run when the interval is a Duration object and uses months """ last_runs = ('2015-01-01T10:00Z', '2015-02-01T10:00Z', '2015-03-01T10:00Z', '2015-04-01T10:00Z') expected_next_runs = ('2015-02-01T10:00Z', '2015-03-01T10:00Z', '2015-04-01T10:00Z', '2015-05-01T10:00Z') times = ( 1422784799.0, # Just before 2015-02-01T10:00Z UTC 1425203999.0, # Just before 2015-03-01T10:00Z UTC 1427882399.0, # Just before 2015-04-01T10:00Z UTC 1430474399.0, # Just before 2015-05-01T10:00Z UTC ) for last_run, current_time, expected_next_run in zip(last_runs, times, expected_next_runs): mock_time.return_value = current_time call = ScheduledCall('2014-12-01T10:00Z/P1M', 'pulp.tasks.dosomething', total_run_count=2, last_run_at=last_run) next_run = call.calculate_next_run() self.assertEqual(dateutils.parse_iso8601_datetime(expected_next_run), dateutils.parse_iso8601_datetime(next_run))