diff options
-rw-r--r-- | ipatests/conftest.py | 34 | ||||
-rw-r--r-- | ipatests/pytest_plugins/integration.py | 8 | ||||
-rw-r--r-- | ipatests/setup.py | 1 | ||||
-rw-r--r-- | ipatests/test_cmdline/__init__.py | 6 | ||||
-rw-r--r-- | ipatests/test_install/__init__.py | 5 | ||||
-rw-r--r-- | ipatests/test_integration/__init__.py | 5 | ||||
-rw-r--r-- | ipatests/test_ipalib/test_rpc.py | 2 | ||||
-rw-r--r-- | ipatests/test_ipaserver/__init__.py | 6 | ||||
-rw-r--r-- | ipatests/test_ipaserver/test_install/__init__.py | 0 | ||||
-rwxr-xr-x | ipatests/test_ipaserver/test_install/test_adtrustinstance.py | 8 | ||||
-rw-r--r-- | ipatests/test_webui/__init__.py | 5 | ||||
-rw-r--r-- | ipatests/test_xmlrpc/__init__.py | 5 | ||||
-rw-r--r-- | ipatests/util.py | 17 | ||||
-rw-r--r-- | pylint_plugins.py | 16 |
14 files changed, 103 insertions, 15 deletions
diff --git a/ipatests/conftest.py b/ipatests/conftest.py index 511d7b77e..61e889d71 100644 --- a/ipatests/conftest.py +++ b/ipatests/conftest.py @@ -7,13 +7,21 @@ import os import pprint import sys +import pytest + from ipalib import api from ipalib.cli import cli_plugins + +try: + import ipaplatform # pylint: disable=unused-import +except ImportError: + ipaplatform = None try: import ipaserver except ImportError: ipaserver = None +HERE = os.path.dirname(os.path.abspath(__file__)) pytest_plugins = [ 'ipatests.pytest_plugins.additional_config', @@ -31,6 +39,7 @@ MARKERS = [ 'tier1: functional API tests', 'cs_acceptance: Acceptance test suite for Dogtag Certificate Server', 'ds_acceptance: Acceptance test suite for 389 Directory Server', + 'skip_ipaclient_unittest: Skip in ipaclient unittest mode', ] @@ -46,6 +55,7 @@ NO_RECURSE_DIRS = [ 'install/share' ] + INIVALUES = { 'python_classes': ['test_', 'Test'], 'python_files': ['test_*.py'], @@ -75,13 +85,27 @@ def pytest_configure(config): config.option.doctestmodules = True +def pytest_addoption(parser): + group = parser.getgroup("IPA integration tests") + group.addoption( + '--ipaclient-unittests', + help='Run ipaclient unit tests only (no RPC and ipaserver)', + action='store_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() + + # XXX workaround until https://fedorahosted.org/freeipa/ticket/6408 has + # been resolved. + if ipaserver is not None: + api.finalize() + if config.option.verbose: print('api.env: ') pprint.pprint({k: api.env[k] for k in api.env}) @@ -89,3 +113,11 @@ def pytest_cmdline_main(config): print("euid: {}, egid: {}".format(os.geteuid(), os.getegid())) print("working dir: {}".format(os.path.abspath(os.getcwd()))) print('sys.version: {}'.format(sys.version)) + + +def pytest_runtest_setup(item): + if isinstance(item, item.Function): + if item.get_marker('skip_ipaclient_unittest'): + # pylint: disable=no-member + if pytest.config.option.ipaclient_unittests: + pytest.skip("Skip in ipaclient unittest mode") diff --git a/ipatests/pytest_plugins/integration.py b/ipatests/pytest_plugins/integration.py index de37bf3c8..ae94dbcb1 100644 --- a/ipatests/pytest_plugins/integration.py +++ b/ipatests/pytest_plugins/integration.py @@ -30,9 +30,6 @@ from pytest_multihost import make_multihost_fixture from ipapython import ipautil from ipapython.ipa_log_manager import log_mgr -from ipatests.test_integration import tasks -from ipatests.test_integration.config import Config -from ipatests.test_integration.env_config import get_global_config log = log_mgr.get_logger(__name__) @@ -155,6 +152,11 @@ def integration_logs(class_integration_logs, request): def mh(request, class_integration_logs): """IPA's multihost fixture object """ + # TODO: cleanup modules + from ipatests.test_integration import tasks + from ipatests.test_integration.config import Config + from ipatests.test_integration.env_config import get_global_config + cls = request.cls domain_description = { diff --git a/ipatests/setup.py b/ipatests/setup.py index 46d51ff1c..337b7d633 100644 --- a/ipatests/setup.py +++ b/ipatests/setup.py @@ -64,7 +64,6 @@ if __name__ == '__main__': "gssapi", "ipaclient", "ipalib", - "ipaplatform", "ipapython", "nose", "polib", diff --git a/ipatests/test_cmdline/__init__.py b/ipatests/test_cmdline/__init__.py index 9da42e7b4..af8867e5a 100644 --- a/ipatests/test_cmdline/__init__.py +++ b/ipatests/test_cmdline/__init__.py @@ -1,3 +1,9 @@ # # Copyright (C) 2015 FreeIPA Contributors see COPYING for license # + +import pytest + + +if pytest.config.getoption('ipaclient_unittests', False): + pytest.skip("Skip in ipaclient unittest mode") diff --git a/ipatests/test_install/__init__.py b/ipatests/test_install/__init__.py index 0ca31f1e3..54ef9eb7b 100644 --- a/ipatests/test_install/__init__.py +++ b/ipatests/test_install/__init__.py @@ -20,3 +20,8 @@ """ Package containing LDAP updates unit tests. """ +import pytest + + +if pytest.config.getoption('ipaclient_unittests', False): + pytest.skip("Skip in ipaclient unittest mode") diff --git a/ipatests/test_integration/__init__.py b/ipatests/test_integration/__init__.py index b63d650a9..8779f2f7c 100644 --- a/ipatests/test_integration/__init__.py +++ b/ipatests/test_integration/__init__.py @@ -16,3 +16,8 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +import pytest + + +if pytest.config.getoption('ipaclient_unittests', False): + pytest.skip("Skip in ipaclient unittest mode") diff --git a/ipatests/test_ipalib/test_rpc.py b/ipatests/test_ipalib/test_rpc.py index 80cf2e78d..7fe058092 100644 --- a/ipatests/test_ipalib/test_rpc.py +++ b/ipatests/test_ipalib/test_rpc.py @@ -23,6 +23,7 @@ Test the `ipalib.rpc` module. from __future__ import print_function import nose +import pytest import six # pylint: disable=import-error from six.moves.xmlrpc_client import Binary, Fault, dumps, loads @@ -256,6 +257,7 @@ class test_xmlclient(PluginTester): assert context.xmlclient.conn._calledall() is True +@pytest.mark.skip_ipaclient_unittest class test_xml_introspection(object): @classmethod def setup_class(cls): diff --git a/ipatests/test_ipaserver/__init__.py b/ipatests/test_ipaserver/__init__.py index 2192cc291..76942c76e 100644 --- a/ipatests/test_ipaserver/__init__.py +++ b/ipatests/test_ipaserver/__init__.py @@ -20,3 +20,9 @@ """ Sub-package containing unit tests for `ipaserver` package. """ + +import pytest + + +if pytest.config.getoption('ipaclient_unittests', False): + pytest.skip("Skip in ipaclient unittest mode") diff --git a/ipatests/test_ipaserver/test_install/__init__.py b/ipatests/test_ipaserver/test_install/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/ipatests/test_ipaserver/test_install/__init__.py diff --git a/ipatests/test_ipaserver/test_install/test_adtrustinstance.py b/ipatests/test_ipaserver/test_install/test_adtrustinstance.py index 6a050c80e..86596c5ad 100755 --- a/ipatests/test_ipaserver/test_install/test_adtrustinstance.py +++ b/ipatests/test_ipaserver/test_install/test_adtrustinstance.py @@ -19,12 +19,8 @@ """ Test `adtrustinstance` """ - -import os - -import six -import nose import pytest +import six from ipaserver.install import adtrustinstance @@ -33,7 +29,7 @@ if six.PY3: @pytest.mark.tier0 -class test_adtrustinstance: +class test_adtrustinstance(object): """ Test `adtrustinstance`. """ diff --git a/ipatests/test_webui/__init__.py b/ipatests/test_webui/__init__.py index 56d10d90b..cb2f361ad 100644 --- a/ipatests/test_webui/__init__.py +++ b/ipatests/test_webui/__init__.py @@ -20,3 +20,8 @@ """ Sub-package containing Web UI integration tests """ +import pytest + + +if pytest.config.getoption('ipaclient_unittests', False): + pytest.skip("Skip in ipaclient unittest mode") diff --git a/ipatests/test_xmlrpc/__init__.py b/ipatests/test_xmlrpc/__init__.py index 1a8ecf1c2..720c61b75 100644 --- a/ipatests/test_xmlrpc/__init__.py +++ b/ipatests/test_xmlrpc/__init__.py @@ -20,3 +20,8 @@ """ Sub-package containing unit tests for `xmlrpc` package. """ +import pytest + + +if pytest.config.getoption('ipaclient_unittests', False): + pytest.skip("Skip in ipaclient unittest mode") diff --git a/ipatests/util.py b/ipatests/util.py index f55ef73fa..4379c302d 100644 --- a/ipatests/util.py +++ b/ipatests/util.py @@ -39,12 +39,23 @@ import ldap.modlist import ipalib from ipalib import api -from ipalib.install.kinit import kinit_keytab, kinit_password from ipalib.plugable import Plugin from ipalib.request import context from ipapython.dn import DN from ipapython.ipautil import run -from ipaplatform.paths import paths + +try: + # not available with client-only wheel packages + from ipalib.install.kinit import kinit_keytab, kinit_password +except ImportError: + kinit_keytab = kinit_password = None + +try: + # not available with client-only wheel packages + from ipaplatform.paths import paths +except ImportError: + paths = None + if six.PY3: unicode = str @@ -336,7 +347,7 @@ def assert_deepequal(expected, got, doc='', stack=tuple()): their elements does not matter. """ try: - pretty_print = pytest.config.getoption("pretty_print") # pylint: disable=no-member + pretty_print = pytest.config.getoption("pretty_print") except (AttributeError, ValueError): pretty_print = False diff --git a/pylint_plugins.py b/pylint_plugins.py index db80efeba..472328cc4 100644 --- a/pylint_plugins.py +++ b/pylint_plugins.py @@ -7,12 +7,14 @@ from __future__ import print_function import copy import os.path import sys +import textwrap -from astroid import MANAGER +from astroid import MANAGER, register_module_extender from astroid import scoped_nodes from pylint.checkers import BaseChecker from pylint.checkers.utils import check_messages from pylint.interfaces import IAstroidChecker +from astroid.builder import AstroidBuilder def register(linter): @@ -258,6 +260,18 @@ def fix_ipa_classes(cls): MANAGER.register_transform(scoped_nodes.Class, fix_ipa_classes) +def pytest_config_transform(): + """pylint.config attribute + """ + return AstroidBuilder(MANAGER).string_build(textwrap.dedent(''' + from _pytest.config import get_config + config = get_config() + ''')) + + +register_module_extender(MANAGER, 'pytest', pytest_config_transform) + + class IPAChecker(BaseChecker): __implements__ = IAstroidChecker |