#!/usr/bin/python # Authors: # Petr Viktorin # Jason Gerard DeRose # # Copyright (C) 2008-2013 Red Hat # see file 'COPYING' for use and warranty information # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """Nose wrapper for running an installed (not in-tree) IPA test suite Any command-line arguments are passed directly to Nose. 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 cmd = [ sys.argv[0], '--with-doctest', '--doctest-tests', '--with-ordered-tests', '--exclude=plugins', '--nologcapture', '--logging-filter=-paramiko', '--where', os.path.dirname(ipatests.__file__), ] 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': 'debug', 'name': 'console', 'stream': sys.stderr}]}, configure_state='tests') nose.main(argv=cmd, addplugins=[BeakerLibPlugin(), OrderTests()])