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:
1 parent
3387734e6c
commit
1e06a5195b
8 files changed
+90
-42
No files matched your search
+1
-2
@@ -37,8 +37,7 @@ EXTRA_DIST = .mailmap \
|
|||||||
doc \
|
doc \
|
||||||
freeipa.spec.in \
|
freeipa.spec.in \
|
||||||
ipasetup.py.in \
|
ipasetup.py.in \
|
||||||
pylintrc \
|
pylintrc
|
||||||
pytest.ini
|
|
||||||
|
|
||||||
clean-local:
|
clean-local:
|
||||||
rm -rf "$(RPMBUILD)"
|
rm -rf "$(RPMBUILD)"
|
||||||
|
|||||||
@@ -949,10 +949,3 @@ def create_api(mode='dummy'):
|
|||||||
return api
|
return api
|
||||||
|
|
||||||
api = create_api(mode=None)
|
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()
|
|
||||||
@@ -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
|
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:
|
# 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.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'],
|
scripts=['ipa-run-tests', 'ipa-test-config', 'ipa-test-task'],
|
||||||
package_data={
|
package_data={
|
||||||
'ipatests': ['pytest.ini'],
|
|
||||||
'ipatests.test_install': ['*.update'],
|
'ipatests.test_install': ['*.update'],
|
||||||
'ipatests.test_integration': ['scripts/*'],
|
'ipatests.test_integration': ['scripts/*'],
|
||||||
'ipatests.test_ipalib': ['data/*'],
|
'ipatests.test_ipalib': ['data/*'],
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#! /bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -ex
|
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
|
|
||||||
Reference in new issue
Block a user