Example #1
0
 def test_windows_B_option(self):
     celery = Celery(set_as_current=False)
     celery.IS_WINDOWS = True
     with self.assertRaises(SystemExit):
         celery.Worker(run_clockservice=True)
Example #2
0
 def test_no_loglevel(self):
     app = Celery(set_as_current=False)
     app.Worker = Mock()
     WorkerCommand(app=app).run(loglevel=None)
Example #3
0
 def test_queues_string(self):
     celery = Celery(set_as_current=False)
     w = celery.Worker()
     w.setup_queues('foo,bar,baz')
     self.assertEqual(w.queues, ['foo', 'bar', 'baz'])
     self.assertTrue('foo' in celery.amqp.queues)
Example #4
0
 def test_queues_string(self):
     celery = Celery(set_as_current=False)
     worker = celery.Worker(queues="foo,bar,baz")
     worker.init_queues()
     self.assertEqual(worker.use_queues, ["foo", "bar", "baz"])
     self.assertTrue("foo" in celery.amqp.queues)
Example #5
0
 def test_no_loglevel(self):
     app = Celery(set_as_current=False)
     app.Worker = Mock()
     worker(app=app).run(loglevel=None)
Example #6
0
 def test_queues_string(self):
     celery = Celery(set_as_current=False)
     worker = celery.Worker(queues='foo,bar,baz')
     worker.init_queues()
     self.assertEqual(worker.use_queues, ['foo', 'bar', 'baz'])
     self.assertTrue('foo' in celery.amqp.queues)
Example #7
0
 def test_tasklist(self):
     celery = Celery(set_as_current=False)
     worker = celery.Worker()
     self.assertTrue(worker.tasklist(include_builtins=True))
     worker.tasklist(include_builtins=False)
Example #8
0
@app.task
def xsum(lst):
    print(f'xsum({lst})')
    return sum(lst)


@app.task
def broken_task():
    raise Exception('failed')


@app.task
def on_task_error(task_context, status, traceback, task_name):
    print(f'ERROR IN TASK {task_name}: {task_context}; {status}; {traceback}')


@app.task
def print_task(x):
    print(x)


@app.task
def on_task_success(task_id, task_name):
    print(f'TASK SUCCEDED {task_id}: {task_name}')


if __name__ == '__main__':
    app.Worker().start()
    # app.worker_main()
