12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # vim: set fileencoding=utf-8 :
- import re
- from six import StringIO
- from nose.tools import ok_
- import gbp.log
- class GbpLogTester(object):
- """
- Helper class for tests that need to capture logging output
- """
- def __init__(self):
- """Object initialization"""
- self._log = None
- self._loghandler = None
- def _capture_log(self, capture=True):
- """ Capture log"""
- if capture:
- assert self._log is None, "Log capture already started"
- 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)
- gbp.log.LOGGER.addHandler(self._loghandler)
- 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
- def _get_log(self):
- """Get the captured log output"""
- self._log.seek(0)
- return self._log.readlines()
- def _check_log_empty(self):
- """Check that nothig was logged"""
- output = self._get_log()
- ok_(output == [], "Log is not empty: %s" % output)
- def _check_log(self, linenum, regex):
- """Check that the specified line on log matches expectations"""
- if self._log is None:
- raise Exception("BUG in unittests: no log captured!")
- output = self._get_log()[linenum].strip()
- ok_(re.match(regex, output),
- "Log entry '%s' doesn't match '%s'" % (output, regex))
- def _clear_log(self):
- """Clear the mock strerr"""
- if self._log is not None:
- self._log.seek(0)
- self._log.truncate()
|