Browse Source

Added tests for task loggers.

Ask Solem 14 years ago
parent
commit
7ead4a5ec9
1 changed files with 42 additions and 20 deletions
  1. 42 20
      celery/tests/test_log.py

+ 42 - 20
celery/tests/test_log.py

@@ -14,24 +14,40 @@ except ImportError:
 
 from carrot.utils import rpartition
 
-from celery.log import (setup_logger, emergency_error,
+from celery.log import (setup_logger, setup_task_logger, emergency_error,
+                        get_default_logger, get_task_logger,
                         redirect_stdouts_to_logger, LoggingProxy)
 from celery.tests.utils import override_stdouts, execute_context
+from celery.utils.compat import LoggerAdapter
 
 
+def get_handlers(logger):
+    if isinstance(logger, LoggerAdapter):
+        return logger.logger.handlers
+    return logger.handlers
+
+def set_handlers(logger, new_handlers):
+    if isinstance(logger, LoggerAdapter):
+        logger.logger.handlers = new_handlers
+    logger.handlers = new_handlers
+
 @contextmanager
 def wrap_logger(logger, loglevel=logging.ERROR):
-    old_handlers = logger.handlers
+    old_handlers = get_handlers(logger)
     sio = StringIO()
     siohandler = logging.StreamHandler(sio)
-    logger.handlers = [siohandler]
+    set_handlers(logger, [siohandler])
 
     yield sio
 
-    logger.handlers = old_handlers
+    set_handlers(logger, old_handlers)
+
 
+class test_default_logger(unittest.TestCase):
 
-class TestLog(unittest.TestCase):
+    def setUp(self):
+        self.setup_logger = setup_logger
+        self.get_logger = get_default_logger
 
     def _assertLog(self, logger, logmsg, loglevel=logging.ERROR):
 
@@ -51,10 +67,10 @@ class TestLog(unittest.TestCase):
         return self.assertFalse(val, reason)
 
     def test_setup_logger(self):
-        logger = setup_logger(loglevel=logging.ERROR, logfile=None)
-        logger.handlers = [] # Reset previously set logger.
-        logger = setup_logger(loglevel=logging.ERROR, logfile=None)
-        self.assertIs(logger.handlers[0].stream, sys.__stderr__,
+        logger = self.setup_logger(loglevel=logging.ERROR, logfile=None)
+        set_handlers(logger, [])
+        logger = self.setup_logger(loglevel=logging.ERROR, logfile=None)
+        self.assertIs(get_handlers(logger)[0].stream, sys.__stderr__,
                 "setup_logger logs to stderr without logfile argument.")
         self.assertDidLogFalse(logger, "Logging something",
                 "Logger doesn't info when loglevel is ERROR",
@@ -67,13 +83,12 @@ class TestLog(unittest.TestCase):
                              "Testing emergency error facility")
 
     def test_setup_logger_no_handlers_stream(self):
-        from multiprocessing import get_logger
-        l = get_logger()
-        l.handlers = []
+        l = self.get_logger()
+        set_handlers(l, [])
 
         def with_override_stdouts(outs):
             stdout, stderr = outs
-            l = setup_logger(logfile=stderr, loglevel=logging.INFO)
+            l = self.setup_logger(logfile=stderr, loglevel=logging.INFO)
             l.info("The quick brown fox...")
             self.assertIn("The quick brown fox...", stderr.getvalue())
 
@@ -81,12 +96,12 @@ class TestLog(unittest.TestCase):
         execute_context(context, with_override_stdouts)
 
     def test_setup_logger_no_handlers_file(self):
-        from multiprocessing import get_logger
-        l = get_logger()
-        l.handlers = []
+        l = self.get_logger()
+        set_handlers(l, [])
         tempfile = mktemp(suffix="unittest", prefix="celery")
-        l = setup_logger(logfile=tempfile, loglevel=0)
-        self.assertIsInstance(l.handlers[0], logging.FileHandler)
+        l = self.setup_logger(logfile=tempfile, loglevel=0)
+        print(get_handlers(l)[0].stream)
+        self.assertIsInstance(get_handlers(l)[0], logging.FileHandler)
 
     def test_emergency_error_stderr(self):
         def with_override_stdouts(outs):
@@ -109,7 +124,7 @@ class TestLog(unittest.TestCase):
             os.unlink(tempfile)
 
     def test_redirect_stdouts(self):
-        logger = setup_logger(loglevel=logging.ERROR, logfile=None)
+        logger = self.setup_logger(loglevel=logging.ERROR, logfile=None)
         try:
             def with_wrap_logger(sio):
                 redirect_stdouts_to_logger(logger, loglevel=logging.ERROR)
@@ -122,7 +137,7 @@ class TestLog(unittest.TestCase):
             sys.stdout, sys.stderr = sys.__stdout__, sys.__stderr__
 
     def test_logging_proxy(self):
-        logger = setup_logger(loglevel=logging.ERROR, logfile=None)
+        logger = self.setup_logger(loglevel=logging.ERROR, logfile=None)
 
         def with_wrap_logger(sio):
             p = LoggingProxy(logger)
@@ -143,3 +158,10 @@ class TestLog(unittest.TestCase):
 
         context = wrap_logger(logger)
         execute_context(context, with_wrap_logger)
+
+
+class test_task_logger(test_default_logger):
+
+    def setUp(self):
+        self.setup_logger = setup_task_logger
+        self.get_logger = get_task_logger