Show logs in failed tests

Output from IPA's log manager is not captured by Nose's logcapture plugin.
Forward IPA logs to a regular Python logger so that they are shown
on failures.
IPA log messages are also shown on standard error.

Filter out Paramiko logs by default; these are too verbose.

Part of the work for: https://fedorahosted.org/freeipa/ticket/3621
This commit is contained in:
Petr Viktorin 2013-06-05 13:06:33 +02:00
parent 5365e1b81b
commit 9cbd232718
2 changed files with 31 additions and 0 deletions

View File

@ -88,6 +88,10 @@ class BeakerLibPlugin(Plugin):
self.setup_log_handler(BeakerLibLogHandler(self.run_beakerlib_command))
def setup_log_handler(self, handler):
# Remove the console handler (BeakerLib will print to stderr)
if 'console' in log_mgr.handlers:
log_mgr.remove_handler('console')
# Configure our logger
log_mgr.configure(
{
'default_level': 'DEBUG',

View File

@ -29,9 +29,11 @@ Note that any relative paths given will be based on the ipatests module's path
import sys
import os
from os import path
import logging
import nose
from ipapython.ipa_log_manager import log_mgr
import ipatests
from ipatests.beakerlib_plugin import BeakerLibPlugin
from ipatests.order_plugin import OrderTests
@ -43,6 +45,7 @@ cmd = [
'--doctest-tests',
'--with-ordered-tests',
'--exclude=plugins',
'--logging-filter=-paramiko',
'--where', os.path.dirname(ipatests.__file__),
]
cmd += sys.argv[1:]
@ -51,4 +54,28 @@ cmd += sys.argv[1:]
# This must be set so ipalib.api gets initialized property for tests:
os.environ['IPA_UNIT_TEST_MODE'] = 'cli_test'
# Forward IPA logging to a normal Python logger. Nose's logcapture plugin
# can't work with IPA-managed loggers
class LogHandler(logging.Handler):
name = 'forwarding log handler'
logger = logging.getLogger('IPA')
def emit(self, record):
self.logger.log(record.levelno, self.format(record))
if 'console' in log_mgr.handlers:
log_mgr.remove_handler('console')
log_mgr.configure(
{
'default_level': 'DEBUG',
'handlers': [{'log_handler': LogHandler(),
'format': '[%(name)s] %(message)s',
'level': 'debug'},
{'level': 'info',
'name': 'console',
'stream': sys.stderr}]},
configure_state='tests')
nose.main(argv=cmd, addplugins=[BeakerLibPlugin(), OrderTests()])