def test_send_email(self): from celery import conf from celery.worker import job old_mail_admins = job.mail_admins old_enable_mails = conf.CELERY_SEND_TASK_ERROR_EMAILS mail_sent = [False] def mock_mail_admins(*args, **kwargs): mail_sent[0] = True job.mail_admins = mock_mail_admins conf.CELERY_SEND_TASK_ERROR_EMAILS = True try: tw = TaskWrapper(mytask.name, gen_unique_id(), [1], {"f": "x"}) try: raise KeyError("foo") except KeyError: einfo = ExceptionInfo(sys.exc_info()) tw.on_failure(einfo) self.assertTrue(mail_sent[0]) mail_sent[0] = False conf.CELERY_SEND_TASK_ERROR_EMAILS = False tw.on_failure(einfo) self.assertFalse(mail_sent[0]) finally: job.mail_admins = old_mail_admins conf.CELERY_SEND_TASK_ERROR_EMAILS = old_enable_mails
def _test_on_failure(self, exception): tid = gen_unique_id() tw = TaskWrapper(mytask.name, tid, [4], {"f": "x"}) try: raise exception except Exception: exc_info = ExceptionInfo(sys.exc_info()) logfh = StringIO() tw.logger.handlers = [] tw.logger = setup_logger(logfile=logfh, loglevel=logging.INFO) from celery import conf conf.CELERY_SEND_TASK_ERROR_EMAILS = True tw.on_failure(exc_info) logvalue = logfh.getvalue() self.assertIn(mytask.name, logvalue) self.assertIn(tid, logvalue) self.assertIn("ERROR", logvalue) conf.CELERY_SEND_TASK_ERROR_EMAILS = False
def test_on_failure(self): tid = gen_unique_id() tw = TaskWrapper("cu.mytask", tid, mytask, [4], {"f": "x"}) try: raise Exception("Inside unit tests") except Exception: exc_info = ExceptionInfo(sys.exc_info()) logfh = StringIO() tw.logger.handlers = [] tw.logger = setup_logger(logfile=logfh, loglevel=logging.INFO) from celery import conf conf.SEND_CELERY_TASK_ERROR_EMAILS = True tw.on_failure(exc_info, {"task_id": tid, "task_name": "cu.mytask"}) logvalue = logfh.getvalue() self.assertTrue("cu.mytask" in logvalue) self.assertTrue(tid in logvalue) self.assertTrue("ERROR" in logvalue) conf.SEND_CELERY_TASK_ERROR_EMAILS = False