kiwi-el8/test/unit/logger_test.py
Marcus Schäfer e71be6ac5a
Provider better error message in prepare phase
In case of an error the real valuable information is often
somewhere in the package manager output that does not get
exposed to the users console by default. The error message
we provide should tell users how they can get further details
such that they know how to find the real cause of the problem.
This patch enhances the error message in that regard.
2019-06-14 15:48:54 +02:00

154 lines
4.1 KiB
Python

from mock import patch
from mock import call
from collections import namedtuple
from .test_helper import raises
import logging
from kiwi.logger import (
LoggerSchedulerFilter,
ColorFormatter,
InfoFilter,
DebugFilter,
ErrorFilter,
WarningFilter,
log
)
from kiwi.exceptions import KiwiLogFileSetupFailed
class TestLoggerSchedulerFilter(object):
def setup(self):
self.scheduler_filter = LoggerSchedulerFilter()
def test_filter(self):
MyRecord = namedtuple(
'MyRecord',
'name'
)
ignorables = [
'apscheduler.scheduler',
'apscheduler.executors.default'
]
for ignorable in ignorables:
record = MyRecord(name=ignorable)
assert self.scheduler_filter.filter(record) is False
class TestColorFormatter(object):
def setup(self):
self.color_formatter = ColorFormatter('%(levelname)s: %(message)s')
@patch('logging.Formatter.format')
def test_format(self, mock_format):
MyRecord = namedtuple(
'MyRecord',
'levelname'
)
record = MyRecord(levelname='INFO')
mock_format.return_value = 'message'
self.color_formatter.format(record)
assert 'message' in self.color_formatter.format(record)
class TestInfoFilter(object):
def setup(self):
self.info_filter = InfoFilter()
def test_filter(self):
MyRecord = namedtuple(
'MyRecord',
'levelno'
)
record = MyRecord(levelno=logging.INFO)
assert self.info_filter.filter(record) is True
class TestDebugFilter(object):
def setup(self):
self.debug_filter = DebugFilter()
def test_filter(self):
MyRecord = namedtuple(
'MyRecord',
'levelno'
)
record = MyRecord(levelno=logging.DEBUG)
assert self.debug_filter.filter(record) is True
class TestErrorFilter(object):
def setup(self):
self.error_filter = ErrorFilter()
def test_filter(self):
MyRecord = namedtuple(
'MyRecord',
'levelno'
)
record = MyRecord(levelno=logging.ERROR)
assert self.error_filter.filter(record) is True
class TestWarningFilter(object):
def setup(self):
self.error_filter = WarningFilter()
def test_filter(self):
MyRecord = namedtuple(
'MyRecord',
'levelno'
)
record = MyRecord(levelno=logging.WARNING)
assert self.error_filter.filter(record) is True
class TestLogger(object):
@patch('sys.stdout')
def test_progress(self, mock_stdout):
log.progress(50, 100, 'foo')
mock_stdout.write.assert_called_once_with(
'\rfoo: [#################### ] 50%'
)
mock_stdout.flush.assert_called_once_with()
def test_progress_raise(self):
assert log.progress(50, 0, 'foo') is None
@patch('logging.FileHandler')
def test_set_logfile(self, mock_file_handler):
log.set_logfile('logfile')
mock_file_handler.assert_called_once_with(
filename='logfile', encoding='utf-8'
)
assert log.get_logfile() == 'logfile'
@patch('kiwi.logger.ColorFormatter')
def test_set_color_format(self, mock_color_format):
log.set_color_format()
assert sorted(mock_color_format.call_args_list) == [
call(
'$COLOR[ %(levelname)-8s]: %(asctime)-8s | %(message)s',
'%H:%M:%S'
),
call(
'$COLOR[ %(levelname)-8s]: %(asctime)-8s | %(message)s',
'%H:%M:%S'
),
call(
'$LIGHTCOLOR[ %(levelname)-8s]: %(asctime)-8s | %(message)s',
'%H:%M:%S'
)
]
@raises(KiwiLogFileSetupFailed)
@patch('logging.FileHandler')
def test_set_logfile_raise(self, mock_file_handler):
mock_file_handler.side_effect = KiwiLogFileSetupFailed
log.set_logfile('logfile')
def test_getLogLevel(self):
log.setLogLevel(42)
assert log.getLogLevel() == 42