Esempio n. 1
0
 def test_handler_creates_pipe_from_args(self, MockWorker):
     buffer_capacity = 9
     flush_interval = 1
     handler = LogtailHandler(source_token=self.source_token,
                              buffer_capacity=buffer_capacity,
                              flush_interval=flush_interval)
     self.assertEqual(handler.pipe._maxsize, buffer_capacity)
Esempio n. 2
0
    def test_emit_does_not_drop_records_if_configured(self, MockWorker):
        buffer_capacity = 1
        handler = LogtailHandler(source_token=self.source_token,
                                 buffer_capacity=buffer_capacity,
                                 drop_extra_events=False)

        def consumer(q):
            while True:
                if q.full():
                    while not q.empty():
                        _ = q.get(block=True)
                time.sleep(.2)

        t = threading.Thread(target=consumer, args=(handler.pipe, ))
        t.daemon = True

        logger = logging.getLogger(__name__)
        logger.handlers = []
        logger.addHandler(handler)
        logger.critical('hello')

        self.assertTrue(handler.pipe.full())
        t.start()
        logger.critical('goodbye')
        logger.critical('goodbye2')

        self.assertEqual(handler.dropcount, 0)
Esempio n. 3
0
    def test_create_frame_with_extra(self):
        handler = LogtailHandler(source_token="some-source-token")

        log_record = logging.LogRecord("logtail-test", 20, "/some/path", 10,
                                       "Some log message", [], None)
        extra = {
            'non_dict_key': 'string_value',
            'dict_key': {
                'name': 'Test Test'
            }
        }
        log_record.__dict__.update(
            extra)  # This is how `extra` gets included in the LogRecord

        # By default, non-dict keys are excluded.
        frame = create_frame(log_record, log_record.getMessage(),
                             LogtailContext())
        self.assertTrue(frame['level'] == 'info')
        self.assertIn('dict_key', frame)
        self.assertNotIn('non_dict_key', frame)

        frame = create_frame(log_record,
                             log_record.getMessage(),
                             LogtailContext(),
                             include_extra_attributes=True)
        self.assertIn('non_dict_key', frame)
Esempio n. 4
0
 def test_create_frame_happy_path(self):
     handler = LogtailHandler(source_token="some-source-token")
     log_record = logging.LogRecord("logtail-test", 20, "/some/path", 10,
                                    "Some log message", [], None)
     frame = create_frame(log_record, log_record.getMessage(),
                          LogtailContext())
     self.assertTrue(frame['level'] == 'info')
Esempio n. 5
0
    def test_error_suppression(self, MockWorker):
        buffer_capacity = 1
        handler = LogtailHandler(source_token=self.source_token,
                                 buffer_capacity=buffer_capacity,
                                 raise_exceptions=True)

        handler.pipe = mock.MagicMock(put=mock.Mock(side_effect=ValueError))

        logger = logging.getLogger(__name__)
        logger.handlers = []
        logger.addHandler(handler)

        with self.assertRaises(ValueError):
            logger.critical('hello')

        handler.raise_exceptions = False
        logger.critical('hello')
Esempio n. 6
0
 def test_handler_creates_and_starts_worker_from_args(self, MockWorker):
     buffer_capacity = 9
     flush_interval = 9
     handler = LogtailHandler(source_token=self.source_token,
                              buffer_capacity=buffer_capacity,
                              flush_interval=flush_interval)
     MockWorker.assert_called_with(handler.uploader, handler.pipe,
                                   buffer_capacity, flush_interval)
     self.assertTrue(handler.flush_thread.start.called)
Esempio n. 7
0
    def test_emit_starts_thread_if_not_alive(self, MockWorker):
        handler = LogtailHandler(source_token=self.source_token)
        self.assertTrue(handler.flush_thread.start.call_count, 1)
        handler.flush_thread.is_alive = mock.Mock(return_value=False)

        logger = logging.getLogger(__name__)
        logger.handlers = []
        logger.addHandler(handler)
        logger.critical('hello')

        self.assertEqual(handler.flush_thread.start.call_count, 2)
Esempio n. 8
0
    def test_emit_drops_records_if_configured(self, MockWorker):
        buffer_capacity = 1
        handler = LogtailHandler(source_token=self.source_token,
                                 buffer_capacity=buffer_capacity,
                                 drop_extra_events=True)

        logger = logging.getLogger(__name__)
        logger.handlers = []
        logger.addHandler(handler)
        logger.critical('hello')
        logger.critical('goodbye')

        log_entry = handler.pipe.get()
        self.assertEqual(log_entry['message'], 'hello')
        self.assertTrue(handler.pipe.empty())
        self.assertEqual(handler.dropcount, 1)
Esempio n. 9
0
 def test_handler_creates_uploader_from_args(self, MockWorker):
     handler = LogtailHandler(source_token=self.source_token,
                              host=self.host)
     self.assertEqual(handler.uploader.source_token, self.source_token)
     self.assertEqual(handler.uploader.host, self.host)