Esempio n. 1
0
 def test_perform_args(self):
     test_job = Job(func=dummy_task_args,
                    model_name='res.users',
                    args=('o', 'k'),
                    kwargs={'c': '!'})
     result = test_job.perform(self.session)
     self.assertEqual(result, 'ok!')
Esempio n. 2
0
 def test_infinite_retryable_error(self):
     test_job = Job(func=retryable_error_task,
                    max_retries=0)
     self.assertEqual(test_job.retry, 0)
     with self.assertRaises(RetryableJobError):
         test_job.perform(self.session)
     self.assertEqual(test_job.retry, 1)
Esempio n. 3
0
 def test_compare_eta(self):
     """ When an `eta` datetime is defined, it should
     be executed after a job without one.
     """
     date = datetime.now() + timedelta(hours=3)
     job_a = Job(func=task_a, priority=10, eta=date)
     job_b = Job(func=task_b, priority=10)
     self.assertGreater(job_a, job_b)
Esempio n. 4
0
 def test_set_pending(self):
     job_a = Job(func=task_a)
     job_a.set_pending(result='test')
     self.assertEquals(job_a.state, PENDING)
     self.assertFalse(job_a.date_enqueued)
     self.assertFalse(job_a.date_started)
     self.assertEquals(job_a.retry, 0)
     self.assertEquals(job_a.result, 'test')
Esempio n. 5
0
    def test_set_started(self):
        job_a = Job(func=task_a)
        datetime_path = 'odoo.addons.connector.queue.job.datetime'
        with mock.patch(datetime_path, autospec=True) as mock_datetime:
            mock_datetime.now.return_value = datetime(2015, 3, 15, 16, 41, 0)
            job_a.set_started()

        self.assertEquals(job_a.state, STARTED)
        self.assertEquals(job_a.date_started,
                          datetime(2015, 3, 15, 16, 41, 0))
Esempio n. 6
0
    def test_postpone(self):
        job_a = Job(func=task_a)
        datetime_path = 'odoo.addons.connector.queue.job.datetime'
        with mock.patch(datetime_path, autospec=True) as mock_datetime:
            mock_datetime.now.return_value = datetime(2015, 3, 15, 16, 41, 0)
            job_a.postpone(result='test', seconds=60)

        self.assertEquals(job_a.eta, datetime(2015, 3, 15, 16, 42, 0))
        self.assertEquals(job_a.result, 'test')
        self.assertFalse(job_a.exc_info)
Esempio n. 7
0
    def test_read(self):
        eta = datetime.now() + timedelta(hours=5)
        test_job = Job(func=dummy_task_args,
                       model_name='res.users',
                       args=('o', 'k'),
                       kwargs={'c': '!'},
                       priority=15,
                       eta=eta,
                       description="My description")
        test_job.user_id = 1
        test_job.company_id = self.env.ref("base.main_company").id
        storage = OdooJobStorage(self.session)
        storage.store(test_job)
        job_read = storage.load(test_job.uuid)
        self.assertEqual(test_job.uuid, job_read.uuid)
        self.assertEqual(test_job.model_name, job_read.model_name)
        self.assertEqual(test_job.func, job_read.func)
        self.assertEqual(test_job.args, job_read.args)
        self.assertEqual(test_job.kwargs, job_read.kwargs)
        self.assertEqual(test_job.func_name, job_read.func_name)
        self.assertEqual(test_job.func_string, job_read.func_string)
        self.assertEqual(test_job.description, job_read.description)
        self.assertEqual(test_job.state, job_read.state)
        self.assertEqual(test_job.priority, job_read.priority)
        self.assertEqual(test_job.exc_info, job_read.exc_info)
        self.assertEqual(test_job.result, job_read.result)
        self.assertEqual(test_job.user_id, job_read.user_id)
        self.assertEqual(test_job.company_id, job_read.company_id)
        delta = timedelta(seconds=1)  # DB does not keep milliseconds
        self.assertAlmostEqual(test_job.date_created, job_read.date_created,
                               delta=delta)
        self.assertAlmostEqual(test_job.date_started, job_read.date_started,
                               delta=delta)
        self.assertAlmostEqual(test_job.date_enqueued, job_read.date_enqueued,
                               delta=delta)
        self.assertAlmostEqual(test_job.date_done, job_read.date_done,
                               delta=delta)
        self.assertAlmostEqual(test_job.eta, job_read.eta,
                               delta=delta)

        test_date = datetime(2015, 3, 15, 21, 7, 0)
        job_read.date_enqueued = test_date
        job_read.date_started = test_date
        job_read.date_done = test_date
        storage.store(job_read)

        job_read = storage.load(test_job.uuid)
        self.assertAlmostEqual(job_read.date_started, test_date,
                               delta=delta)
        self.assertAlmostEqual(job_read.date_enqueued, test_date,
                               delta=delta)
        self.assertAlmostEqual(job_read.date_done, test_date,
                               delta=delta)
