Skip to content

Commit

Permalink
log message format test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
korowa committed May 13, 2024
1 parent 3666f5d commit f94628d
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 4 deletions.
22 changes: 22 additions & 0 deletions tests/test_blocks.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import re
import types
from unittest.mock import patch

Expand Down Expand Up @@ -245,3 +246,24 @@ def test_logs_with_compression(self):
query = 'SELECT 1'
client.execute(query, settings=settings)
self.assertIn(query, buffer.getvalue())

def test_logs_message_format(self):
log_regex_source = (
r'^\[ .+? \] ' # hostname
r'[\d-]{10} [\d:]{8}\.\d{6} ' # timestamp
r'\[ \d+? \] ' # thread_id
r'\{[\w-]{36}\} ' # query_id
r'<[a-z]+?> ' # priority
r'\w+?:' # source
)
log_regex = re.compile(log_regex_source, re.I)

with capture_logging(
'clickhouse_driver.log', 'INFO', as_queue=True
) as queue:
settings = {'send_logs_level': 'debug'}
query = 'SELECT 1'
self.client.execute(query, settings=settings)
while not queue.empty():
record = queue.get()
self.assertRegex(record.message, log_regex)
15 changes: 11 additions & 4 deletions tests/util.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import logging.handlers
import os
from contextlib import contextmanager
from functools import wraps
import logging
from io import StringIO
from queue import SimpleQueue
from time import tzset
from unittest.mock import patch

Expand Down Expand Up @@ -36,21 +38,26 @@ def wrapper(*args, **kwargs):


class LoggingCapturer(object):
def __init__(self, logger_name, level):
def __init__(self, logger_name, level, as_queue=False):
self.old_stdout_handlers = []
self.logger = logging.getLogger(logger_name)
self.level = level
self.as_queue = as_queue
super(LoggingCapturer, self).__init__()

def __enter__(self):
buffer = StringIO()
if self.as_queue:
store = SimpleQueue()
self.new_handler = logging.handlers.QueueHandler(store)
else:
store = StringIO()
self.new_handler = logging.StreamHandler(store)

self.new_handler = logging.StreamHandler(buffer)
self.logger.addHandler(self.new_handler)
self.old_logger_level = self.logger.level
self.logger.setLevel(self.level)

return buffer
return store

def __exit__(self, *exc_info):
self.logger.setLevel(self.old_logger_level)
Expand Down

0 comments on commit f94628d

Please sign in to comment.