Example #1
0
    def test_delete(self):
        test_wait_time = 0.5
        job_sleep_time = 10
        job_max_repeats = 30

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

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

        scheduler = Scheduler(dummy_callback)
        scheduler.lock = RLock()
        scheduler.iter_cb = iter_cb
        scheduler.iter_cb_args = (scheduler, datetime.utcnow() + timedelta(seconds=test_wait_time))

        scheduler.create(job1)
        scheduler.create(job2)
        scheduler.run()

        scheduler.unschedule(job1)

        self.assertIn(job2, scheduler.jobs)
        self.assertNotIn(job1, scheduler.jobs)
        self.assertFalse(job1.keep_running)

        # run - 1
        # create - 2
        # delete - 1
        # on_max_repeats_reached - 0 (because of how long it takes to run job_max_repeats with test_wait_time)
        # 1+2+1 = 4
        self.assertEquals(scheduler.lock.called, 4)
Example #2
0
    def test_job_greenlets(self):

        data = {'spawned':[], 'stopped': []}

        class FakeGreenlet(object):
            def __init__(self, run):
                self.run = self._run = run

            def kill(self, *args, **kwargs):
                data['stopped'].append([self, args, kwargs])

        def spawn(job):
            g = FakeGreenlet(job)
            data['spawned'].append(g)
            return g

        with patch('gevent.spawn', spawn):

            test_wait_time = 0.5
            job_sleep_time = 10
            job_max_repeats = 30

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

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

            scheduler = Scheduler(dummy_callback)
            scheduler.lock = RLock()
            scheduler.iter_cb = iter_cb
            scheduler.iter_cb_args = (scheduler, datetime.utcnow() + timedelta(seconds=test_wait_time))

            scheduler.create(job1, spawn=False)
            scheduler.create(job2, spawn=False)
            scheduler.run()

            self.assertEquals(scheduler.job_greenlets[job1.name]._run, job1.run)
            self.assertEquals(scheduler.job_greenlets[job2.name]._run, job2.run)

            self.assertTrue(job1.keep_running)
            self.assertTrue(job2.keep_running)

            scheduler.unschedule(job1)

            self.assertFalse(job1.keep_running)
            self.assertTrue(job2.keep_running)

            self.assertNotIn(job1.name, scheduler.job_greenlets)
            self.assertEquals(scheduler.job_greenlets[job2.name]._run, job2.run)

            self.assertEquals(len(data['stopped']), 1)
            g, args, kwargs = data['stopped'][0]
            self.assertIs(g.run.im_func, job1.run.im_func) # That's how we know it was job1 deleted not job2
            self.assertIs(args, ())
            self.assertDictEqual(kwargs, {'timeout':2.0})
Example #3
0
    def test_delete(self):
        test_wait_time = 0.5
        job_sleep_time = 10
        job_max_repeats = 30

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

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

        scheduler = Scheduler(dummy_callback)
        scheduler.lock = RLock()
        scheduler.iter_cb = iter_cb
        scheduler.iter_cb_args = (scheduler, datetime.utcnow() +
                                  timedelta(seconds=test_wait_time))

        scheduler.create(job1)
        scheduler.create(job2)
        scheduler.run()

        scheduler.unschedule(job1)

        self.assertIn(job2, scheduler.jobs)
        self.assertNotIn(job1, scheduler.jobs)
        self.assertFalse(job1.keep_running)

        # run - 1
        # create - 2
        # delete - 1
        # on_max_repeats_reached - 0 (because of how long it takes to run job_max_repeats with test_wait_time)
        # 1+2+1 = 4
        self.assertEquals(scheduler.lock.called, 4)
Example #4
0
    def test_job_greenlets(self):

        data = {'spawned': [], 'stopped': []}

        class FakeGreenlet(object):
            def __init__(self, run):
                self.run = self._run = run

            def kill(self, *args, **kwargs):
                data['stopped'].append([self, args, kwargs])

        def spawn(job):
            g = FakeGreenlet(job)
            data['spawned'].append(g)
            return g

        with patch('gevent.spawn', spawn):

            test_wait_time = 0.5
            job_sleep_time = 10
            job_max_repeats = 30

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

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

            scheduler = Scheduler(dummy_callback)
            scheduler.lock = RLock()
            scheduler.iter_cb = iter_cb
            scheduler.iter_cb_args = (scheduler, datetime.utcnow() +
                                      timedelta(seconds=test_wait_time))

            scheduler.create(job1, spawn=False)
            scheduler.create(job2, spawn=False)
            scheduler.run()

            self.assertEquals(scheduler.job_greenlets[job1.name]._run,
                              job1.run)
            self.assertEquals(scheduler.job_greenlets[job2.name]._run,
                              job2.run)

            self.assertTrue(job1.keep_running)
            self.assertTrue(job2.keep_running)

            scheduler.unschedule(job1)

            self.assertFalse(job1.keep_running)
            self.assertTrue(job2.keep_running)

            self.assertNotIn(job1.name, scheduler.job_greenlets)
            self.assertEquals(scheduler.job_greenlets[job2.name]._run,
                              job2.run)

            self.assertEquals(len(data['stopped']), 1)
            g, args, kwargs = data['stopped'][0]
            self.assertIs(g.run.im_func, job1.run.im_func
                          )  # That's how we know it was job1 deleted not job2
            self.assertIs(args, ())
            self.assertDictEqual(kwargs, {'timeout': 2.0})