Example #9
0
class test_App(Case):

    def setUp(self):
        self.app = Celery(set_as_current=False)
        self.app.conf.update(test_config)

    def test_task(self):
        app = Celery("foozibari", set_as_current=False)

        def fun():
            pass

        fun.__module__ = "__main__"
        task = app.task(fun)
        self.assertEqual(task.name, app.main + ".fun")

    def test_with_broker(self):
        app = Celery(set_as_current=False, broker="foo://baribaz")
        self.assertEqual(app.conf.BROKER_HOST, "foo://baribaz")

    def test_repr(self):
        self.assertTrue(repr(self.app))

    def test_TaskSet(self):
        ts = self.app.TaskSet()
        self.assertListEqual(ts.tasks, [])
        self.assertIs(ts.app, self.app)

    def test_pickle_app(self):
        changes = dict(THE_FOO_BAR="bars",
                       THE_MII_MAR="jars")
        self.app.conf.update(changes)
        saved = pickle.dumps(self.app)
        self.assertLess(len(saved), 2048)
        restored = pickle.loads(saved)
        self.assertDictContainsSubset(changes, restored.conf)

    def test_worker_main(self):
        from celery.bin import celeryd

        class WorkerCommand(celeryd.WorkerCommand):

            def execute_from_commandline(self, argv):
                return argv

        prev, celeryd.WorkerCommand = celeryd.WorkerCommand, WorkerCommand
        try:
            ret = self.app.worker_main(argv=["--version"])
            self.assertListEqual(ret, ["--version"])
        finally:
            celeryd.WorkerCommand = prev

    def test_config_from_envvar(self):
        os.environ["CELERYTEST_CONFIG_OBJECT"] = "celery.tests.app.test_app"
        self.app.config_from_envvar("CELERYTEST_CONFIG_OBJECT")
        self.assertEqual(self.app.conf.THIS_IS_A_KEY, "this is a value")

    def test_config_from_object(self):

        class Object(object):
            LEAVE_FOR_WORK = True
            MOMENT_TO_STOP = True
            CALL_ME_BACK = 123456789
            WANT_ME_TO = False
            UNDERSTAND_ME = True

        self.app.config_from_object(Object())

        self.assertTrue(self.app.conf.LEAVE_FOR_WORK)
        self.assertTrue(self.app.conf.MOMENT_TO_STOP)
        self.assertEqual(self.app.conf.CALL_ME_BACK, 123456789)
        self.assertFalse(self.app.conf.WANT_ME_TO)
        self.assertTrue(self.app.conf.UNDERSTAND_ME)

    def test_config_from_cmdline(self):
        cmdline = [".always_eager=no",
                   ".result_backend=/dev/null",
                   '.task_error_whitelist=(list)["a", "b", "c"]',
                   "celeryd.prefetch_multiplier=368",
                   ".foobarstring=(string)300",
                   ".foobarint=(int)300",
                   '.result_engine_options=(dict){"foo": "bar"}']
        self.app.config_from_cmdline(cmdline, namespace="celery")
        self.assertFalse(self.app.conf.CELERY_ALWAYS_EAGER)
        self.assertEqual(self.app.conf.CELERY_RESULT_BACKEND, "/dev/null")
        self.assertEqual(self.app.conf.CELERYD_PREFETCH_MULTIPLIER, 368)
        self.assertListEqual(self.app.conf.CELERY_TASK_ERROR_WHITELIST,
                             ["a", "b", "c"])
        self.assertEqual(self.app.conf.CELERY_FOOBARSTRING, "300")
        self.assertEqual(self.app.conf.CELERY_FOOBARINT, 300)
        self.assertDictEqual(self.app.conf.CELERY_RESULT_ENGINE_OPTIONS,
                             {"foo": "bar"})

    def test_compat_setting_CELERY_BACKEND(self):

        self.app.config_from_object(Object(CELERY_BACKEND="set_by_us"))
        self.assertEqual(self.app.conf.CELERY_RESULT_BACKEND, "set_by_us")

    def test_setting_BROKER_TRANSPORT_OPTIONS(self):

        _args = {'foo': 'bar', 'spam': 'baz'}

        self.app.config_from_object(Object())
        self.assertEqual(self.app.conf.BROKER_TRANSPORT_OPTIONS, {})

        self.app.config_from_object(Object(BROKER_TRANSPORT_OPTIONS=_args))
        self.assertEqual(self.app.conf.BROKER_TRANSPORT_OPTIONS, _args)

    def test_Windows_log_color_disabled(self):
        self.app.IS_WINDOWS = True
        self.assertFalse(self.app.log.supports_color())

    def test_compat_setting_CARROT_BACKEND(self):
        self.app.config_from_object(Object(CARROT_BACKEND="set_by_us"))
        self.assertEqual(self.app.conf.BROKER_TRANSPORT, "set_by_us")

    def test_WorkController(self):
        x = self.app.Worker()
        self.assertIs(x.app, self.app)

    def test_AsyncResult(self):
        x = self.app.AsyncResult("1")
        self.assertIs(x.app, self.app)
        r = loads(dumps(x))
        # not set as current, so ends up as default app after reduce
        self.assertIs(r.app, state.default_app)

    @patch("celery.bin.celery.CeleryCommand.execute_from_commandline")
    def test_start(self, execute):
        self.app.start()
        self.assertTrue(execute.called)

    def test_mail_admins(self):

        class Loader(BaseLoader):

            def mail_admins(*args, **kwargs):
                return args, kwargs

        self.app.loader = Loader()
        self.app.conf.ADMINS = None
        self.assertFalse(self.app.mail_admins("Subject", "Body"))
        self.app.conf.ADMINS = [("George Costanza", "*****@*****.**")]
        self.assertTrue(self.app.mail_admins("Subject", "Body"))

    def test_amqp_get_broker_info(self):
        self.assertDictContainsSubset({"hostname": "localhost",
                                       "userid": "guest",
                                       "password": "******",
                                       "virtual_host": "/"},
                                      self.app.broker_connection(
                                          transport="amqplib").info())
        self.app.conf.BROKER_PORT = 1978
        self.app.conf.BROKER_VHOST = "foo"
        self.assertDictContainsSubset({"port": 1978,
                                       "virtual_host": "foo"},
                                      self.app.broker_connection(
                                          transport="amqplib").info())
        conn = self.app.broker_connection(virtual_host="/value")
        self.assertDictContainsSubset({"virtual_host": "/value"},
                                      conn.info())

    def test_BROKER_BACKEND_alias(self):
        self.assertEqual(self.app.conf.BROKER_BACKEND,
                         self.app.conf.BROKER_TRANSPORT)

    def test_with_default_connection(self):

        @self.app.with_default_connection
        def handler(connection=None, foo=None):
            return connection, foo

        connection, foo = handler(foo=42)
        self.assertEqual(foo, 42)
        self.assertTrue(connection)

    def test_after_fork(self):
        p = self.app._pool = Mock()
        self.app._after_fork(self.app)
        p.force_close_all.assert_called_with()
        self.assertIsNone(self.app._pool)
        self.app._after_fork(self.app)

    def test_pool_no_multiprocessing(self):
        with mask_modules("multiprocessing.util"):
            pool = self.app.pool
            self.assertIs(pool, self.app._pool)

    def test_bugreport(self):
        self.assertTrue(self.app.bugreport())

    def test_send_task_sent_event(self):

        class Dispatcher(object):
            sent = []

            def send(self, type, **fields):
                self.sent.append((type, fields))

        conn = self.app.broker_connection()
        chan = conn.channel()
        try:
            for e in ("foo_exchange", "moo_exchange", "bar_exchange"):
                chan.exchange_declare(e, "direct", durable=True)
                chan.queue_declare(e, durable=True)
                chan.queue_bind(e, e, e)
        finally:
            chan.close()
        assert conn.transport_cls == "memory"

        entities = conn.declared_entities

        pub = self.app.amqp.TaskPublisher(conn, exchange="foo_exchange")
        self.assertNotIn(pub._get_exchange("foo_exchange"), entities)

        dispatcher = Dispatcher()
        self.assertTrue(pub.delay_task("footask", (), {},
                                       exchange="moo_exchange",
                                       routing_key="moo_exchange",
                                       event_dispatcher=dispatcher))
        self.assertIn(pub._get_exchange("moo_exchange"), entities)
        self.assertTrue(dispatcher.sent)
        self.assertEqual(dispatcher.sent[0][0], "task-sent")
        self.assertTrue(pub.delay_task("footask", (), {},
                                       event_dispatcher=dispatcher,
                                       exchange="bar_exchange",
                                       routing_key="bar_exchange"))
        self.assertIn(pub._get_exchange("bar_exchange"), entities)

    def test_error_mail_sender(self):
        x = ErrorMail.subject % {"name": "task_name",
                                 "id": uuid(),
                                 "exc": "FOOBARBAZ",
                                 "hostname": "lana"}
        self.assertTrue(x)