log_test.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. # Copyright (C) 2010 Internet Systems Consortium.
  2. #
  3. # Permission to use, copy, modify, and distribute this software for any
  4. # purpose with or without fee is hereby granted, provided that the above
  5. # copyright notice and this permission notice appear in all copies.
  6. #
  7. # THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
  8. # DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
  9. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
  10. # INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
  11. # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
  12. # FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
  13. # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
  14. # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. #
  16. # Tests for the python logging module
  17. #
  18. from isc.log.log import *
  19. import unittest
  20. import os
  21. import tempfile
  22. class TestRotateFileHandler(unittest.TestCase):
  23. def setUp(self):
  24. self.FILE_LOG1 = tempfile.NamedTemporaryFile(mode='w',
  25. prefix="b10",
  26. delete=True)
  27. self.FILE_LOG2 = tempfile.NamedTemporaryFile(mode='w',
  28. prefix="b10",
  29. delete=True)
  30. self.FILE_LOG3 = tempfile.NamedTemporaryFile(mode='w',
  31. prefix="b10",
  32. delete=True)
  33. self.handler = NSFileLogHandler(filename = self.FILE_LOG1.name,
  34. maxBytes = 1024,
  35. backupCount = 5)
  36. def test_shouldRollover(self):
  37. if(os.path.exists(self.FILE_LOG1.name)):
  38. os.remove(self.FILE_LOG1.name)
  39. record = logging.LogRecord(None, None, "", 0, "rotate file handler", (), None, None)
  40. self.handler.shouldRollover(record)
  41. self.assertTrue(os.path.exists(self.FILE_LOG1.name))
  42. def test_update_config(self):
  43. self.handler.update_config(self.FILE_LOG2.name, 3, 512)
  44. self.assertEqual(self.handler.baseFilename, self.FILE_LOG2.name)
  45. self.assertEqual(self.handler.maxBytes, 512)
  46. self.assertEqual(self.handler.backupCount, 3)
  47. dir = os.path.split(self.FILE_LOG3.name)
  48. path = dir[0] + "path_not_exists"
  49. update_file = os.path.join(path, dir[1])
  50. if not os.path.exists(path):
  51. self.handler.update_config(update_file, 4, 1024)
  52. self.assertEqual(self.handler.baseFilename, self.FILE_LOG2.name)
  53. self.assertEqual(self.handler.maxBytes, 1024)
  54. self.assertEqual(self.handler.backupCount, 4)
  55. def tearDown(self):
  56. self.handler.flush()
  57. self.handler.close()
  58. self.FILE_LOG1.close()
  59. self.FILE_LOG2.close()
  60. self.FILE_LOG3.close()
  61. class TestSysLogHandler(unittest.TestCase):
  62. def setUp(self):
  63. self.handler = NSSysLogHandler("BIND10")
  64. def test_encodeLevel(self):
  65. sysLevel = self.handler._encodeLevel(logging.ERROR)
  66. self.assertEqual(sysLevel, syslog.LOG_ERR)
  67. def test_emit(self):
  68. record = logging.LogRecord(None, None, "", 0, "syslog handler", (), None, None)
  69. self.handler.emit(record)
  70. class TestLogging(unittest.TestCase):
  71. def setUp(self):
  72. self.FILE_STREAM_LOG1= tempfile.NamedTemporaryFile(mode='w',
  73. prefix="b10",
  74. delete=True)
  75. self.FILE_STREAM_LOG2= tempfile.NamedTemporaryFile(mode='w',
  76. prefix="b10",
  77. delete=True)
  78. self.FILE_STREAM_LOG3= tempfile.NamedTemporaryFile(mode='w',
  79. prefix="b10",
  80. delete=True)
  81. self.file_stream_logger = NSLogger('File_Stream_Logger',
  82. self.FILE_STREAM_LOG1.name,
  83. 'debug', 5, 1024, True)
  84. self.syslog_logger = NSLogger('SysLogger', '', 'info', 5, 1024, False)
  85. def test_logging_init(self):
  86. self.assertNotEqual(self.file_stream_logger._file_handler, None)
  87. self.assertNotEqual(self.file_stream_logger._stream_handler, None)
  88. self.assertEqual(self.file_stream_logger._syslog_handler, None)
  89. ret = self.file_stream_logger._file_handler in self.file_stream_logger.handlers
  90. self.assertTrue(ret)
  91. ret = self.file_stream_logger._stream_handler in self.file_stream_logger.handlers
  92. self.assertTrue(ret)
  93. ret = self.file_stream_logger._syslog_handler in self.file_stream_logger.handlers
  94. self.assertFalse(ret)
  95. logLevel = LEVELS.get('debug', logging.NOTSET)
  96. self.assertEqual(self.file_stream_logger.getEffectiveLevel(), logLevel)
  97. self.assertEqual(self.syslog_logger._file_handler, None)
  98. self.assertEqual(self.syslog_logger._stream_handler, None)
  99. self.assertNotEqual(self.syslog_logger._syslog_handler, None)
  100. ret = self.syslog_logger._file_handler in self.syslog_logger.handlers
  101. self.assertFalse(ret)
  102. ret = self.syslog_logger._stream_handler in self.syslog_logger.handlers
  103. self.assertFalse(ret)
  104. ret = self.syslog_logger._syslog_handler in self.syslog_logger.handlers
  105. self.assertTrue(ret)
  106. logLevel = LEVELS.get('info', logging.NOTSET)
  107. self.assertEqual(self.syslog_logger.getEffectiveLevel(), logLevel)
  108. def test_add_rotate_handler(self):
  109. if(self.syslog_logger._file_handler in self.syslog_logger.handlers):
  110. self.syslog_logger.removeHandler(self.syslog_logger._file_handler)
  111. self.syslog_logger._add_rotate_handler('', 5, 1024)
  112. ret = self.syslog_logger._file_handler in self.syslog_logger.handlers
  113. self.assertFalse(ret)
  114. self.syslog_logger._add_rotate_handler(self.FILE_STREAM_LOG1.name, 5, 1024)
  115. ret = self.syslog_logger._file_handler in self.syslog_logger.handlers
  116. self.assertTrue(ret)
  117. def test_add_stream_handler(self):
  118. if(self.file_stream_logger._stream_handler in self.file_stream_logger.handlers):
  119. self.file_stream_logger.removeHandler(self.file_stream_logger._stream_handler)
  120. self.file_stream_logger._add_stream_handler()
  121. ret = self.file_stream_logger._stream_handler in self.file_stream_logger.handlers
  122. self.assertTrue(ret)
  123. def test_add_syslog_handler(self):
  124. if(self.syslog_logger._syslog_handler in self.syslog_logger.handlers):
  125. self.syslog_logger.removeHandler(self.syslog_logger._syslog_handler)
  126. self.syslog_logger._add_syslog_handler()
  127. ret = self.syslog_logger._syslog_handler in self.syslog_logger.handlers
  128. self.assertTrue(ret)
  129. def test_update_rotate_handler(self):
  130. self.file_stream_logger._update_rotate_handler(self.FILE_STREAM_LOG2.name, 4, 1024)
  131. ret = self.file_stream_logger._file_handler in self.file_stream_logger.handlers
  132. self.assertTrue(ret)
  133. self.file_stream_logger._update_rotate_handler('', 5, 1024)
  134. ret = self.file_stream_logger._file_handler in self.file_stream_logger.handlers
  135. self.assertFalse(ret)
  136. self.file_stream_logger._update_rotate_handler(self.FILE_STREAM_LOG1.name, 4, 1024)
  137. ret = self.file_stream_logger._file_handler in self.file_stream_logger.handlers
  138. self.assertTrue(ret)
  139. def test_update_config(self):
  140. update_config = {'log_file' : self.FILE_STREAM_LOG1.name,
  141. 'log_severity' : 'error',
  142. 'log_versions' : 4,
  143. 'log_max_bytes' : 1024}
  144. self.file_stream_logger.update_config(update_config)
  145. logLevel = LEVELS.get('error', logging.NOTSET)
  146. self.assertEqual(self.file_stream_logger.getEffectiveLevel(), logLevel)
  147. def test_log_message(self):
  148. update_config = {'log_file' : self.FILE_STREAM_LOG3.name,
  149. 'log_severity' : 'critical',
  150. 'log_versions' : 4,
  151. 'log_max_bytes' : 1024}
  152. self.file_stream_logger.update_config(update_config)
  153. self.file_stream_logger.log_message('debug', 'debug message')
  154. self.file_stream_logger.log_message('info', 'info message')
  155. self.file_stream_logger.log_message('warning', 'warning message')
  156. self.file_stream_logger.log_message('error', 'error message')
  157. self.assertTrue(os.path.exists(self.FILE_STREAM_LOG3.name))
  158. def tearDown(self):
  159. self.FILE_STREAM_LOG1.close()
  160. self.FILE_STREAM_LOG2.close()
  161. self.FILE_STREAM_LOG3.close()
  162. if __name__ == '__main__':
  163. unittest.main()