URL: https://github.com/freeipa/freeipa/pull/366
Author: tiran
 Title: #366: Use pytest conftest.py 
Action: synchronized

To pull the PR as Git branch:
git remote add ghfreeipa https://github.com/freeipa/freeipa
git fetch ghfreeipa pull/366/head:pr366
git checkout pr366
From 45011a60f63d5471ccf85cf7549362dd7ad3cb23 Mon Sep 17 00:00:00 2001
From: Christian Heimes <chei...@redhat.com>
Date: Tue, 3 Jan 2017 18:04:53 +0100
Subject: [PATCH] Use pytest conftest.py

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.
---
 ipalib/__init__.py     |  7 ------
 ipatests/conftest.py   | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++
 ipatests/ipa-run-tests |  3 ---
 ipatests/pytest.ini    | 10 ---------
 make-test              |  2 +-
 5 files changed, 60 insertions(+), 21 deletions(-)
 create mode 100644 ipatests/conftest.py

diff --git a/ipalib/__init__.py b/ipalib/__init__.py
index 4a61ace..5a11f86 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 0000000..99aaab4
--- /dev/null
+++ b/ipatests/conftest.py
@@ -0,0 +1,59 @@
+#
+# 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):
+    for marker in MARKERS:
+        config.addinivalue_line('markers', marker)
+    for norecursedir in NO_RECURSE_DIRS:
+        config.addinivalue_line('norecursedirs', norecursedir)
+
+
+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 53fa7b3..8df477d 100755
--- a/ipatests/ipa-run-tests
+++ b/ipatests/ipa-run-tests
@@ -34,9 +34,6 @@ 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')
 
diff --git a/ipatests/pytest.ini b/ipatests/pytest.ini
index c14eb5d..deb8688 100644
--- a/ipatests/pytest.ini
+++ b/ipatests/pytest.ini
@@ -8,16 +8,6 @@
 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/make-test b/make-test
index 76e3dde..93323a1 100755
--- a/make-test
+++ b/make-test
@@ -1,4 +1,4 @@
 #! /bin/bash
 
 set -ex
-IPA_UNIT_TEST_MODE=cli_test PYTHONPATH=.:$PYTHONPATH py.test "$@"
+PYTHONPATH=.:$PYTHONPATH py.test "$@"
-- 
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code

Reply via email to