test_log.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from __future__ import with_statement
  2. import os
  3. import sys
  4. import logging
  5. import unittest
  6. from tempfile import mktemp
  7. from StringIO import StringIO
  8. from carrot.utils import rpartition
  9. from celery.log import setup_logger, emergency_error
  10. from celery.tests.utils import override_stdouts
  11. class TestLog(unittest.TestCase):
  12. def _assertLog(self, logger, logmsg, loglevel=logging.ERROR):
  13. # Save old handlers
  14. old_handler = logger.handlers[0]
  15. logger.removeHandler(old_handler)
  16. sio = StringIO()
  17. siohandler = logging.StreamHandler(sio)
  18. logger.addHandler(siohandler)
  19. logger.log(loglevel, logmsg)
  20. logger.removeHandler(siohandler)
  21. # Reset original handlers
  22. logger.addHandler(old_handler)
  23. return sio.getvalue().strip()
  24. def assertDidLogTrue(self, logger, logmsg, reason, loglevel=None):
  25. val = self._assertLog(logger, logmsg, loglevel=loglevel)
  26. return self.assertEqual(val, logmsg, reason)
  27. def assertDidLogFalse(self, logger, logmsg, reason, loglevel=None):
  28. val = self._assertLog(logger, logmsg, loglevel=loglevel)
  29. return self.assertFalse(val, reason)
  30. def test_setup_logger(self):
  31. logger = setup_logger(loglevel=logging.ERROR, logfile=None)
  32. logger.handlers = [] # Reset previously set logger.
  33. logger = setup_logger(loglevel=logging.ERROR, logfile=None)
  34. self.assertTrue(logger.handlers[0].stream is sys.stderr,
  35. "setup_logger logs to stderr without logfile argument.")
  36. #self.assertTrue(logger._process_aware,
  37. # "setup_logger() returns process aware logger.")
  38. self.assertDidLogTrue(logger, "Logging something",
  39. "Logger logs error when loglevel is ERROR",
  40. loglevel=logging.ERROR)
  41. self.assertDidLogFalse(logger, "Logging something",
  42. "Logger doesn't info when loglevel is ERROR",
  43. loglevel=logging.INFO)
  44. def test_emergency_error(self):
  45. sio = StringIO()
  46. emergency_error(sio, "Testing emergency error facility")
  47. self.assertEquals(rpartition(sio.getvalue(), ":")[2].strip(),
  48. "Testing emergency error facility")
  49. def test_setup_logger_no_handlers_stream(self):
  50. from multiprocessing import get_logger
  51. l = get_logger()
  52. l.handlers = []
  53. with override_stdouts() as outs:
  54. stdout, stderr = outs
  55. l = setup_logger(logfile=stderr, loglevel=logging.INFO)
  56. l.info("The quick brown fox...")
  57. self.assertTrue("The quick brown fox..." in stderr.getvalue())
  58. def test_setup_logger_no_handlers_file(self):
  59. from multiprocessing import get_logger
  60. l = get_logger()
  61. l.handlers = []
  62. tempfile = mktemp(suffix="unittest", prefix="celery")
  63. l = setup_logger(logfile=tempfile, loglevel=0)
  64. self.assertTrue(isinstance(l.handlers[0], logging.FileHandler))
  65. def test_emergency_error_stderr(self):
  66. with override_stdouts() as outs:
  67. stdout, stderr = outs
  68. emergency_error(None, "The lazy dog crawls under the fast fox")
  69. self.assertTrue("The lazy dog crawls under the fast fox" in \
  70. stderr.getvalue())
  71. def test_emergency_error_file(self):
  72. tempfile = mktemp(suffix="unittest", prefix="celery")
  73. emergency_error(tempfile, "Vandelay Industries")
  74. with open(tempfile, "r") as tempfilefh:
  75. self.assertTrue("Vandelay Industries" in "".join(tempfilefh))
  76. os.unlink(tempfile)