def logger(mocks): """Provides a mocked Logger instance""" def fn(logger, component): logger.contents.value = 5555 return yogi.ErrorCode.OK mocks.MOCK_LoggerCreate(fn) return yogi.Logger('foo')
def test_create_logger(mocks: Mocks): called = False def fn(logger, component): assert logger assert component == b'foo' logger.contents.value = 1234 nonlocal called called = True return yogi.ErrorCode.OK mocks.MOCK_LoggerCreate(fn) logger = yogi.Logger('foo') assert logger._handle.value == 1234 assert called
def test_logger_log(self): logger = yogi.Logger("My logger") fn_called = False fn_severity = None fn_file = None fn_line = None fn_comp = None fn_msg = None def fn(severity, timestamp, tid, file, line, comp, msg): nonlocal fn_severity, fn_file, fn_line, fn_comp, fn_msg, fn_called fn_severity = severity fn_file = file fn_line = line fn_comp = comp fn_msg = msg fn_called = True yogi.setup_hook_logging(yogi.Verbosity.INFO, fn) logger.log(yogi.Verbosity.WARNING, "Hey dude") self.assertTrue(fn_called) self.assertEqual(fn_severity, yogi.Verbosity.WARNING) self.assertEqual(fn_comp, "My logger") self.assertEqual(fn_msg, "Hey dude") self.assertEqual(fn_file, __file__) self.assertGreater(fn_line, 0) fn_called = False def fn2(severity, timestamp, tid, file, line, comp, msg): nonlocal fn_file, fn_line, fn_called fn_file = file fn_line = line fn_called = True yogi.setup_hook_logging(yogi.Verbosity.INFO, fn2) logger.log(yogi.Verbosity.WARNING, "Hey dude", file="my file", line=123) self.assertTrue(fn_called) self.assertEqual(fn_file, "my file") self.assertEqual(fn_line, 123)
def test_EffectiveVerbosity(self): yogi.Logger().yogi_verbosity = yogi.Verbosity.INFO yogi.Logger.max_yogi_verbosity = yogi.Verbosity.ERROR self.assertIs(yogi.Verbosity.ERROR, yogi.Logger().effective_yogi_verbosity) yogi.Logger.max_yogi_verbosity = yogi.Verbosity.DEBUG self.assertIs(yogi.Verbosity.INFO, yogi.Logger().effective_yogi_verbosity) yogi.Logger().stdout_verbosity = yogi.Verbosity.INFO yogi.Logger.max_stdout_verbosity = yogi.Verbosity.ERROR self.assertIs(yogi.Verbosity.ERROR, yogi.Logger().effective_stdout_verbosity) yogi.Logger.max_stdout_verbosity = yogi.Verbosity.DEBUG self.assertIs(yogi.Verbosity.INFO, yogi.Logger().effective_stdout_verbosity) yogi.Logger().yogi_verbosity = yogi.Verbosity.TRACE self.assertIs(yogi.Verbosity.DEBUG, yogi.Logger().max_effective_verbosity)
def test_ProcessInterface(self): yogi.Logger.colourised_stdout = False argv = [ '-j', ''' { "logging": { "stdout": { "colourised": true, "max-verbosity": "DEBUG", "component-verbosity": { "App" : "ERROR", "Yogi" : "FATAL", "test" : "TRACE" } }, "yogi": { "max-verbosity": "INFO", "component-verbosity": { "App" : "DEBUG", "Yogi" : "INFO", "test" : "WARNING" } } } }''' ] scheduler = yogi.Scheduler() leaf = yogi.Leaf(scheduler) pi = yogi.ProcessInterface(argv) # check initial configuration self.assertTrue(yogi.Logger.colourised_stdout) self.assertIs(yogi.Verbosity.DEBUG, yogi.Logger.max_stdout_verbosity) self.assertIs(yogi.Verbosity.ERROR, yogi.Logger().stdout_verbosity) self.assertIs(yogi.Verbosity.ERROR, yogi.Logger('App').stdout_verbosity) self.assertIs(yogi.Verbosity.FATAL, yogi.Logger('Yogi').stdout_verbosity) self.assertIs(yogi.Verbosity.TRACE, yogi.Logger('test').stdout_verbosity) self.assertIs(yogi.Verbosity.INFO, yogi.Logger.max_yogi_verbosity) self.assertIs(yogi.Verbosity.DEBUG, yogi.Logger().yogi_verbosity) self.assertIs(yogi.Verbosity.DEBUG, yogi.Logger('App').yogi_verbosity) self.assertIs(yogi.Verbosity.INFO, yogi.Logger('Yogi').yogi_verbosity) self.assertIs(yogi.Verbosity.WARNING, yogi.Logger('test').yogi_verbosity) # check logging over YOGI log_terminal = yogi.ConsumerTerminal('/Process/Log', yogi_000009cd_pb2, leaf=leaf) connection = yogi.LocalConnection(leaf, pi.leaf) while log_terminal.get_binding_state() is yogi.BindingState.RELEASED: pass with AsyncCall() as wrap: def fn(res, msg): self.assertEqual(yogi.Success(), res) self.assertEqual('Hello', msg.value.first) info = json.loads(msg.value.second) self.assertEqual('App', info['component']) self.assertEqual('FATAL', info['severity']) self.assertGreater(info['thread'], 0) log_terminal.async_receive_message(wrap(fn)) yogi.log_fatal('Hello') # check changing verbosity levels at runtime logger = yogi.Logger('My Component') max_verbosity_terminal = yogi.CachedSlaveTerminal( '/Process/YOGI Log Verbosity/Max Verbosity', yogi_00004004_pb2, leaf=leaf) while max_verbosity_terminal.get_binding_state( ) is yogi.BindingState.RELEASED: pass while max_verbosity_terminal.get_subscription_state( ) is yogi.SubscriptionState.UNSUBSCRIBED: pass self.change_verbosity(max_verbosity_terminal, yogi.Verbosity.INFO) verbosity_terminal = yogi.CachedSlaveTerminal( '/Process/YOGI Log Verbosity/Components/My Component', yogi_00004004_pb2, leaf=leaf) while verbosity_terminal.get_binding_state( ) is yogi.BindingState.RELEASED: pass while verbosity_terminal.get_subscription_state( ) is yogi.SubscriptionState.UNSUBSCRIBED: pass self.change_verbosity(verbosity_terminal, yogi.Verbosity.DEBUG) # check that new verbosity levels are being applied with AsyncCall() as wrap: def fn(res, msg): self.assertEqual(yogi.Success(), res) self.assertEqual('Go', msg.value.first) log_terminal.async_receive_message(wrap(fn)) logger.log_info('Go') self.change_verbosity(verbosity_terminal, yogi.Verbosity.WARNING) with AsyncCall() as wrap: def fn(res, msg): self.assertEqual(yogi.Success(), res) self.assertEqual('Vegan', msg.value.first) log_terminal.async_receive_message(wrap(fn)) logger.log_info('Welcome') logger.log_warning('Vegan') self.change_verbosity(max_verbosity_terminal, yogi.Verbosity.ERROR) with AsyncCall() as wrap: def fn(res, msg): self.assertEqual(yogi.Success(), res) self.assertEqual('Mate', msg.value.first) log_terminal.async_receive_message(wrap(fn)) logger.log_warning('Dude') logger.log_error('Mate') # clean up connection.destroy() verbosity_terminal.destroy() max_verbosity_terminal.destroy() log_terminal.destroy() leaf.destroy() scheduler.destroy() pi.destroy()
def test_ComponentLogger(self): logger = yogi.Logger('My Component') logger.log_info('Hey dude ', 123, '!') logger.log(yogi.Verbosity.INFO, 'Hello', ' you')
def test_logger_verbosity(self): logger = yogi.Logger("My logger") self.assertEqual(logger.verbosity, yogi.Verbosity.INFO) logger.verbosity = yogi.Verbosity.FATAL self.assertEqual(logger.verbosity, yogi.Verbosity.FATAL)