Esempio n. 8
0
 def test_description(self):
     """ If no description is given to the job, it
     should be computed from the function
     """
     # if a doctstring is defined for the function
     # it's used as description
     job_a = Job(func=task_a)
     self.assertEqual(job_a.description, task_a.__doc__)
     # if no docstring, the description is computed
     job_b = Job(func=task_b)
     self.assertEqual(job_b.description, "Function task_b")
     # case when we explicitly specify the description
     description = "My description"
     job_a = Job(func=task_a, description=description)
     self.assertEqual(job_a.description, description)
Esempio n. 9
0
 def _create_job(self, func, *args):
     job = Job(func=func, args=args)
     storage = OdooJobStorage(self.session)
     storage.store(job)
     stored = self.QueueJob.search([('uuid', '=', job.uuid)])
     self.assertEqual(len(stored), 1)
     return stored
Esempio n. 10
0
 def test_eta_integer(self):
     """ When an `eta` is an integer, it adds n seconds up to now """
     datetime_path = 'odoo.addons.connector.queue.job.datetime'
     with mock.patch(datetime_path, autospec=True) as mock_datetime:
         mock_datetime.now.return_value = datetime(2015, 3, 15, 16, 41, 0)
         job_a = Job(func=task_a, eta=60)
         self.assertEqual(job_a.eta, datetime(2015, 3, 15, 16, 42, 0))
Esempio n. 11
0
 def _create_job(self):
     test_job = Job(func=task_a)
     storage = OdooJobStorage(self.session)
     storage.store(test_job)
     stored = storage.db_record_from_uuid(test_job.uuid)
     self.assertEqual(len(stored), 1)
     return stored
Esempio n. 12
0
 def test_eta_timedelta(self):
     """ When an `eta` is a timedelta, it adds it up to now """
     datetime_path = 'odoo.addons.connector.queue.job.datetime'
     with mock.patch(datetime_path, autospec=True) as mock_datetime:
         mock_datetime.now.return_value = datetime(2015, 3, 15, 16, 41, 0)
         delta = timedelta(hours=3)
         job_a = Job(func=task_a, eta=delta)
         self.assertEqual(job_a.eta, datetime(2015, 3, 15, 19, 41, 0))
Esempio n. 13
0
    def test_on_method(self):

        class A(object):
            def method(self):
                pass

        with self.assertRaises(NotImplementedError):
            Job(A.method)
Esempio n. 14
0
 def test_unicode(self):
     test_job = Job(func=dummy_task_args,
                    model_name='res.users',
                    args=(u'öô¿‽', u'ñě'),
                    kwargs={'c': u'ßø'},
                    priority=15,
                    description=u"My dé^Wdescription")
     test_job.user_id = 1
     storage = OdooJobStorage(self.session)
     storage.store(test_job)
     job_read = storage.load(test_job.uuid)
     self.assertEqual(test_job.args, job_read.args)
     self.assertEqual(job_read.args, ('res.users', u'öô¿‽', u'ñě'))
     self.assertEqual(test_job.kwargs, job_read.kwargs)
     self.assertEqual(job_read.kwargs, {'c': u'ßø'})
     self.assertEqual(test_job.description, job_read.description)
     self.assertEqual(job_read.description, u"My dé^Wdescription")
