summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <cheimes@redhat.com>2017-01-03 18:04:53 +0100
committerMartin Basti <mbasti@redhat.com>2017-01-05 17:37:02 +0100
commit1e06a5195bafe0224d77371987f2509f5508ca2f (patch)
tree2549212ed9b99ab0480fa6be5ecd31b4a3101a2f
parent3387734e6c6d47a756b5e914e7e515d2610a424f (diff)
downloadfreeipa-1e06a5195bafe0224d77371987f2509f5508ca2f.tar.gz
freeipa-1e06a5195bafe0224d77371987f2509f5508ca2f.tar.xz
freeipa-1e06a5195bafe0224d77371987f2509f5508ca2f.zip
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>
-rw-r--r--Makefile.am3
-rw-r--r--ipalib/__init__.py7
-rw-r--r--ipatests/conftest.py76
-rwxr-xr-xipatests/ipa-run-tests13
-rw-r--r--ipatests/pytest.ini23
-rw-r--r--ipatests/setup.py1
-rwxr-xr-xmake-test8
l---------pytest.ini1
8 files changed, 90 insertions, 42 deletions
diff --git a/Makefile.am b/Makefile.am
index 73bd37899..9bfc899fe 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -37,8 +37,7 @@ EXTRA_DIST = .mailmap \
doc \
freeipa.spec.in \
ipasetup.py.in \
- pylintrc \
- pytest.ini
+ pylintrc
clean-local:
rm -rf "$(RPMBUILD)"
diff --git a/ipalib/__init__.py b/ipalib/__init__.py
index aaca97363..4f0909047 100644
--- a/ipalib/__init__.py
+++ b/ipalib/__init__.py
@@ -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()
diff --git a/ipatests/conftest.py b/ipatests/conftest.py
new file mode 100644
index 000000000..45920de6d
--- /dev/null
+++ b/ipatests/conftest.py
@@ -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()
diff --git a/ipatests/ipa-run-tests b/ipatests/ipa-run-tests
index 53fa7b321..cafd993fd 100755
--- a/ipatests/ipa-run-tests
+++ b/ipatests/ipa-run-tests
@@ -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__))
+
+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(sys.argv[1:]))
+sys.exit(pytest.main(args))
diff --git a/ipatests/pytest.ini b/ipatests/pytest.ini
deleted file mode 100644
index c14eb5d39..000000000
--- a/ipatests/pytest.ini
+++ /dev/null
@@ -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
diff --git a/ipatests/setup.py b/ipatests/setup.py
index 2b592cd95..1fb5e922f 100644
--- a/ipatests/setup.py
+++ b/ipatests/setup.py
@@ -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/*'],
diff --git a/make-test b/make-test
index 76e3dde6a..b38b42e4d 100755
--- a/make-test
+++ b/make-test
@@ -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" "$@"
diff --git a/pytest.ini b/pytest.ini
deleted file mode 120000
index e87991b0f..000000000
--- a/pytest.ini
+++ /dev/null
@@ -1 +0,0 @@
-ipatests/pytest.ini \ No newline at end of file