mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Use pytest conftest.py and drop pytest.ini
Let's replace some ugly hacks with proper pytest conftest.py hooks. Test initialization of ipalib.api is now handled in pytest_cmdline_main(). Pytest plugins, markers and ignores are also moved into conftest.py. Additional guards make it possible to run tests without ipaserver installed. I added confcutdir to ensure that pytest does not leave our project space. Pytest used pytest.ini or setup.py before but pytest.ini is gone. Signed-off-by: Christian Heimes <cheimes@redhat.com> Reviewed-By: Milan Kubik <mkubik@redhat.com>
This commit is contained in:
parent
3387734e6c
commit
1e06a5195b
@ -37,8 +37,7 @@ EXTRA_DIST = .mailmap \
|
||||
doc \
|
||||
freeipa.spec.in \
|
||||
ipasetup.py.in \
|
||||
pylintrc \
|
||||
pytest.ini
|
||||
pylintrc
|
||||
|
||||
clean-local:
|
||||
rm -rf "$(RPMBUILD)"
|
||||
|
@ -949,10 +949,3 @@ def create_api(mode='dummy'):
|
||||
return api
|
||||
|
||||
api = create_api(mode=None)
|
||||
|
||||
if os.environ.get('IPA_UNIT_TEST_MODE', None) == 'cli_test':
|
||||
from ipalib.cli import cli_plugins
|
||||
api.bootstrap(context='cli', in_server=False, in_tree=True, fallback=False)
|
||||
for klass in cli_plugins:
|
||||
api.add_plugin(klass)
|
||||
api.finalize()
|
||||
|
76
ipatests/conftest.py
Normal file
76
ipatests/conftest.py
Normal file
@ -0,0 +1,76 @@
|
||||
#
|
||||
# Copyright (C) 2016 FreeIPA Contributors see COPYING for license
|
||||
#
|
||||
from __future__ import print_function
|
||||
|
||||
from ipalib import api
|
||||
from ipalib.cli import cli_plugins
|
||||
try:
|
||||
import ipaserver
|
||||
except ImportError:
|
||||
ipaserver = None
|
||||
|
||||
|
||||
pytest_plugins = [
|
||||
'ipatests.pytest_plugins.additional_config',
|
||||
'ipatests.pytest_plugins.beakerlib',
|
||||
'ipatests.pytest_plugins.declarative',
|
||||
'ipatests.pytest_plugins.nose_compat',
|
||||
]
|
||||
# The integration plugin is not available in client-only builds.
|
||||
if ipaserver is not None:
|
||||
pytest_plugins.append('ipatests.pytest_plugins.integration')
|
||||
|
||||
|
||||
MARKERS = [
|
||||
'tier0: basic unit tests and critical functionality',
|
||||
'tier1: functional API tests',
|
||||
'cs_acceptance: Acceptance test suite for Dogtag Certificate Server',
|
||||
'ds_acceptance: Acceptance test suite for 389 Directory Server',
|
||||
]
|
||||
|
||||
|
||||
NO_RECURSE_DIRS = [
|
||||
# build directories
|
||||
'ipaclient/build',
|
||||
'ipalib/build',
|
||||
'ipaplatform/build',
|
||||
'ipapython/build',
|
||||
'ipaserver/build',
|
||||
'ipatests/build',
|
||||
# install/share/wsgi.py
|
||||
'install/share'
|
||||
]
|
||||
|
||||
|
||||
def pytest_configure(config):
|
||||
# add pytest markers
|
||||
for marker in MARKERS:
|
||||
config.addinivalue_line('markers', marker)
|
||||
|
||||
# do not recurse into build directories or install/share directory.
|
||||
for norecursedir in NO_RECURSE_DIRS:
|
||||
config.addinivalue_line('norecursedirs', norecursedir)
|
||||
|
||||
# load test classes with these prefixes.
|
||||
# addinivalue_line() adds duplicated entries.
|
||||
python_classes = config.getini('python_classes')
|
||||
for value in ['test_', 'Test']:
|
||||
if value not in python_classes:
|
||||
python_classes.append(value)
|
||||
|
||||
# set default JUnit prefix
|
||||
if config.option.junitprefix is None:
|
||||
config.option.junitprefix = 'ipa'
|
||||
|
||||
# always run doc tests
|
||||
config.option.doctestmodules = True
|
||||
|
||||
|
||||
def pytest_cmdline_main(config):
|
||||
api.bootstrap(
|
||||
context=u'cli', in_server=False, in_tree=True, fallback=False
|
||||
)
|
||||
for klass in cli_plugins:
|
||||
api.add_plugin(klass)
|
||||
api.finalize()
|
@ -34,12 +34,15 @@ import pytest
|
||||
|
||||
import ipatests
|
||||
|
||||
# This must be set so ipalib.api gets initialized property for tests:
|
||||
os.environ['IPA_UNIT_TEST_MODE'] = 'cli_test'
|
||||
|
||||
# This is set to store --with-xunit report in an accessible place:
|
||||
os.environ['IPATEST_XUNIT_PATH'] = os.path.join(os.getcwd(), 'nosetests.xml')
|
||||
|
||||
os.chdir(os.path.dirname(ipatests.__file__))
|
||||
HERE = os.path.dirname(os.path.abspath(ipatests.__file__))
|
||||
|
||||
sys.exit(pytest.main(sys.argv[1:]))
|
||||
args = sys.argv[1:]
|
||||
if not any('--confcutdir' in arg for arg in args):
|
||||
args.insert(0, '--confcutdir={}'.format(HERE))
|
||||
|
||||
os.chdir(HERE)
|
||||
|
||||
sys.exit(pytest.main(args))
|
||||
|
@ -1,23 +0,0 @@
|
||||
# pytest configuration
|
||||
|
||||
# This file lives in ipatests/pytest.ini, so it can be included by setup.py,
|
||||
# and it's symlinked from the project's root directory, so py.test finds it
|
||||
# when called with no arguments.
|
||||
|
||||
[pytest]
|
||||
python_classes = test_ Test
|
||||
addopts = --doctest-modules
|
||||
--junit-prefix ipa
|
||||
-p ipatests.pytest_plugins.nose_compat
|
||||
-p ipatests.pytest_plugins.declarative
|
||||
-p ipatests.pytest_plugins.integration
|
||||
-p ipatests.pytest_plugins.beakerlib
|
||||
-p ipatests.pytest_plugins.additional_config
|
||||
# Ignore files for doc tests.
|
||||
# TODO: ideally, these should all use __name__=='__main__' guards
|
||||
--ignore=install/share/wsgi.py
|
||||
markers =
|
||||
tier0: basic unit tests and critical functionality
|
||||
tier1: functional API tests
|
||||
cs_acceptance: Acceptance test suite for Dogtag Certificate Server
|
||||
ds_acceptance: Acceptance test suite for 389 Directory Server
|
@ -49,7 +49,6 @@ if __name__ == '__main__':
|
||||
],
|
||||
scripts=['ipa-run-tests', 'ipa-test-config', 'ipa-test-task'],
|
||||
package_data={
|
||||
'ipatests': ['pytest.ini'],
|
||||
'ipatests.test_install': ['*.update'],
|
||||
'ipatests.test_integration': ['scripts/*'],
|
||||
'ipatests.test_ipalib': ['data/*'],
|
||||
|
@ -1,4 +1,6 @@
|
||||
#! /bin/bash
|
||||
|
||||
#!/bin/bash
|
||||
set -ex
|
||||
IPA_UNIT_TEST_MODE=cli_test PYTHONPATH=.:$PYTHONPATH py.test "$@"
|
||||
|
||||
SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
PYTHONPATH=$SCRIPTDIR:$PYTHONPATH py.test --confcutdir="$SCRIPTDIR" "$@"
|
||||
|
@ -1 +0,0 @@
|
||||
ipatests/pytest.ini
|
Loading…
Reference in New Issue
Block a user