def test_job_identity_key_func_exact(self): hasher = hashlib.sha1() hasher.update('test.queue.job') hasher.update('testing_method') hasher.update(str(sorted([]))) hasher.update(unicode((1, 'foo'))) hasher.update(unicode(sorted({'bar': 'baz'}.items()))) expected_key = hasher.hexdigest() test_job_1 = Job(self.method, args=[1, 'foo'], kwargs={'bar': 'baz'}, identity_key=identity_exact) self.assertEqual(test_job_1.identity_key, expected_key) test_job_1.store() job1 = Job.load(self.env, test_job_1.uuid) self.assertEqual(job1.identity_key, expected_key)
def test_company_simple(self): company = self.env.ref("base.main_company") eta = datetime.now() + timedelta(hours=5) test_job = Job( self.method, args=("o", "k"), kwargs={"return_context": 1}, priority=15, eta=eta, description="My description", ) test_job.worker_pid = 99999 # normally set on "set_start" test_job.company_id = company.id test_job.store() job_read = Job.load(self.env, test_job.uuid) self.assertEqual(test_job.func, job_read.func) result_ctx = test_job.func(*tuple(test_job.args), **test_job.kwargs) self.assertEqual(result_ctx.get("allowed_company_ids"), company.ids)
def test_job_identity_key_func_exact(self): hasher = hashlib.sha1() hasher.update(b"test.queue.job") hasher.update(b"testing_method") hasher.update(str(sorted([])).encode("utf-8")) hasher.update(str((1, "foo")).encode("utf-8")) hasher.update(str(sorted({"bar": "baz"}.items())).encode("utf-8")) expected_key = hasher.hexdigest() test_job_1 = Job( self.method, args=[1, "foo"], kwargs={"bar": "baz"}, identity_key=identity_exact, ) self.assertEqual(test_job_1.identity_key, expected_key) test_job_1.store() job1 = Job.load(self.env, test_job_1.uuid) self.assertEqual(job1.identity_key, expected_key)
def test_company_complex(self): company1 = self.env.ref("base.main_company") company2 = company1.create({"name": "Queue job company"}) companies = company1 | company2 self.env.user.write({"company_ids": [(6, False, companies.ids)]}) # Ensure the main company still the first self.assertEqual(self.env.user.company_id, company1) eta = datetime.now() + timedelta(hours=5) test_job = Job( self.method, args=("o", "k"), kwargs={"return_context": 1}, priority=15, eta=eta, description="My description", ) test_job.worker_pid = 99999 # normally set on "set_start" test_job.company_id = company2.id test_job.store() job_read = Job.load(self.env, test_job.uuid) self.assertEqual(test_job.func, job_read.func) result_ctx = test_job.func(*tuple(test_job.args), **test_job.kwargs) self.assertEqual(result_ctx.get("allowed_company_ids"), company2.ids)
def test_no_related_action(self): """ Job without related action """ job = Job(self.model.testing_related_action__no) self.assertIsNone(job.related_action())
def test_return(self): """ Job with related action check if action returns correctly """ job = Job(self.method) act_job, act_kwargs = job.related_action() self.assertEqual(act_job, job.db_record()) self.assertEqual(act_kwargs, {})
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.assertEqual(stored.channel, "root")
def test_on_model_method(self): job_ = Job(self.env["test.queue.job"].testing_method) self.assertEqual(job_.model_name, "test.queue.job") self.assertEqual(job_.method_name, "testing_method")
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_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 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_new_job(self): """ Create a job """ test_job = Job(self.method) self.assertEqual(test_job.func.__func__, self.method.__func__)
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 test_invalid_function(self): with self.assertRaises(TypeError): Job(1)
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_return_none(self): """ Job with related action returning None """ # default action returns None job = Job(self.model.testing_related_action__return_none) self.assertIsNone(job.related_action())
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_kwargs(self): """ Job with related action check if action propagates kwargs """ job_ = Job(self.model.testing_related_action__kwargs) self.assertEqual(job_.related_action(), (job_.db_record(), {'b': 4}))
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