#!/usr/bin/python

# Authors:
#   Petr Viktorin <pviktori@redhat.com>
#   Jason Gerard DeRose <jderose@redhat.com>
#
# 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 <http://www.gnu.org/licenses/>.

"""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()])