Esempio n. 15
0
 def test_job_unlinked(self):
     test_job = Job(func=dummy_task_args,
                    model_name='res.users',
                    args=('o', 'k'),
                    kwargs={'c': '!'})
     storage = OdooJobStorage(self.session)
     storage.store(test_job)
     stored = self.queue_job.search([('uuid', '=', test_job.uuid)])
     stored.unlink()
     with self.assertRaises(NoSuchJobError):
         storage.load(test_job.uuid)
Esempio n. 16
0
 def test_retryable_error(self):
     test_job = Job(func=retryable_error_task,
                    max_retries=3)
     self.assertEqual(test_job.retry, 0)
     with self.assertRaises(RetryableJobError):
         test_job.perform(self.session)
     self.assertEqual(test_job.retry, 1)
     with self.assertRaises(RetryableJobError):
         test_job.perform(self.session)
     self.assertEqual(test_job.retry, 2)
     with self.assertRaises(FailedJobError):
         test_job.perform(self.session)
     self.assertEqual(test_job.retry, 3)
Esempio n. 17
0
 def test_accented_bytestring(self):
     test_job = Job(func=dummy_task_args,
                    model_name='res.users',
                    args=('öô¿‽', 'ñě'),
                    kwargs={'c': 'ßø'},
                    priority=15,
                    description="My dé^Wdescription")
     test_job.user_id = 1
     storage = OdooJobStorage(self.session)
     storage.store(test_job)
     job_read = storage.load(test_job.uuid)
     self.assertEqual(test_job.args, job_read.args)
     self.assertEqual(job_read.args, ('res.users', 'öô¿‽', 'ñě'))
     self.assertEqual(test_job.kwargs, job_read.kwargs)
     self.assertEqual(job_read.kwargs, {'c': 'ßø'})
     # the job's description has been created as bytestring but is
     # decoded to utf8 by the ORM so make them comparable
     self.assertEqual(test_job.description,
                      job_read.description.encode('utf8'))
     self.assertEqual(job_read.description,
                      "My dé^Wdescription".decode('utf8'))
Esempio n. 18
0
    def test_channel_on_job(self):
        job(task_a)
        self.function_model._register_jobs()
        path_a = '%s.%s' % (task_a.__module__, task_a.__name__)
        job_func = self.function_model.search([('name', '=', path_a)])
        self.assertEquals(job_func.channel, 'root')

        test_job = Job(func=task_a)
        storage = OdooJobStorage(self.session)
        storage.store(test_job)
        stored = self.job_model.search([('uuid', '=', test_job.uuid)])
        self.assertEquals(stored.channel, 'root')

        channel = self.channel_model.create({'name': 'sub',
                                             'parent_id': self.root_channel.id,
                                             })
        job_func.channel_id = channel

        test_job = Job(func=task_a)
        storage = OdooJobStorage(self.session)
        storage.store(test_job)
        stored = self.job_model.search([('uuid', '=', test_job.uuid)])
        self.assertEquals(stored.channel, 'root.sub')
Esempio n. 19
0
 def test_retry_pattern_no_zero(self):
     """ When we specify a retry pattern without 0, uses RETRY_INTERVAL"""
     test_pattern = {
         3: 180,
     }
     job(retryable_error_task, retry_pattern=test_pattern)
     test_job = Job(func=retryable_error_task,
                    max_retries=0)
     test_job.retry += 1
     self.assertEqual(test_job.retry, 1)
     self.assertEqual(test_job._get_retry_seconds(), RETRY_INTERVAL)
     test_job.retry += 1
     self.assertEqual(test_job.retry, 2)
     self.assertEqual(test_job._get_retry_seconds(), RETRY_INTERVAL)
     test_job.retry += 1
     self.assertEqual(test_job.retry, 3)
     self.assertEqual(test_job._get_retry_seconds(), 180)
     test_job.retry += 1
     self.assertEqual(test_job.retry, 4)
     self.assertEqual(test_job._get_retry_seconds(), 180)
