Commit 5f2120b3 authored by Guido Günther's avatar Guido Günther

gbplogtaster: capture INFO and DEBUG log levels too

This allows to test for certain features more easily and to
use it not only in the error case.

Using two different streams allows us to test that messages still
end up on stderr or stdout correctly.
parent 16a85f79
......@@ -13,34 +13,54 @@ class GbpLogTester(object):
"""
def __init__(self):
"""Object initialization"""
# Warnings and Errors
self._log = None
self._loghandler = None
# Info and Debug messages
self._log_info = None
self._loghandler_info = None
def _capture_log(self, capture=True):
""" Capture log"""
if capture:
assert self._log is None, "Log capture already started"
handlers = list(gbp.log.LOGGER.handlers)
for hdl in handlers:
gbp.log.LOGGER.removeHandler(hdl)
self._log = StringIO()
self._loghandler = gbp.log.GbpStreamHandler(self._log, False)
self._loghandler.addFilter(gbp.log.GbpFilter([gbp.log.WARNING,
gbp.log.ERROR]))
handlers = list(gbp.log.LOGGER.handlers)
for hdl in handlers:
gbp.log.LOGGER.removeHandler(hdl)
self._log_info = StringIO()
self._loghandler_info = gbp.log.GbpStreamHandler(self._log_info, False)
self._loghandler_info.addFilter(gbp.log.GbpFilter([gbp.log.DEBUG,
gbp.log.INFO]))
gbp.log.LOGGER.addHandler(self._loghandler)
gbp.log.LOGGER.addHandler(self._loghandler_info)
else:
assert self._log is not None, "Log capture not started"
gbp.log.LOGGER.removeHandler(self._loghandler)
self._loghandler.close()
self._loghandler = None
self._log.close()
self._log = None
self._loghandler = self._log = None
gbp.log.LOGGER.removeHandler(self._loghandler_info)
self._loghandler_info.close()
self._log_info.close()
self._loghandler_info = self._log_info = None
def _get_log(self):
"""Get the captured log output"""
self._log.seek(0)
return self._log.readlines()
def _get_log_info(self):
self._log_info.seek(0)
return self._log_info.readlines()
def _check_log_empty(self):
"""Check that nothig was logged"""
output = self._get_log()
......@@ -58,7 +78,7 @@ class GbpLogTester(object):
"Log entry '%s' doesn't match '%s'" % (output, regex))
def _check_in_log(self, regex):
"""Check that the at least one line on log matches expectations"""
"""Check that at least one line in log matches expectations"""
found = False
if self._log is None:
raise Exception("BUG in unittests: no log captured!")
......@@ -69,6 +89,18 @@ class GbpLogTester(object):
break
ok_(found, "No line of %s matched '%s'" % (log, regex))
def _check_in_info_log(self, regex):
"""Check that at least one line in info log matches expectations"""
found = False
if self._log_info is None:
raise Exception("BUG in unittests: no log captured!")
log = self._get_log_info()
for line in log:
if re.match(regex, line):
found = True
break
ok_(found, "No line of %s matched '%s'" % (log, regex))
def _clear_log(self):
"""Clear the mock strerr"""
if self._log is not None:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment