104 lines
3.1 KiB
Python
104 lines
3.1 KiB
Python
Tests for Logger
|
|
|
|
import logging
|
|
import json
|
|
import pytest
|
|
from unittest.mock import patch, Mock
|
|
from io import StringIO
|
|
|
|
from oss.logger.logger import Logger
|
|
|
|
|
|
class TestLogger:
|
|
return Logger("test")
|
|
|
|
def test_logger_initialization(self):
|
|
logger = Logger("test")
|
|
|
|
with patch.object(logger.logger, 'info') as mock_info:
|
|
logger.info("Test message")
|
|
|
|
mock_info.assert_called_once_with("Test message")
|
|
|
|
def test_logger_warn(self):
|
|
logger = Logger("test")
|
|
|
|
with patch.object(logger.logger, 'error') as mock_error:
|
|
logger.error("Test error")
|
|
|
|
mock_error.assert_called_once_with("Test error")
|
|
|
|
def test_logger_debug(self):
|
|
logger = Logger("test")
|
|
|
|
with patch.object(logger.logger, 'info') as mock_info:
|
|
logger.info("Test message", "TAG")
|
|
|
|
mock_info.assert_called_once_with("[TAG] Test message")
|
|
|
|
def test_logger_warn_with_tag(self):
|
|
logger = Logger("test")
|
|
|
|
with patch.object(logger.logger, 'error') as mock_error:
|
|
logger.error("Test error", "TAG")
|
|
|
|
mock_error.assert_called_once_with("[TAG] Test error")
|
|
|
|
def test_logger_debug_with_tag(self):
|
|
logger = Logger("test")
|
|
|
|
format_str = logger._get_log_format()
|
|
|
|
assert "%(asctime)s" in format_str
|
|
assert "%(name)s" in format_str
|
|
assert "%(levelname)s" in format_str
|
|
assert "%(message)s" in format_str
|
|
|
|
def test_get_log_format_json(self):
|
|
os.environ["LOG_FORMAT"] = "json"
|
|
|
|
try:
|
|
logger = Logger("test")
|
|
format_str = logger._get_log_format()
|
|
|
|
assert "%(asctime)s" in format_str
|
|
assert "%(name)s" in format_str
|
|
assert "%(levelname)s" in format_str
|
|
assert "%(message)s" in format_str
|
|
finally:
|
|
if "LOG_FORMAT" in os.environ:
|
|
del os.environ["LOG_FORMAT"]
|
|
|
|
def test_logger_json_format(self):
|
|
|
|
def test_logger_output(self):
|
|
log_capture = StringIO()
|
|
|
|
logger = logging.getLogger("test_json")
|
|
logger.setLevel(logging.INFO)
|
|
|
|
handler = logging.StreamHandler(log_capture)
|
|
formatter = logging.Formatter(
|
|
'{"time": "%(asctime)s", "name": "%(name)s", "level": "%(levelname)s", "message": "%(message)s"}'
|
|
)
|
|
handler.setFormatter(formatter)
|
|
logger.addHandler(handler)
|
|
|
|
logger.info("Test JSON message")
|
|
|
|
log_output = log_capture.getvalue().strip()
|
|
assert log_output.startswith("{")
|
|
assert log_output.endswith("}")
|
|
assert "test_json" in log_output
|
|
assert "INFO" in log_output
|
|
assert "Test JSON message" in log_output
|
|
|
|
try:
|
|
import json
|
|
json.loads(log_output)
|
|
except json.JSONDecodeError:
|
|
pytest.fail("Log output is not valid JSON")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
pytest.main([__file__, '-v']) |