Source code for dhcpkit.tests.common.logging.test_verbosity

"""
Test whether the common logging verbosity functions work as intended
"""
import logging
import unittest

from dhcpkit.common.logging.verbosity import set_verbosity_logger
from dhcpkit.common.server.logging import DEBUG_HANDLING, DEBUG_PACKETS


[docs]class VerbosityLoggerTestCase(unittest.TestCase):
[docs] def test_logger_level(self): logger = logging.Logger('test_logger_level', logging.ERROR) self.assertEqual(logger.level, logging.ERROR) set_verbosity_logger(logger=logger, verbosity=0) self.assertEqual(logger.level, logging.NOTSET)
[docs] def test_existing_handler(self): tests = [ # Only critical errors to start with, so verbosity level increases output (logging.CRITICAL, 0, logging.CRITICAL), (logging.CRITICAL, 1, logging.WARNING), (logging.CRITICAL, 2, logging.INFO), (logging.CRITICAL, 3, logging.DEBUG), (logging.CRITICAL, 4, DEBUG_HANDLING), (logging.CRITICAL, 5, DEBUG_PACKETS), # Already showing errors, so verbosity 0 doesn't lower output (logging.ERROR, 0, logging.ERROR), (logging.ERROR, 1, logging.WARNING), (logging.ERROR, 2, logging.INFO), (logging.ERROR, 3, logging.DEBUG), (logging.ERROR, 4, DEBUG_HANDLING), (logging.ERROR, 5, DEBUG_PACKETS), # Already showing warnings, so verbosity 0 doesn't lower output (logging.WARNING, 0, logging.WARNING), (logging.WARNING, 1, logging.WARNING), (logging.WARNING, 2, logging.INFO), (logging.WARNING, 3, logging.DEBUG), (logging.WARNING, 4, DEBUG_HANDLING), (logging.WARNING, 5, DEBUG_PACKETS), # Already showing info, so verbosity 0 and 1 don't lower output (logging.INFO, 0, logging.INFO), (logging.INFO, 1, logging.INFO), (logging.INFO, 2, logging.INFO), (logging.INFO, 3, logging.DEBUG), (logging.INFO, 4, DEBUG_HANDLING), (logging.INFO, 5, DEBUG_PACKETS), # Already showing debug, so verbosity 0, 1 and 2 don't lower output (logging.DEBUG, 0, logging.DEBUG), (logging.DEBUG, 1, logging.DEBUG), (logging.DEBUG, 2, logging.DEBUG), (logging.DEBUG, 3, logging.DEBUG), (logging.DEBUG, 4, DEBUG_HANDLING), (logging.DEBUG, 5, DEBUG_PACKETS), # Already showing handling, so verbosity 0, 1, 2 and 3 don't lower output (DEBUG_HANDLING, 0, DEBUG_HANDLING), (DEBUG_HANDLING, 1, DEBUG_HANDLING), (DEBUG_HANDLING, 2, DEBUG_HANDLING), (DEBUG_HANDLING, 3, DEBUG_HANDLING), (DEBUG_HANDLING, 4, DEBUG_HANDLING), (DEBUG_HANDLING, 5, DEBUG_PACKETS), # Already showing packets, so verbosity 0, 1, 2, 3 and 4 don't lower output (DEBUG_PACKETS, 0, DEBUG_PACKETS), (DEBUG_PACKETS, 1, DEBUG_PACKETS), (DEBUG_PACKETS, 2, DEBUG_PACKETS), (DEBUG_PACKETS, 3, DEBUG_PACKETS), (DEBUG_PACKETS, 4, DEBUG_PACKETS), (DEBUG_PACKETS, 5, DEBUG_PACKETS), # Already showing everything, so not lowering output at all (logging.NOTSET, 0, logging.NOTSET), (logging.NOTSET, 1, logging.NOTSET), (logging.NOTSET, 2, logging.NOTSET), (logging.NOTSET, 3, logging.NOTSET), (logging.NOTSET, 4, logging.NOTSET), (logging.NOTSET, 5, logging.NOTSET), ] for original_level, verbosity, expected_level in tests: name = "{} & {} = {}".format(original_level, verbosity, expected_level) with self.subTest(test=name): logger = logging.Logger(name=name, level=logging.ERROR) handler = logging.Handler(level=original_level) logger.addHandler(handler) self.assertEqual(logger.level, logging.ERROR) self.assertEqual(handler.level, original_level) set_verbosity_logger(logger=logger, verbosity=verbosity, existing_console=handler) self.assertEqual(logger.level, logging.NOTSET) self.assertEqual(handler.level, expected_level)
[docs] def test_create_handler(self): tests = [ # Auto-created handler initially has level logging.ERROR (logging.ERROR, 0, logging.ERROR), (logging.ERROR, 1, logging.WARNING), (logging.ERROR, 2, logging.INFO), (logging.ERROR, 3, logging.DEBUG), (logging.ERROR, 4, DEBUG_HANDLING), (logging.ERROR, 5, DEBUG_PACKETS), ] for original_level, verbosity, expected_level in tests: name = "{} & {} = {}".format(original_level, verbosity, expected_level) with self.subTest(test=name): logger = logging.Logger(name=name, level=logging.ERROR) self.assertEqual(logger.level, logging.ERROR) set_verbosity_logger(logger=logger, verbosity=verbosity) self.assertEqual(logger.level, logging.NOTSET) handler = logger.handlers[0] self.assertEqual(handler.level, expected_level)
if __name__ == '__main__': # pragma: no cover unittest.main()