Example #1
0
    def test_on_max_repeats_reached(self):

        test_wait_time = 0.5
        job_sleep_time = 0.02
        job_max_repeats = 3

        data = {'job': None, 'called': 0}

        job = Job(rand_int(),
                  'a',
                  SCHEDULER.JOB_TYPE.INTERVAL_BASED,
                  Interval(seconds=0.1),
                  max_repeats=job_max_repeats)
        job.wait_sleep_time = job_sleep_time

        # Just to make sure it's inactive by default.
        self.assertTrue(job.is_active)

        scheduler = Scheduler(dummy_callback)
        data['old_on_max_repeats_reached'] = scheduler.on_max_repeats_reached

        def on_max_repeats_reached(job):
            data['job'] = job
            data['called'] += 1
            data['old_on_max_repeats_reached'](job)

        scheduler.on_max_repeats_reached = on_max_repeats_reached
        scheduler.iter_cb = iter_cb
        scheduler.iter_cb_args = (scheduler, datetime.utcnow() +
                                  timedelta(seconds=test_wait_time))

        scheduler.create(job)
        scheduler.run()

        now = datetime.utcnow()

        # Now the job should have reached the max_repeats limit within the now - test_wait_time period.
        self.assertIs(job, data['job'])
        self.assertEquals(1, data['called'])
        self.assertTrue(job.max_repeats_reached)
        self.assertFalse(job.keep_running)
        self.assertTrue(job.max_repeats_reached_at < now)
        self.assertTrue(job.max_repeats_reached_at >= now +
                        timedelta(seconds=-test_wait_time))

        # Having run out of max_repeats it should not be active now.
        self.assertFalse(job.is_active)
Example #2
0
    def test_on_max_repeats_reached(self):

        test_wait_time = 0.5
        job_sleep_time = 0.02
        job_max_repeats = 3

        data = {'job':None, 'called':0}

        job = Job(rand_int(), 'a', SCHEDULER.JOB_TYPE.INTERVAL_BASED, Interval(seconds=0.1), max_repeats=job_max_repeats)
        job.wait_sleep_time = job_sleep_time

        # Just to make sure it's inactive by default.
        self.assertTrue(job.is_active)

        scheduler = Scheduler(dummy_callback)
        data['old_on_max_repeats_reached'] = scheduler.on_max_repeats_reached

        def on_max_repeats_reached(job):
            data['job'] = job
            data['called'] += 1
            data['old_on_max_repeats_reached'](job)

        scheduler.on_max_repeats_reached = on_max_repeats_reached
        scheduler.iter_cb = iter_cb
        scheduler.iter_cb_args = (scheduler, datetime.utcnow() + timedelta(seconds=test_wait_time))

        scheduler.create(job)
        scheduler.run()

        now = datetime.utcnow()

        # Now the job should have reached the max_repeats limit within the now - test_wait_time period.
        self.assertIs(job, data['job'])
        self.assertEquals(1, data['called'])
        self.assertTrue(job.max_repeats_reached)
        self.assertFalse(job.keep_running)
        self.assertTrue(job.max_repeats_reached_at < now)
        self.assertTrue(job.max_repeats_reached_at >= now + timedelta(seconds=-test_wait_time))

        # Having run out of max_repeats it should not be active now.
        self.assertFalse(job.is_active)