Example #1
0
 def test_job_unlinked(self):
     test_job = Job(self.method, args=('o', 'k'), kwargs={'c': '!'})
     test_job.store()
     stored = self.queue_job.search([('uuid', '=', test_job.uuid)])
     stored.unlink()
     with self.assertRaises(NoSuchJobError):
         Job.load(self.env, test_job.uuid)
Example #2
0
    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.im_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')

        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')
Example #3
0
 def test_job_unlinked(self):
     test_job = Job(self.method, args=("o", "k"), kwargs={"c": "!"})
     test_job.store()
     stored = self.queue_job.search([("uuid", "=", test_job.uuid)])
     stored.unlink()
     with self.assertRaises(NoSuchJobError):
         Job.load(self.env, test_job.uuid)
Example #4
0
 def _create_failed_job(self):
     method = self.env["res.users"].with_user(self.other_user_a).mapped
     test_job = Job(method)
     test_job.store()
     test_job_record = self.env["queue.job"].search([("uuid", "=", test_job.uuid)])
     test_job_record.write({"state": "failed"})
     return test_job_record
Example #5
0
 def _create_failed_job(self):
     method = self.env['res.users'].mapped
     test_job = Job(method)
     test_job.store()
     test_job_record = self.env['queue.job'].search([('uuid', '=',
                                                      test_job.uuid)])
     test_job_record.write({'state': 'failed'})
     return test_job_record
Example #6
0
 def test_store_extra_data(self):
     test_job = Job(self.method)
     test_job.store()
     stored = self.queue_job.search([("uuid", "=", test_job.uuid)])
     self.assertEqual(stored.additional_info, "JUST_TESTING")
     test_job.set_failed(exc_info="failed test", exc_name="FailedTest")
     test_job.store()
     stored.invalidate_cache()
     self.assertEqual(stored.additional_info, "JUST_TESTING_BUT_FAILED")
Example #7
0
 def test_job_identity_key_str(self):
     id_key = 'e294e8444453b09d59bdb6efbfec1323'
     test_job_1 = Job(self.method,
                      priority=15,
                      description="Test I am the first one",
                      identity_key=id_key)
     test_job_1.store()
     job1 = Job.load(self.env, test_job_1.uuid)
     self.assertEqual(job1.identity_key, id_key)
Example #8
0
 def test_accented_bytestring(self):
     test_job = Job(self.method,
                    args=('öô¿‽', 'ñě'),
                    kwargs={'c': 'ßø'},
                    priority=15,
                    description="My dé^Wdescription")
     test_job.store()
     job_read = Job.load(self.env, test_job.uuid)
     self.assertEqual(job_read.args, ('öô¿‽', 'ñě'))
     self.assertEqual(job_read.kwargs, {'c': 'ßø'})
     self.assertEqual(job_read.description, "My dé^Wdescription")
Example #9
0
    def test_read(self):
        eta = datetime.now() + timedelta(hours=5)
        test_job = Job(
            self.method,
            args=("o", "k"),
            kwargs={"c": "!"},
            priority=15,
            eta=eta,
            description="My description",
        )
        test_job.user_id = 1
        test_job.worker_pid = 99999  # normally set on "set_start"
        test_job.company_id = self.env.ref("base.main_company").id
        test_job.store()
        job_read = Job.load(self.env, 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.method_name, job_read.method_name)
        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)
        self.assertEqual(test_job.worker_pid, 99999)
        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
        job_read.store()

        job_read = Job.load(self.env, 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)
Example #10
0
    def test_old_jobs_are_deleted(self):
        """
        Old jobs are deleted by the autovacuum cron job.
        """
        test_job = Job(self.method)
        test_job.set_done(result='ok')
        test_job.date_done = datetime.datetime.now() - datetime.timedelta(
            days=self.queue_job._removal_interval + 1)
        test_job.store()

        self.cron_job.method_direct_trigger()

        self.assertFalse(test_job.db_record().exists())
Example #11
0
 def test_store_related_action(self):
     """ Call the related action on the model """
     job = Job(self.model.testing_related_action__store,
               args=('Discworld', ))
     job.store()
     stored_job = self.env['queue.job'].search([('uuid', '=', job.uuid)])
     self.assertEqual(len(stored_job), 1)
     expected = {
         'type': 'ir.actions.act_url',
         'target': 'new',
         'url': 'https://en.wikipedia.org/wiki/Discworld',
     }
     self.assertEquals(stored_job.open_related_action(), expected)
Example #12
0
 def test_accented_bytestring(self):
     test_job = Job(
         self.method,
         args=("öô¿‽", "ñě"),
         kwargs={"c": "ßø"},
         priority=15,
         description="My dé^Wdescription",
     )
     test_job.store()
     job_read = Job.load(self.env, test_job.uuid)
     self.assertEqual(job_read.args, ("öô¿‽", "ñě"))
     self.assertEqual(job_read.kwargs, {"c": "ßø"})
     self.assertEqual(job_read.description, "My dé^Wdescription")
Example #13
0
 def test_unicode(self):
     test_job = Job(self.method,
                    args=(u'öô¿‽', u'ñě'),
                    kwargs={'c': u'ßø'},
                    priority=15,
                    description=u"My dé^Wdescription")
     test_job.store()
     job_read = Job.load(self.env, test_job.uuid)
     self.assertEqual(test_job.args, job_read.args)
     self.assertEqual(job_read.args, (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")
Example #14
0
 def test_accented_bytestring(self):
     test_job = Job(self.method,
                    args=('öô¿‽', 'ñě'),
                    kwargs={'c': 'ßø'},
                    priority=15,
                    description="My dé^Wdescription")
     test_job.user_id = 1
     test_job.store()
     job_read = Job.load(self.env, test_job.uuid)
     # the job's args and description have been created as bytestring but
     # are decoded to utf8 by the ORM so make them comparable
     self.assertEqual(job_read.args,
                      ('öô¿‽'.decode('utf8'), 'ñě'.decode('utf8')))
     self.assertEqual(job_read.kwargs, {'c': 'ßø'.decode('utf8')})
     self.assertEqual(job_read.description,
                      "My dé^Wdescription".decode('utf8'))
Example #15
0
 def test_unicode(self):
     test_job = Job(
         self.method,
         args=(u"öô¿‽", u"ñě"),
         kwargs={"c": u"ßø"},
         priority=15,
         description=u"My dé^Wdescription",
     )
     test_job.store()
     job_read = Job.load(self.env, test_job.uuid)
     self.assertEqual(test_job.args, job_read.args)
     self.assertEqual(job_read.args, (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")
Example #16
0
    def test_job_identity_key_func_exact(self):
        hasher = hashlib.sha1()
        hasher.update('test.queue.job'.encode('utf-8'))
        hasher.update('testing_method'.encode('utf-8'))
        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)
Example #17
0
 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)
Example #18
0
    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)
Example #19
0
    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(
            self.env["test.queue.channel"], method
        )
        path_a = "<{}>.{}".format(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)
Example #20
0
    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.assertEqual(job_func.channel, "root")

        test_job = Job(method)
        test_job.store()
        stored = test_job.db_record()
        self.assertEqual(stored.channel, "root")
        job_read = Job.load(self.env, test_job.uuid)
        self.assertEqual(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.assertEqual(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.assertEqual(stored.channel, test_job.channel)
Example #21
0
 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)
Example #22
0
 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")
Example #23
0
 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)
Example #24
0
 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