def test_config(self): debug_config = core.get_debug_logs_config( cfg_path=('tests', 'fixtures/config/debug.default.cfg')) debug_log_manager = DebugLogsManager().setup_logs(debug_config) file_logger = debug_log_manager.logs['de_sim.debug.testing.file'] self.assertFalse(FastLogger(file_logger, 'debug').active) self.assertTrue(FastLogger(file_logger, 'info').active) console_logger = debug_log_manager.logs['de_sim.debug.testing.console'] self.assertFalse(FastLogger(console_logger, 'debug').active) self.assertFalse(FastLogger(console_logger, 'info').active) self.assertTrue(FastLogger(console_logger, 'warning').active) debug_config = core.get_debug_logs_config() debug_log_manager = DebugLogsManager().setup_logs(debug_config) file_logger = debug_log_manager.logs['de_sim.debug.file'] self.assertFalse(FastLogger(file_logger, 'debug').active)
class DefaultDebugLogsTest(unittest.TestCase): def setUp(self): log_config = ConfigManager(debug_logs_default_paths).get_config() self.debug_log_manager = DebugLogsManager() self.debug_log_manager.setup_logs(log_config) def test_file(self): logger = self.debug_log_manager.get_log('wc.debug.file') handler = next(iter(logger.handlers)) filename = handler.fh.name prev_size = os.path.getsize(filename) msg = 'debug message' logger.debug(msg) with open(filename, 'r') as file: file.seek(prev_size) new_log = file.read() self.assertRegex(new_log, r'^.+?; .+?; .+?; .+?:.+?:\d+; {:s}\n$'.format(msg)) # test str(DebugLogsManager()) self.assertIn(filename, str(self.debug_log_manager)) self.assertIn('level', str(self.debug_log_manager)) debug_log_manager = DebugLogsManager() self.assertEqual('No logs configured', str(debug_log_manager)) def test_console(self): logger = self.debug_log_manager.get_log('wc.debug.console') msg = 'wc.debug.console message' # using redirect_stdout does not work with either nosetests or pytest; unclear why # if running with nosetests must use --nocapture, and not use --with-xunit # you can '> /dev/null' if stdout is bothersome with CaptureOutput() as capturer: logger.debug(msg) logged_line = capturer.get_text() self.assertRegex(logged_line, r'^.+?; .+?; .+?; .+?:.+?:\d+; {:s}$'.format(msg))
def get_debug_logs(extra=None): """ Get debug logs Args: extra (:obj:`dict`, optional): additional configuration to override Returns: :obj:`wc_utils.debug_logs.core.DebugLogsManager`: a `DebugLogsManager` """ config = get_debug_logs_config(extra) return DebugLogsManager().setup_logs(config)
def test_file(self): debug_config = { 'handlers': { 'file': { 'class': 'FileHandler', 'filename': self._temp_log_file, 'level': 'debug', }, }, 'loggers': { '__test__.file': { 'template': '{timestamp}; {name:s}; {level:s}; {source}:{function:s}:{line:d}; {sim_time:2.1f}; {message:s}', 'handler': 'file', 'additional_context': { 'sim_time': 1.5 }, }, }, } # setup test logger debug_log_manager = DebugLogsManager() debug_log_manager.setup_logs(debug_config) # get logger logger = debug_log_manager.get_log('__test__.file') # write message msg = 'debug message' logger.debug(msg) # assert log file created self.assertTrue(os.path.isfile(self._temp_log_file)) # assert message saved to file with open(self._temp_log_file, 'r') as file: log = file.read() self.assertRegex(log, r'^.+?; .+?; .+?:.+?:\d+; 1.5; {:s}\n$'.format(msg))
def test_console(self): # configure test logger debug_config = { 'handlers': { 'stream': { 'class': 'StdOutHandler', 'level': 'debug', }, }, 'loggers': { '__test__.stream': { 'template': '{timestamp}; {name:s}; {level:s}; {source}:{function:s}:{line:d}; {sim_time:f}; {message:s}', 'handler': 'stream', 'additional_context': { 'sim_time': 1.5 }, }, }, } # setup test logger debug_log_manager = DebugLogsManager() debug_log_manager.setup_logs(debug_config) # get console logger logger = debug_log_manager.get_log('__test__.stream') # override stream next(iter(logger.handlers)).stream = self.stream # output message msg = 'debug message' sim_time = 2.5 logger.debug(msg, sim_time=sim_time) # check message is correct self.assertRegex( self.stream.getvalue(), r'^.+?; .+?; .+?:.+?:\d+; {:f}; {:s}\n$'.format(sim_time, msg))
def test_file(self): logger = self.debug_log_manager.get_log('wc.debug.file') handler = next(iter(logger.handlers)) filename = handler.fh.name prev_size = os.path.getsize(filename) msg = 'debug message' logger.debug(msg) with open(filename, 'r') as file: file.seek(prev_size) new_log = file.read() self.assertRegex(new_log, r'^.+?; .+?; .+?; .+?:.+?:\d+; {:s}\n$'.format(msg)) # test str(DebugLogsManager()) self.assertIn(filename, str(self.debug_log_manager)) self.assertIn('level', str(self.debug_log_manager)) debug_log_manager = DebugLogsManager() self.assertEqual('No logs configured', str(debug_log_manager))
""" Setup simulation example configuration :Author: Arthur Goldberg <*****@*****.**> :Date: 2016-10-03 :Copyright: 2016-2020, Karr Lab :License: MIT """ from .config import core from wc_utils.debug_logs.core import DebugLogsManager # setup debug logs config = core.get_debug_logs_config() logs = DebugLogsManager().setup_logs(config)
def setUp(self): log_config = ConfigManager(debug_logs_default_paths).get_config() self.debug_log_manager = DebugLogsManager() self.debug_log_manager.setup_logs(log_config)
def test_undefined_log(self): debug_log_manager = DebugLogsManager() debug_log_manager.setup_logs({}) with self.assertRaisesRegex(ValueError, "' not found in logs '"): debug_log_manager.get_log('not_exists')
def test_no_logs(self): debug_log_manager = DebugLogsManager() with self.assertRaisesRegex(ValueError, "^No log initialized.$"): debug_log_manager.get_log('')