test_log.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from __future__ import with_statement
  2. import os
  3. import sys
  4. import logging
  5. import unittest
  6. import multiprocessing
  7. from StringIO import StringIO
  8. from celery.log import setup_logger, emergency_error
  9. from celery.tests.utils import OverrideStdout
  10. from tempfile import mktemp
  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. self.assertTrue(logger.handlers[0].stream is sys.stderr,
  33. "setup_logger logs to stderr without logfile argument.")
  34. #self.assertTrue(logger._process_aware,
  35. # "setup_logger() returns process aware logger.")
  36. self.assertDidLogTrue(logger, "Logging something",
  37. "Logger logs error when loglevel is ERROR",
  38. loglevel=logging.ERROR)
  39. self.assertDidLogFalse(logger, "Logging something",
  40. "Logger doesn't info when loglevel is ERROR",
  41. loglevel=logging.INFO)
  42. def test_emergency_error(self):
  43. sio = StringIO()
  44. emergency_error(sio, "Testing emergency error facility")
  45. self.assertEquals(sio.getvalue().rpartition(":")[2].strip(),
  46. "Testing emergency error facility")
  47. def test_setup_logger_no_handlers_stream(self):
  48. from multiprocessing import get_logger
  49. l = get_logger()
  50. l.handlers = []
  51. with OverrideStdout() as outs:
  52. stdout, stderr = outs
  53. l = setup_logger(logfile=stderr, loglevel=logging.INFO)
  54. l.info("The quick brown fox...")
  55. self.assertTrue("The quick brown fox..." in stderr.getvalue())
  56. def test_setup_logger_no_handlers_file(self):
  57. from multiprocessing import get_logger
  58. l = get_logger()
  59. l.handlers = []
  60. tempfile = mktemp(suffix="unittest", prefix="celery")
  61. l = setup_logger(logfile=tempfile, loglevel=0)
  62. self.assertTrue(isinstance(l.handlers[0], logging.FileHandler))
  63. def test_emergency_error_stderr(self):
  64. with OverrideStdout() as outs:
  65. stdout, stderr = outs
  66. emergency_error(None, "The lazy dog crawls under the fast fox")
  67. self.assertTrue("The lazy dog crawls under the fast fox" in \
  68. stderr.getvalue())
  69. def test_emergency_error_file(self):
  70. tempfile = mktemp(suffix="unittest", prefix="celery")
  71. emergency_error(tempfile, "Vandelay Industries")
  72. with open(tempfile, "r") as tempfilefh:
  73. self.assertTrue("Vandelay Industries" in "".join(tempfilefh))
  74. os.unlink(tempfile)