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.
154 lines
4.1 KiB
Python
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
|