Esempio n. 20
0
 def test_perform(self):
     test_job = Job(func=dummy_task)
     result = test_job.perform(self.session)
     self.assertEqual(result, 'ok')
Esempio n. 21
0
 def test_priority(self):
     """ The lower the priority number, the higher
     the priority is"""
     job_a = Job(func=task_a, priority=10)
     job_b = Job(func=task_b, priority=5)
     self.assertGreater(job_a, job_b)
Esempio n. 22
0
 def test_new_job(self):
     """
     Create a job
     """
     test_job = Job(func=task_a)
     self.assertEqual(test_job.func, task_a)
Esempio n. 23
0
 def test_context_uuid(self):
     test_job = Job(func=dummy_task_context)
     result = test_job.perform(self.session)
     key_present = 'job_uuid' in result
     self.assertTrue(key_present)
     self.assertEqual(result['job_uuid'], test_job._uuid)
Esempio n. 24
0
 def test_compare_apple_and_orange(self):
     with self.assertRaises(TypeError):
         Job(func=task_a) != 1
Esempio n. 25
0
 def test_eta(self):
     """ When an `eta` is datetime, it uses it """
     now = datetime.now()
     job_a = Job(func=task_a, eta=now)
     self.assertEqual(job_a.eta, now)
Esempio n. 26
0
 def test_store(self):
     test_job = Job(func=task_a)
     storage = OdooJobStorage(self.session)
     storage.store(test_job)
     stored = self.queue_job.search([('uuid', '=', test_job.uuid)])
     self.assertEqual(len(stored), 1)
Esempio n. 27
0
 def test_retry_pattern(self):
     """ When we specify a retry pattern, the eta must follow it"""
     datetime_path = 'odoo.addons.connector.queue.job.datetime'
     test_pattern = {
         1:  60,
         2: 180,
         3:  10,
         5: 300,
     }
     job(retryable_error_task, retry_pattern=test_pattern)
     with mock.patch(datetime_path, autospec=True) as mock_datetime:
         mock_datetime.now.return_value = datetime(2015, 6, 1, 15, 10, 0)
         test_job = Job(func=retryable_error_task,
                        max_retries=0)
         test_job.retry += 1
         test_job.postpone(self.session)
         self.assertEqual(test_job.retry, 1)
         self.assertEqual(test_job.eta, datetime(2015, 6, 1, 15, 11, 0))
         test_job.retry += 1
         test_job.postpone(self.session)
         self.assertEqual(test_job.retry, 2)
         self.assertEqual(test_job.eta, datetime(2015, 6, 1, 15, 13, 0))
         test_job.retry += 1
         test_job.postpone(self.session)
         self.assertEqual(test_job.retry, 3)
         self.assertEqual(test_job.eta, datetime(2015, 6, 1, 15, 10, 10))
         test_job.retry += 1
         test_job.postpone(self.session)
         self.assertEqual(test_job.retry, 4)
         self.assertEqual(test_job.eta, datetime(2015, 6, 1, 15, 10, 10))
         test_job.retry += 1
         test_job.postpone(self.session)
         self.assertEqual(test_job.retry, 5)
         self.assertEqual(test_job.eta, datetime(2015, 6, 1, 15, 15, 00))
Esempio n. 28
0
 def test_set_failed(self):
     job_a = Job(func=task_a)
     job_a.set_failed(exc_info='failed test')
     self.assertEquals(job_a.state, FAILED)
     self.assertEquals(job_a.exc_info, 'failed test')
Esempio n. 29
0
 def test_invalid_function(self):
     with self.assertRaises(TypeError):
         Job(1)