예제 #1
0
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')
예제 #2
0
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
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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()
예제 #6
0
 def test_ComponentLogger(self):
     logger = yogi.Logger('My Component')
     logger.log_info('Hey dude ', 123, '!')
     logger.log(yogi.Verbosity.INFO, 'Hello', ' you')
예제 #7
0
 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)