def test_new_job(self): """ Create a job """ test_job = Job(self.method) self.assertEqual(test_job.func, self.method)
def test_set_failed(self): job_a = Job(self.method) job_a.set_failed(exc_info="failed test") self.assertEquals(job_a.state, FAILED) self.assertEquals(job_a.exc_info, "failed test")
def test_store(self): test_job = Job(self.method) test_job.store() stored = self.queue_job.search([("uuid", "=", test_job.uuid)]) self.assertEqual(len(stored), 1)
def _perform_created_job(self): for job in self.created_jobs: Job.load(self.env, job.uuid).perform()
def test_invalid_function(self): with self.assertRaises(TypeError): Job(1)
def test_default_channel_no_xml(self): """Channel on job is root if there is no queue.job.function record""" test_job = Job(self.env["res.users"].browse) test_job.store() stored = test_job.db_record() self.assertEquals(stored.channel, "root")
def test_perform_args(self): test_job = Job(self.method, args=("o", "k"), kwargs={"c": "!"}) result = test_job.perform() self.assertEqual(result, (("o", "k"), {"c": "!"}))
def test_perform_args(self): test_job = Job(self.method, args=('o', 'k'), kwargs={'c': '!'}) result = test_job.perform() self.assertEqual(result, (('o', 'k'), {'c': '!'}))
def perform_jobs(self, jobs): for job in jobs.search_created(): Job.load(self.env, job.uuid).perform()
def test_on_model_method(self): job_ = Job(self.env['test.queue.job'].testing_method) self.assertEquals(job_.model_name, 'test.queue.job') self.assertEquals(job_.method_name, 'testing_method')
def _create_job(self): test_job = Job(self.method) test_job.store() stored = Job.db_record_from_uuid(self.env, test_job.uuid) self.assertEqual(len(stored), 1) return stored
def test_channel_on_job(self): self.env['queue.job.function'].search([]).unlink() self.env['queue.job.channel'].search([('name', '!=', 'root')]).unlink() method = self.env['test.queue.channel'].job_a self.env['queue.job.function']._register_job(method) path_a = '<%s>.%s' % (method.__self__.__class__._name, method.__name__) job_func = self.function_model.search([('name', '=', path_a)]) self.assertEquals(job_func.channel, 'root') test_job = Job(method) test_job.store() stored = self.env['queue.job'].search([('uuid', '=', test_job.uuid)]) self.assertEquals(stored.channel, 'root') job_read = Job.load(self.env, test_job.uuid) self.assertEquals(job_read.channel, 'root') channel = self.channel_model.create({ 'name': 'sub', 'parent_id': self.root_channel.id }) job_func.channel_id = channel test_job = Job(method) test_job.store() stored = self.env['queue.job'].search([('uuid', '=', test_job.uuid)]) self.assertEquals(stored.channel, 'root.sub') # it's also possible to override the channel test_job = Job(method, channel='root.sub.sub.sub') test_job.store() stored = self.env['queue.job'].search([('uuid', '=', test_job.uuid)]) self.assertEquals(stored.channel, test_job.channel)
def _perform_job(self, job): Job.load(self.env, job.uuid).perform()
def test_infinite_retryable_error(self): test_job = Job(self.method, kwargs={"raise_retry": True}, max_retries=0) self.assertEqual(test_job.retry, 0) with self.assertRaises(RetryableJobError): test_job.perform() self.assertEqual(test_job.retry, 1)
def test_retry_pattern(self): """ When we specify a retry pattern, the eta must follow it""" datetime_path = "odoo.addons.queue_job.job.datetime" method = self.env["test.queue.job"].job_with_retry_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(method, max_retries=0) test_job.retry += 1 test_job.postpone(self.env) 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.env) 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.env) 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.env) 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.env) self.assertEqual(test_job.retry, 5) self.assertEqual(test_job.eta, datetime(2015, 6, 1, 15, 15, 0))
def test_on_model_method(self): job_ = Job(self.env["test.queue.job"].testing_method) self.assertEquals(job_.model_name, "test.queue.job") self.assertEquals(job_.method_name, "testing_method")
def test_eta(self): """ When an `eta` is datetime, it uses it """ now = datetime.now() method = self.env["res.users"].mapped job_a = Job(method, eta=now) self.assertEqual(job_a.eta, now)
def test_channel_on_job(self): method = self.env["test.queue.channel"].job_a path_a = self.env["queue.job.function"].job_function_name( "test.queue.channel", "job_a") job_func = self.function_model.search([("name", "=", path_a)]) self.assertEquals(job_func.channel, "root") test_job = Job(method) test_job.store() stored = test_job.db_record() self.assertEquals(stored.channel, "root") job_read = Job.load(self.env, test_job.uuid) self.assertEquals(job_read.channel, "root") sub_channel = self.env.ref("test_queue_job.channel_sub") job_func.channel_id = sub_channel test_job = Job(method) test_job.store() stored = test_job.db_record() self.assertEquals(stored.channel, "root.sub") # it's also possible to override the channel test_job = Job(method, channel="root.sub") test_job.store() stored = test_job.db_record() self.assertEquals(stored.channel, test_job.channel)