From 292d686c0b7935dd219559b10de3a393b712a990 Mon Sep 17 00:00:00 2001 From: Stanislav Levin Date: Feb 12 2020 16:08:32 +0000 Subject: pytest: Migrate xunit-style setups to Pytest fixtures Even though Pytest supports xunit style setups, unittest and nose tests, this support is limited and may be dropped in the future releases. Worst of all is that the mixing of various test frameworks results in weird conflicts and of course, is not widely tested. This is a part of work to remove the mixing of test idioms in the IPA's test suite: 1) replace xunit style 2) employ the fixtures' interdependencies Related: https://pagure.io/freeipa/issue/7989 Signed-off-by: Stanislav Levin Reviewed-By: Christian Heimes --- diff --git a/ipatests/pytest_ipa/integration/__init__.py b/ipatests/pytest_ipa/integration/__init__.py index b94b8cb..80cbd83 100644 --- a/ipatests/pytest_ipa/integration/__init__.py +++ b/ipatests/pytest_ipa/integration/__init__.py @@ -267,8 +267,11 @@ def mh(request, class_integration_logs): logger.info('Preparing host %s', host.hostname) tasks.prepare_host(host) - setup_class(cls, mh) - mh._pytestmh_request.addfinalizer(lambda: teardown_class(cls)) + add_compat_attrs(cls, mh) + + def fin(): + del_compat_attrs(cls) + mh._pytestmh_request.addfinalizer(fin) try: yield mh.install() @@ -282,7 +285,7 @@ def mh(request, class_integration_logs): collect_systemd_journal(request.node, hosts, request.config) -def setup_class(cls, mh): +def add_compat_attrs(cls, mh): """Add convenience attributes to the test class This is deprecated in favor of the mh fixture. @@ -299,7 +302,7 @@ def setup_class(cls, mh): cls.ad_treedomains = mh.ad_treedomains -def teardown_class(cls): +def del_compat_attrs(cls): """Remove convenience attributes from the test class This is deprecated in favor of the mh fixture. diff --git a/ipatests/test_cmdline/cmdline.py b/ipatests/test_cmdline/cmdline.py index ad141a0..11bde10 100644 --- a/ipatests/test_cmdline/cmdline.py +++ b/ipatests/test_cmdline/cmdline.py @@ -27,6 +27,8 @@ import distutils.spawn import os import unittest +import pytest + from ipalib import api from ipalib import errors from ipaplatform.paths import paths @@ -51,11 +53,12 @@ class cmdline_test(XMLRPC_test): # some reasonable default command command = paths.LS - @classmethod - def setup_class(cls): + @pytest.fixture(autouse=True, scope="class") + def cmdline_setup(self, request, xmlrpc_setup): # Find the executable in $PATH # This is neded because ipautil.run resets the PATH to # a system default. + cls = request.cls original_command = cls.command if not os.path.isabs(cls.command): cls.command = distutils.spawn.find_executable(cls.command) @@ -65,7 +68,6 @@ class cmdline_test(XMLRPC_test): raise AssertionError( 'Command %r not available' % original_command ) - super(cmdline_test, cls).setup_class() if not server_available: raise unittest.SkipTest( 'Server not available: %r' % api.env.xmlrpc_uri diff --git a/ipatests/test_cmdline/test_ipagetkeytab.py b/ipatests/test_cmdline/test_ipagetkeytab.py index 35932b1..280a97f 100755 --- a/ipatests/test_cmdline/test_ipagetkeytab.py +++ b/ipatests/test_cmdline/test_ipagetkeytab.py @@ -70,7 +70,7 @@ def test_host(request): @pytest.fixture(scope='class') -def test_service(request, test_host): +def test_service(request, test_host, keytab_retrieval_setup): service_tracker = service_plugin.ServiceTracker(u'srv', test_host.name) test_host.ensure_exists() return service_tracker.make_fixture(request) @@ -84,10 +84,9 @@ class KeytabRetrievalTest(cmdline_test): command = "ipa-getkeytab" keytabname = None - @classmethod - def setup_class(cls): - super(KeytabRetrievalTest, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def keytab_retrieval_setup(self, request, cmdline_setup): + cls = request.cls keytabfd, keytabname = tempfile.mkstemp() os.close(keytabfd) @@ -95,14 +94,13 @@ class KeytabRetrievalTest(cmdline_test): cls.keytabname = keytabname - @classmethod - def teardown_class(cls): - super(KeytabRetrievalTest, cls).teardown_class() + def fin(): + try: + os.unlink(cls.keytabname) + except OSError: + pass - try: - os.unlink(cls.keytabname) - except OSError: - pass + request.addfinalizer(fin) def run_ipagetkeytab(self, service_principal, args=tuple(), raiseonerr=False, stdin=None): @@ -275,10 +273,9 @@ class TestBindMethods(KeytabRetrievalTest): dm_password = None ca_cert = None - @classmethod - def setup_class(cls): - super(TestBindMethods, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def bindmethods_setup(self, request, keytab_retrieval_setup): + cls = request.cls try: cls.dm_password = retrieve_dm_password() except errors.NotFound as e: @@ -292,14 +289,12 @@ class TestBindMethods(KeytabRetrievalTest): cls.ca_cert = temp_ca_cert - @classmethod - def teardown_class(cls): - super(TestBindMethods, cls).teardown_class() - - try: - os.unlink(cls.ca_cert) - except OSError: - pass + def fin(): + try: + os.unlink(cls.ca_cert) + except OSError: + pass + request.addfinalizer(fin) def check_ldapi(self): if not api.env.ldap_uri.startswith('ldapi://'): @@ -418,7 +413,7 @@ class SMBServiceTracker(service_plugin.ServiceTracker): @pytest.fixture(scope='class') -def test_smb_svc(request, test_host): +def test_smb_svc(request, test_host, smb_service_setup): service_tracker = SMBServiceTracker(u'cifs', test_host.name) test_host.ensure_exists() return service_tracker.make_fixture(request) @@ -432,12 +427,12 @@ class test_smb_service(KeytabRetrievalTest): Test `ipa-getkeytab` for retrieving explicit enctypes """ command = "ipa-getkeytab" + dm_password = None keytabname = None - @classmethod - def setup_class(cls): - super(test_smb_service, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def smb_service_setup(self, request, keytab_retrieval_setup): + cls = request.cls try: cls.dm_password = retrieve_dm_password() except errors.NotFound as e: diff --git a/ipatests/test_integration/base.py b/ipatests/test_integration/base.py index cd28a3b..4b49e47 100644 --- a/ipatests/test_integration/base.py +++ b/ipatests/test_integration/base.py @@ -41,10 +41,6 @@ class IntegrationTest: fips_mode = None @classmethod - def setup_class(cls): - pass - - @classmethod def host_by_role(cls, role): for domain in cls.get_domains(): try: @@ -93,10 +89,6 @@ class IntegrationTest: cls.master, cls.replicas, cls.clients, domain_level) @classmethod - def teardown_class(cls): - pass - - @classmethod def uninstall(cls, mh): for replica in cls.replicas: try: diff --git a/ipatests/test_integration/test_nfs.py b/ipatests/test_integration/test_nfs.py index ee547bc..7d29836 100644 --- a/ipatests/test_integration/test_nfs.py +++ b/ipatests/test_integration/test_nfs.py @@ -19,6 +19,8 @@ import os import re import time +import pytest + from ipatests.test_integration.base import IntegrationTest from ipatests.pytest_ipa.integration import tasks @@ -280,8 +282,11 @@ class TestIpaClientAutomountFileRestore(IntegrationTest): def install(cls, mh): tasks.install_master(cls.master, setup_dns=True) - def teardown_method(self, method): - tasks.uninstall_client(self.clients[0]) + @pytest.fixture(autouse=True) + def automountfile_restore_setup(self, request): + def fin(): + tasks.uninstall_client(self.clients[0]) + request.addfinalizer(fin) def nsswitch_backup_restore( self, diff --git a/ipatests/test_integration/test_ntp_options.py b/ipatests/test_integration/test_ntp_options.py index 992c182..932c538 100644 --- a/ipatests/test_integration/test_ntp_options.py +++ b/ipatests/test_integration/test_ntp_options.py @@ -1,6 +1,9 @@ # # Copyright (C) 2018 FreeIPA Contributors see COPYING for license # + +import pytest + from ipatests.test_integration.base import IntegrationTest from ipatests.pytest_ipa.integration import tasks from ipaplatform.paths import paths @@ -38,6 +41,17 @@ class TestNTPoptions(IntegrationTest): exp_prom_err = "NTP configuration cannot be updated during promotion" + @pytest.fixture(autouse=True) + def ntpoptions_setup(self, request): + def fin(): + """ + Uninstall ipa-server, ipa-replica and ipa-client + """ + tasks.uninstall_client(self.client) + tasks.uninstall_master(self.replica) + tasks.uninstall_master(self.master) + request.addfinalizer(fin) + @classmethod def install(cls, mh): cls.client = cls.clients[0] @@ -381,14 +395,6 @@ class TestNTPoptions(IntegrationTest): assert self.exp_records_msg in client_install.stderr_text assert self.exp_chrony_msg in client_install.stdout_text - def teardown_method(self, method): - """ - Uninstall ipa-server, ipa-replica and ipa-client - """ - tasks.uninstall_client(self.client) - tasks.uninstall_master(self.replica) - tasks.uninstall_master(self.master) - @classmethod def uninstall(cls, mh): # Cleanup already done in teardown_method diff --git a/ipatests/test_integration/test_ordering.py b/ipatests/test_integration/test_ordering.py index ec656f3..d40f088 100644 --- a/ipatests/test_integration/test_ordering.py +++ b/ipatests/test_integration/test_ordering.py @@ -25,13 +25,16 @@ in a specific order: - Within a class, test methods are ordered according to source line """ +import pytest from pytest_sourceorder import ordered @ordered class TestBase: - @classmethod - def setup_class(cls): + value = None + @pytest.fixture(autouse=True, scope="class") + def testbase_setup(self, request): + cls = request.cls cls.value = 'unchanged' def test_d_first(self): diff --git a/ipatests/test_integration/test_replica_promotion.py b/ipatests/test_integration/test_replica_promotion.py index 7db8f04..16b2cb3 100644 --- a/ipatests/test_integration/test_replica_promotion.py +++ b/ipatests/test_integration/test_replica_promotion.py @@ -7,6 +7,9 @@ from __future__ import absolute_import import time import re import textwrap + +import pytest + from ipatests.test_integration.base import IntegrationTest from ipatests.pytest_ipa.integration import tasks from ipatests.pytest_ipa.integration.tasks import ( @@ -202,17 +205,20 @@ class TestWrongClientDomain(IntegrationTest): def install(cls, mh): tasks.install_master(cls.master, domain_level=cls.domain_level) - def teardown_method(self, method): - if len(config.domains) == 0: - # No YAML config was set - return - self.replicas[0].run_command(['ipa-client-install', - '--uninstall', '-U'], + @pytest.fixture(autouse=True) + def wrong_client_dom_setup(self, request): + def fin(): + if len(config.domains) == 0: + # No YAML config was set + return + self.replicas[0].run_command(['ipa-client-install', + '--uninstall', '-U'], + raiseonerr=False) + tasks.kinit_admin(self.master) + self.master.run_command(['ipa', 'host-del', + self.replicas[0].hostname], raiseonerr=False) - tasks.kinit_admin(self.master) - self.master.run_command(['ipa', 'host-del', - self.replicas[0].hostname], - raiseonerr=False) + request.addfinalizer(fin) def test_wrong_client_domain(self): client = self.replicas[0] diff --git a/ipatests/test_ipalib/test_rpc.py b/ipatests/test_ipalib/test_rpc.py index b722847..a6e6122 100644 --- a/ipatests/test_ipalib/test_rpc.py +++ b/ipatests/test_ipalib/test_rpc.py @@ -34,7 +34,7 @@ from ipatests.util import Fuzzy from ipatests.data import binary_bytes, utf8_bytes, unicode_str from ipalib.frontend import Command from ipalib.request import context, Connection -from ipalib import rpc, errors, api, request +from ipalib import rpc, errors, api, request as ipa_request from ipapython.version import API_VERSION if six.PY3: @@ -261,17 +261,17 @@ class test_xmlclient(PluginTester): @pytest.mark.skip_ipaclient_unittest @pytest.mark.needs_ipaapi class test_xml_introspection: - @classmethod - def setup_class(cls): + @pytest.fixture(autouse=True, scope="class") + def xml_introsp_setup(self, request): try: api.Backend.xmlclient.connect() except (errors.NetworkError, IOError): raise unittest.SkipTest('%r: Server not available: %r' % (__name__, api.env.xmlrpc_uri)) - @classmethod - def teardown_class(cls): - request.destroy_context() + def fin(): + ipa_request.destroy_context() + request.addfinalizer(fin) def test_list_methods(self): result = api.Backend.xmlclient.conn.system.listMethods() @@ -351,16 +351,18 @@ class test_rpcclient_context(PluginTester): """ Test the context in `ipalib.rpc.rpcclient` plugin. """ - def setup(self): + @pytest.fixture(autouse=True) + def rpcclient_context_fsetup(self, request): try: api.Backend.rpcclient.connect(ca_certfile='foo') except (errors.NetworkError, IOError): raise unittest.SkipTest('%r: Server not available: %r' % (__name__, api.env.xmlrpc_uri)) - def teardown(self): - if api.Backend.rpcclient.isconnected(): - api.Backend.rpcclient.disconnect() + def fin(): + if api.Backend.rpcclient.isconnected(): + api.Backend.rpcclient.disconnect() + request.addfinalizer(fin) def test_context_cafile(self): """ diff --git a/ipatests/test_ipalib/test_text.py b/ipatests/test_ipalib/test_text.py index f25f795..f96f118 100644 --- a/ipatests/test_ipalib/test_text.py +++ b/ipatests/test_ipalib/test_text.py @@ -77,7 +77,8 @@ class test_TestLang: os.environ.update(self.saved_locale) - def setup(self): + @pytest.fixture(autouse=True) + def testlang_setup(self, request): self.tmp_dir = None self.setup_lang() @@ -117,11 +118,12 @@ class test_TestLang: self.po_file_iterate = po_file_iterate - def teardown(self): - self.teardown_lang() + def fin(): + self.teardown_lang() - if self.tmp_dir is not None: - shutil.rmtree(self.tmp_dir) + if self.tmp_dir is not None: + shutil.rmtree(self.tmp_dir) + request.addfinalizer(fin) def test_test_lang(self): print("test_test_lang") diff --git a/ipatests/test_ipapython/test_ipautil.py b/ipatests/test_ipapython/test_ipautil.py index 5ecc097..860718e 100644 --- a/ipatests/test_ipapython/test_ipautil.py +++ b/ipatests/test_ipapython/test_ipautil.py @@ -86,7 +86,8 @@ def test_ip_address(addr, words, prefixlen): class TestCIDict: - def setup(self): + @pytest.fixture(autouse=True) + def cidict_setup(self): self.cidict = ipautil.CIDict() self.cidict["Key1"] = "val1" self.cidict["key2"] = "val2" diff --git a/ipatests/test_ipapython/test_keyring.py b/ipatests/test_ipapython/test_keyring.py index eb1a382..ff9e5c1 100644 --- a/ipatests/test_ipapython/test_keyring.py +++ b/ipatests/test_ipapython/test_keyring.py @@ -41,7 +41,8 @@ class test_keyring: Test the kernel keyring interface """ - def setup(self): + @pytest.fixture(autouse=True) + def keyring_setup(self): try: kernel_keyring.del_key(TEST_KEY) except ValueError: diff --git a/ipatests/test_ipapython/test_session_storage.py b/ipatests/test_ipapython/test_session_storage.py index 0bedf3c..9f3214d 100644 --- a/ipatests/test_ipapython/test_session_storage.py +++ b/ipatests/test_ipapython/test_session_storage.py @@ -17,7 +17,8 @@ class test_session_storage: Test the session storage interface """ - def setup(self): + @pytest.fixture(autouse=True) + def session_storage_setup(self): # TODO: set up test user and kinit to it # tmpdir = tempfile.mkdtemp(prefix = "tmp-") # os.environ['KRB5CCNAME'] = 'FILE:%s/ccache' % tmpdir diff --git a/ipatests/test_ipaserver/test_changepw.py b/ipatests/test_ipaserver/test_changepw.py index 6447594..1914af0 100644 --- a/ipatests/test_ipaserver/test_changepw.py +++ b/ipatests/test_ipaserver/test_changepw.py @@ -37,7 +37,8 @@ new_password = u'new_password' class test_changepw(XMLRPC_test, Unauthorized_HTTP_test): app_uri = '/ipa/session/change_password' - def setup(self): + @pytest.fixture(autouse=True) + def changepw_setup(self, request): try: api.Command['user_add'](uid=testuser, givenname=u'Test', sn=u'User') api.Command['passwd'](testuser, password=u'old_password') @@ -46,11 +47,13 @@ class test_changepw(XMLRPC_test, Unauthorized_HTTP_test): 'Cannot set up test user: %s' % e ) - def teardown(self): - try: - api.Command['user_del']([testuser]) - except errors.NotFound: - pass + def fin(): + try: + api.Command['user_del']([testuser]) + except errors.NotFound: + pass + + request.addfinalizer(fin) def _changepw(self, user, old_password, new_password): return self.send_request(params={'user': str(user), diff --git a/ipatests/test_ipaserver/test_install/test_installer.py b/ipatests/test_ipaserver/test_install/test_installer.py index b7e9c62..d143ae9 100644 --- a/ipatests/test_ipaserver/test_install/test_installer.py +++ b/ipatests/test_ipaserver/test_install/test_installer.py @@ -9,6 +9,8 @@ from abc import ABCMeta, abstractproperty from collections import namedtuple import itertools +import pytest + from ipatests.util import assert_equal from ipaserver.install.ipa_replica_install import ReplicaInstall @@ -23,16 +25,18 @@ class InstallerTestBase(six.with_metaclass(ABCMeta, object)): def tested_cls(self): return None - def setup_class(self): + @pytest.fixture(autouse=True, scope="class") + def installer_setup(self, request): """Initializes the tested class so that it can be used later on """ - self.tested_cls.make_parser() + cls = request.cls + cls.tested_cls.make_parser() assert \ - getattr(self.tested_cls, 'option_parser', False), \ + getattr(cls.tested_cls, 'option_parser', False), \ ("Unable to generate option parser for {}" - .format(self.tested_cls.__name__)) + .format(cls.tested_cls.__name__)) - self._populate_opts_dict() + cls._populate_opts_dict() @classmethod def _populate_opts_dict(cls): diff --git a/ipatests/test_ipaserver/test_kadmin.py b/ipatests/test_ipaserver/test_kadmin.py index 5c93533..9f3e980 100644 --- a/ipatests/test_ipaserver/test_kadmin.py +++ b/ipatests/test_ipaserver/test_kadmin.py @@ -72,10 +72,10 @@ def service_in_service_subtree(request): return princ -@pytest.fixture(params=[service_in_kerberos_subtree, - service_in_service_subtree]) +@pytest.fixture(params=["service_in_kerberos_subtree", + "service_in_service_subtree"]) def service(request): - return request.param(request) + return request.getfixturevalue(request.param) @pytest.mark.skipif( diff --git a/ipatests/test_ipaserver/test_ldap.py b/ipatests/test_ipaserver/test_ldap.py index 6130071..5ffb2d4 100644 --- a/ipatests/test_ipaserver/test_ldap.py +++ b/ipatests/test_ipaserver/test_ldap.py @@ -50,15 +50,17 @@ class test_ldap: Test various LDAP client bind methods. """ - def setup(self): + @pytest.fixture(autouse=True) + def ldap_setup(self, request): self.conn = None self.ldapuri = api.env.ldap_uri self.dn = DN(('krbprincipalname','ldap/%s@%s' % (api.env.host, api.env.realm)), ('cn','services'),('cn','accounts'),api.env.basedn) - def teardown(self): - if self.conn and self.conn.isconnected(): - self.conn.disconnect() + def fin(): + if self.conn and self.conn.isconnected(): + self.conn.disconnect() + request.addfinalizer(fin) def test_anonymous(self): """ @@ -151,16 +153,18 @@ class test_LDAPEntry: dn1 = DN(('cn', cn1[0])) dn2 = DN(('cn', cn2[0])) - def setup(self): + @pytest.fixture(autouse=True) + def ldapentry_setup(self, request): self.ldapuri = api.env.ldap_uri self.conn = ldap2(api) self.conn.connect(autobind=AUTOBIND_DISABLED) self.entry = self.conn.make_entry(self.dn1, cn=self.cn1) - def teardown(self): - if self.conn and self.conn.isconnected(): - self.conn.disconnect() + def fin(): + if self.conn and self.conn.isconnected(): + self.conn.disconnect() + request.addfinalizer(fin) def test_entry(self): e = self.entry diff --git a/ipatests/test_ipaserver/test_migratepw.py b/ipatests/test_ipaserver/test_migratepw.py index 2a38638..023dbe2 100644 --- a/ipatests/test_ipaserver/test_migratepw.py +++ b/ipatests/test_ipaserver/test_migratepw.py @@ -20,21 +20,21 @@ class test_migratepw(XMLRPC_test, Unauthorized_HTTP_test): """ app_uri = '/ipa/migration/migration.py' - def setup(self): + @pytest.fixture(autouse=True) + def migratepw_setup(self, request): """ Prepare for tests """ api.Command['user_add'](uid=testuser, givenname=u'Test', sn=u'User') api.Command['passwd'](testuser, password=password) - def teardown(self): - """ - Clean up - """ - try: - api.Command['user_del']([testuser]) - except errors.NotFound: - pass + def fin(): + try: + api.Command['user_del']([testuser]) + except errors.NotFound: + pass + + request.addfinalizer(fin) def _migratepw(self, user, password, method='POST'): """ diff --git a/ipatests/test_ipaserver/test_topology_plugin.py b/ipatests/test_ipaserver/test_topology_plugin.py index dd4525d..ca68a89 100644 --- a/ipatests/test_ipaserver/test_topology_plugin.py +++ b/ipatests/test_ipaserver/test_topology_plugin.py @@ -20,15 +20,17 @@ class TestTopologyPlugin: """ pwfile = os.path.join(api.env.dot_ipa, ".dmpw") - def setup(self): + @pytest.fixture(autouse=True) + def topologyplugin_setup(self, request): """ setup for test """ self.conn = None - def teardown(self): - if self.conn and self.conn.isconnected(): - self.conn.disconnect() + def fin(): + if self.conn and self.conn.isconnected(): + self.conn.disconnect() + request.addfinalizer(fin) @pytest.mark.skipif(os.path.isfile(pwfile) is False, reason="You did not provide a .dmpw file with the DM password") diff --git a/ipatests/test_webui/test_automember.py b/ipatests/test_webui/test_automember.py index 38d654b..b4b9e22 100644 --- a/ipatests/test_webui/test_automember.py +++ b/ipatests/test_webui/test_automember.py @@ -84,8 +84,8 @@ class TestAutomember(UI_driver): 'Automember rule with name "{}" already exists' ) - def setup(self): - super(TestAutomember, self).setup() + @pytest.fixture(autouse=True) + def automember_setup(self, ui_driver_fsetup): self.init_app() def add_user_group_rules(self, *pkeys, **kwargs): diff --git a/ipatests/test_webui/test_automount.py b/ipatests/test_webui/test_automount.py index 29de0d1..56da136 100644 --- a/ipatests/test_webui/test_automount.py +++ b/ipatests/test_webui/test_automount.py @@ -187,8 +187,8 @@ class Location: @pytest.mark.tier1 class TestAutomount(UI_driver): - def setup(self): - super().setup() + @pytest.fixture(autouse=True) + def automount_setup(self, ui_driver_fsetup): self.init_app() def add_key(self, key, mount_info, **kwargs): diff --git a/ipatests/test_webui/test_cert.py b/ipatests/test_webui/test_cert.py index 4e7502c..53dc76f 100644 --- a/ipatests/test_webui/test_cert.py +++ b/ipatests/test_webui/test_cert.py @@ -83,9 +83,8 @@ def check_minimum_serial(self, serial, option): @pytest.mark.tier1 class test_cert(UI_driver): - def setup(self, *args, **kwargs): - super(test_cert, self).setup(*args, **kwargs) - + @pytest.fixture(autouse=True) + def cert_setup(self, ui_driver_fsetup): if not self.has_ca(): self.skip('CA not configured') diff --git a/ipatests/test_webui/test_dns.py b/ipatests/test_webui/test_dns.py index 24e79dd..864b849 100644 --- a/ipatests/test_webui/test_dns.py +++ b/ipatests/test_webui/test_dns.py @@ -35,9 +35,8 @@ import pytest @pytest.mark.tier1 class test_dns(UI_driver): - def setup(self, *args, **kwargs): - super(test_dns, self).setup(*args, **kwargs) - + @pytest.fixture(autouse=True) + def dns_setup(self, ui_driver_fsetup): if not self.has_dns(): self.skip('DNS not configured') diff --git a/ipatests/test_webui/test_host.py b/ipatests/test_webui/test_host.py index be7a6d8..2619fd4 100644 --- a/ipatests/test_webui/test_host.py +++ b/ipatests/test_webui/test_host.py @@ -48,8 +48,8 @@ ENTITY = 'host' @pytest.mark.tier1 class host_tasks(UI_driver): - def setup(self, *args, **kwargs): - super(host_tasks, self).setup(*args, **kwargs) + @pytest.fixture(autouse=True) + def hosttasks_setup(self, ui_driver_fsetup): self.prep_data() self.prep_data2() self.prep_data3() diff --git a/ipatests/test_webui/test_loginscreen.py b/ipatests/test_webui/test_loginscreen.py index fb2f9f8..4b0c25f 100644 --- a/ipatests/test_webui/test_loginscreen.py +++ b/ipatests/test_webui/test_loginscreen.py @@ -24,22 +24,22 @@ import pytest @pytest.mark.tier1 class TestLoginScreen(UI_driver): - def setup(self, *args, **kwargs): - super(TestLoginScreen, self).setup(*args, **kwargs) + @pytest.fixture(autouse=True) + def loginscreen_setup(self, request, ui_driver_fsetup): self.init_app() self.add_test_user() self.logout() - def teardown(self, *args, **kwargs): - # log out first - if (self.logged_in()): - self.logout() - else: - self.load_url(self.get_base_url()) - # log in as administrator - self.login() - self.delete_test_user() - super(TestLoginScreen, self).teardown(*args, **kwargs) + def fin(): + # log out first + if (self.logged_in()): + self.logout() + else: + self.load_url(self.get_base_url()) + # log in as administrator + self.login() + self.delete_test_user() + request.addfinalizer(fin) def delete_test_user(self): """ diff --git a/ipatests/test_webui/test_range.py b/ipatests/test_webui/test_range.py index 49da8bb..239c1c4 100644 --- a/ipatests/test_webui/test_range.py +++ b/ipatests/test_webui/test_range.py @@ -38,8 +38,8 @@ PKEY = 'itest-range' @pytest.mark.tier1 class test_range(range_tasks): - def setup(self): - super().setup() + @pytest.fixture(autouse=True) + def range_setup(self, ui_driver_fsetup): self.init_app() self.get_shifts() diff --git a/ipatests/test_webui/test_trust.py b/ipatests/test_webui/test_trust.py index 1393d33..c04c2fc 100644 --- a/ipatests/test_webui/test_trust.py +++ b/ipatests/test_webui/test_trust.py @@ -45,6 +45,10 @@ CONFIG_DATA2 = { @pytest.mark.tier1 class trust_tasks(UI_driver): + @pytest.fixture(autouse=True) + def trusttasks_setup(self, ui_driver_fsetup): + pass + def get_data(self, add_data=None): domain = self.config.get('ad_domain') @@ -100,8 +104,8 @@ class test_trust(trust_tasks): request_timeout = 120 - def setup(self, *args, **kwargs): - super(test_trust, self).setup(*args, **kwargs) + @pytest.fixture(autouse=True) + def trust_setup(self, trusttasks_setup): if not self.has_trusts(): self.skip('Trusts not configured') diff --git a/ipatests/test_webui/test_vault.py b/ipatests/test_webui/test_vault.py index 1c094e6..0172dc5 100644 --- a/ipatests/test_webui/test_vault.py +++ b/ipatests/test_webui/test_vault.py @@ -32,6 +32,10 @@ import pytest @pytest.mark.tier1 class vault_tasks(UI_driver): + @pytest.fixture(autouse=True) + def vault_tasks_setup(self, ui_driver_fsetup): + pass + def prep_service_data(self): host = self.config.get('ipa_server') @@ -64,8 +68,8 @@ class vault_tasks(UI_driver): @pytest.mark.tier1 class test_vault(vault_tasks): - def setup(self, *args, **kwargs): - super(test_vault, self).setup(*args, **kwargs) + @pytest.fixture(autouse=True) + def vault_setup(self, vault_tasks_setup): if not self.has_kra(): self.skip('KRA not configured') diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py index 74d9f46..218d3a4 100644 --- a/ipatests/test_webui/ui_driver.py +++ b/ipatests/test_webui/ui_driver.py @@ -162,19 +162,22 @@ class UI_driver: request_timeout = 60 - @classmethod - def setup_class(cls): + @pytest.fixture(autouse=True, scope="class") + def ui_driver_setup(self, request): + cls = request.cls if NO_SELENIUM: raise unittest.SkipTest('Selenium not installed') cls.load_config() - def setup(self): + @pytest.fixture(autouse=True) + def ui_driver_fsetup(self, request): self.driver = self.get_driver() self.driver.maximize_window() - def teardown(self): - self.driver.delete_all_cookies() - self.driver.quit() + def fin(): + self.driver.delete_all_cookies() + self.driver.quit() + request.addfinalizer(fin) @classmethod def load_config(cls): diff --git a/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py b/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py index d057047..35e7a4b 100644 --- a/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py +++ b/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py @@ -16,24 +16,24 @@ from ipatests.test_xmlrpc.tracker.idview_plugin import IdviewTracker @pytest.fixture(scope='class') -def idview(request): +def idview(request, xmlrpc_setup): tracker = IdviewTracker(cn=u'MyView') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def testuser(request): +def testuser(request, xmlrpc_setup): tracker = UserTracker(name=u'testuser', givenname=u'John', sn=u'Donne') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def cert1(request): +def cert1(request, xmlrpc_setup): return get_testcert(DN(('CN', u'testuser')), u'testuser') @pytest.fixture(scope='class') -def cert2(request): +def cert2(request, xmlrpc_setup): return get_testcert(DN(('CN', u'testuser')), u'testuser') @@ -52,6 +52,15 @@ class CertManipCmdTestBase(XMLRPC_test): entity_add=None, caacl=None, ) + + certs = None + certs_remainder = None + certs_subset = None + invalid_b64 = None + malformed_cert = None + mixed_certs = None + nonexistent_certs = None + cert_add_cmd = None cert_del_cmd = None @@ -100,9 +109,9 @@ class CertManipCmdTestBase(XMLRPC_test): def remove_caacl(cls): pass - @classmethod - def setup_class(cls): - super(CertManipCmdTestBase, cls).setup_class() + @pytest.fixture(autouse=True, scope="class") + def certmanipcmd_setup(self, request, xmlrpc_setup): + cls = request.cls cls.delete_entity() @@ -215,16 +224,15 @@ class CertManipCmdTestBase(XMLRPC_test): cls.malformed_cert = [base64.b64encode(b'malformed cert')] # store entity info for the final test - cls.entity_attrs = api.Command['%s_show' % cls.entity_class]( - cls.entity_pkey) + cls.entity_attrs = api.Command[ + '%s_show' % cls.entity_class](cls.entity_pkey) - @classmethod - def teardown_class(cls): - cls.delete_entity() - cls.remove_caacl() + def fin(): + cls.delete_entity() + cls.remove_caacl() + cls.restore_profile_store() - cls.restore_profile_store() - super(CertManipCmdTestBase, cls).teardown_class() + request.addfinalizer(fin) def add_certs(self, certs): # pylint: disable=E1102 diff --git a/ipatests/test_xmlrpc/test_attr.py b/ipatests/test_xmlrpc/test_attr.py index dfc27bb..bbb1bf2 100644 --- a/ipatests/test_xmlrpc/test_attr.py +++ b/ipatests/test_xmlrpc/test_attr.py @@ -29,7 +29,7 @@ import pytest @pytest.fixture(scope='class') -def user(request): +def user(request, xmlrpc_setup): tracker = UserTracker(name=u'user1', givenname=u'Test', sn=u'User1') return tracker.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_automember_plugin.py b/ipatests/test_xmlrpc/test_automember_plugin.py index 21ee880..3d975a3 100644 --- a/ipatests/test_xmlrpc/test_automember_plugin.py +++ b/ipatests/test_xmlrpc/test_automember_plugin.py @@ -58,7 +58,7 @@ hostgroup_exclude_regex3 = u'^webserver5' @pytest.fixture(scope='class') -def manager1(request): +def manager1(request, xmlrpc_setup): """ User tracker used as a manager account """ tracker = UserTracker(name=u'mscott', sn=u'Manager1', givenname=u'Automember test manager user1') @@ -74,49 +74,49 @@ def user1(request, manager1): @pytest.fixture(scope='class') -def group1(request): +def group1(request, xmlrpc_setup): tracker = GroupTracker(name=u'tgroup1', description=u'Automember test group1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def defaultgroup1(request): +def defaultgroup1(request, xmlrpc_setup): tracker = GroupTracker(name=u'defaultgroup1', description=u'Automember test defaultgroup1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def hostgroup1(request): +def hostgroup1(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'thostgroup1', description=u'Automember test hostgroup1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def hostgroup2(request): +def hostgroup2(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'thostgroup2', description=u'Automember test hostgroup2') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def hostgroup3(request): +def hostgroup3(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'thostgroup3', description=u'Automember test hostgroup3') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def hostgroup4(request): +def hostgroup4(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'thostgroup4', description=u'Automember test hostgroup4') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def defaulthostgroup1(request): +def defaulthostgroup1(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'defaulthostgroup1', description=u'Automember test' 'defaulthostgroup1') @@ -124,31 +124,31 @@ def defaulthostgroup1(request): @pytest.fixture(scope='class') -def host1(request): +def host1(request, xmlrpc_setup): tracker = HostTracker(u'web1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host2(request): +def host2(request, xmlrpc_setup): tracker = HostTracker(u'dev1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host3(request): +def host3(request, xmlrpc_setup): tracker = HostTracker(u'web5') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host4(request): +def host4(request, xmlrpc_setup): tracker = HostTracker(u'www5') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host5(request): +def host5(request, xmlrpc_setup): tracker = HostTracker(u'webserver5') return tracker.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_ca_plugin.py b/ipatests/test_xmlrpc/test_ca_plugin.py index b48b58e..fa5fc21 100644 --- a/ipatests/test_xmlrpc/test_ca_plugin.py +++ b/ipatests/test_xmlrpc/test_ca_plugin.py @@ -45,7 +45,7 @@ def default_ca(request): @pytest.fixture(scope='class') -def crud_subca(request): +def crud_subca(request, xmlrpc_setup): name = u'crud-subca' subject = u'CN=crud subca test,O=crud testing inc' tracker = CATracker(name, subject) @@ -54,7 +54,7 @@ def crud_subca(request): @pytest.fixture(scope='class') -def subject_conflict_subca(request): +def subject_conflict_subca(request, xmlrpc_setup): name = u'crud-subca-2' subject = u'CN=crud subca test,O=crud testing inc' tracker = CATracker(name, subject) @@ -64,7 +64,7 @@ def subject_conflict_subca(request): @pytest.fixture(scope='class') -def unrecognised_subject_dn_attrs_subca(request): +def unrecognised_subject_dn_attrs_subca(request, xmlrpc_setup): name = u'crud-subca-3' subject = u'CN=crud subca test,DN=example.com,O=crud testing inc' tracker = CATracker(name, subject) diff --git a/ipatests/test_xmlrpc/test_caacl_plugin.py b/ipatests/test_xmlrpc/test_caacl_plugin.py index 5286417..cc52783 100644 --- a/ipatests/test_xmlrpc/test_caacl_plugin.py +++ b/ipatests/test_xmlrpc/test_caacl_plugin.py @@ -18,7 +18,7 @@ from ipatests.test_xmlrpc.tracker.ca_plugin import CATracker @pytest.fixture(scope='class') -def default_profile(request): +def default_profile(request, xmlrpc_setup): name = 'caIPAserviceCert' desc = u'Standard profile for network services' tracker = CertprofileTracker(name, store=True, desc=desc) @@ -27,7 +27,7 @@ def default_profile(request): @pytest.fixture(scope='class') -def default_acl(request): +def default_acl(request, xmlrpc_setup): name = u'hosts_services_caIPAserviceCert' tracker = CAACLTracker(name, service_category=u'all', host_category=u'all') tracker.track_create() @@ -37,7 +37,7 @@ def default_acl(request): @pytest.fixture(scope='class') -def crud_acl(request): +def crud_acl(request, xmlrpc_setup): name = u'crud-acl' tracker = CAACLTracker(name) @@ -45,7 +45,7 @@ def crud_acl(request): @pytest.fixture(scope='class') -def category_acl(request): +def category_acl(request, xmlrpc_setup): name = u'category_acl' tracker = CAACLTracker(name, ipacertprofile_category=u'all', user_category=u'all', service_category=u'all', @@ -55,14 +55,14 @@ def category_acl(request): @pytest.fixture(scope='class') -def caacl_test_ca(request): +def caacl_test_ca(request, xmlrpc_setup): name = u'caacl-test-ca' subject = u'CN=caacl test subca,O=test industries inc.' return CATracker(name, subject).make_fixture(request) @pytest.fixture(scope='class') -def staged_user(request): +def staged_user(request, xmlrpc_setup): name = u'st-user' tracker = StageUserTracker(name, u'stage', u'test') diff --git a/ipatests/test_xmlrpc/test_caacl_profile_enforcement.py b/ipatests/test_xmlrpc/test_caacl_profile_enforcement.py index 6ed6cbf..9865390 100644 --- a/ipatests/test_xmlrpc/test_caacl_profile_enforcement.py +++ b/ipatests/test_xmlrpc/test_caacl_profile_enforcement.py @@ -63,7 +63,7 @@ def generate_user_csr(username, domain=None): @pytest.fixture(scope='class') -def smime_profile(request): +def smime_profile(request, xmlrpc_setup): profile_path = prepare_config( SMIME_PROFILE_TEMPLATE, dict(ipadomain=api.env.domain, iparealm=api.env.realm)) @@ -76,7 +76,7 @@ def smime_profile(request): @pytest.fixture(scope='class') -def smime_acl(request): +def smime_acl(request, xmlrpc_setup): tracker = CAACLTracker(u'smime_acl') return tracker.make_fixture(request) @@ -86,7 +86,7 @@ def smime_acl(request): # UserTracker has problems while setting passwords. # Until fixed, will use this fixture. @pytest.fixture(scope='class') -def smime_user(request): +def smime_user(request, xmlrpc_setup): username = u'alice' api.Command.user_add(uid=username, givenname=u'Alice', sn=u'SMIME', userpassword=SMIME_USER_INIT_PW) @@ -101,7 +101,7 @@ def smime_user(request): @pytest.fixture(scope='class') -def smime_group(request): +def smime_group(request, xmlrpc_setup): api.Command.group_add(u'smime_users') def fin(): @@ -259,7 +259,7 @@ class TestSignWithChangedProfile(XMLRPC_test): @pytest.fixture(scope='class') -def smime_signing_ca(request): +def smime_signing_ca(request, xmlrpc_setup): name = u'smime-signing-ca' subject = u'CN=SMIME CA,O=test industries Inc.' return CATracker(name, subject).make_fixture(request) @@ -368,7 +368,7 @@ class TestCertSignMIMEwithSubCA(XMLRPC_test): @pytest.fixture(scope='class') -def santest_subca(request): +def santest_subca(request, xmlrpc_setup): name = u'default-profile-subca' subject = u'CN={},O=test'.format(name) tr = CATracker(name, subject) @@ -376,19 +376,19 @@ def santest_subca(request): @pytest.fixture(scope='class') -def santest_subca_acl(request): +def santest_subca_acl(request, xmlrpc_setup): tr = CAACLTracker(u'default_profile_subca') return tr.make_fixture(request) @pytest.fixture(scope='class') -def santest_host_1(request): +def santest_host_1(request, xmlrpc_setup): tr = HostTracker(u'santest-host-1') return tr.make_fixture(request) @pytest.fixture(scope='class') -def santest_host_2(request): +def santest_host_2(request, xmlrpc_setup): tr = HostTracker(u'santest-host-2') return tr.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_cert_plugin.py b/ipatests/test_xmlrpc/test_cert_plugin.py index 68f5b16..7d630f3 100644 --- a/ipatests/test_xmlrpc/test_cert_plugin.py +++ b/ipatests/test_xmlrpc/test_cert_plugin.py @@ -78,11 +78,13 @@ def is_db_configured(): class BaseCert(XMLRPC_test): host_fqdn = u'ipatestcert.%s' % api.env.domain service_princ = u'test/%s@%s' % (host_fqdn, api.env.realm) + certfile = None + nssdb = None + reqfile = None + subject = None - @classmethod - def setup_class(cls): - super(BaseCert, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def basecert_setup(self, request, xmlrpc_setup): if 'cert_request' not in api.Command: raise unittest.SkipTest('cert_request not registered') if 'cert_show' not in api.Command: @@ -90,7 +92,8 @@ class BaseCert(XMLRPC_test): is_db_configured() - def setup(self): + @pytest.fixture(autouse=True) + def basecert_fsetup(self, request): self.nssdb = NSSDatabase() secdir = self.nssdb.secdir self.reqfile = os.path.join(secdir, "test.csr") @@ -99,8 +102,9 @@ class BaseCert(XMLRPC_test): self.nssdb.create_db() self.subject = DN(('CN', self.host_fqdn), subject_base()) - def teardown(self): - self.nssdb.close() # remove tempdir + def fin(): + self.nssdb.close() + request.addfinalizer(fin) def generateCSR(self, subject): self.nssdb.run_certutil([ @@ -115,11 +119,6 @@ class BaseCert(XMLRPC_test): @pytest.mark.tier1 class test_cert(BaseCert): - - @classmethod - def setup_class(cls): - super(test_cert, cls).setup_class() - """ Test the `cert` plugin. """ @@ -270,11 +269,11 @@ class test_cert(BaseCert): @pytest.mark.tier1 class test_cert_find(XMLRPC_test): - - @classmethod - def setup_class(cls): - super(test_cert_find, cls).setup_class() - + """ + Test the `cert-find` command. + """ + @pytest.fixture(autouse=True, scope="class") + def certfind_setup(self, request, xmlrpc_setup): if 'cert_find' not in api.Command: raise unittest.SkipTest('cert_find not registered') @@ -283,9 +282,6 @@ class test_cert_find(XMLRPC_test): is_db_configured() - """ - Test the `cert-find` command. - """ short = api.env.host.split('.')[0] def test_0001_find_all(self): @@ -456,10 +452,6 @@ class test_cert_find(XMLRPC_test): @pytest.mark.tier1 class test_cert_revocation(BaseCert): - @classmethod - def setup_class(cls): - super(test_cert_revocation, cls).setup_class() - # create CSR, request cert, revoke cert, check cert attributes def revoke_cert(self, reason): # add host diff --git a/ipatests/test_xmlrpc/test_cert_request_ip_address.py b/ipatests/test_xmlrpc/test_cert_request_ip_address.py index c522d14..3e9af41 100644 --- a/ipatests/test_xmlrpc/test_cert_request_ip_address.py +++ b/ipatests/test_xmlrpc/test_cert_request_ip_address.py @@ -46,7 +46,7 @@ ipv6_revrec_s = 'a.f.5.9.9.9.2.4.b.a.d.b.8.1.f.8' @pytest.fixture(scope='class') -def host(request): +def host(request, xmlrpc_setup): tr = HostTracker('iptest') return tr.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_certmap_plugin.py b/ipatests/test_xmlrpc/test_certmap_plugin.py index fff3fdb..73f1b3d 100644 --- a/ipatests/test_xmlrpc/test_certmap_plugin.py +++ b/ipatests/test_xmlrpc/test_certmap_plugin.py @@ -82,19 +82,19 @@ def update_idfn(update): @pytest.fixture(scope='class') -def certmap_rule(request): +def certmap_rule(request, xmlrpc_setup): tracker = CertmapruleTracker(**certmaprule_create_params) return tracker.make_fixture(request) @pytest.fixture(scope='class') -def certmap_rule_trusted_domain(request): +def certmap_rule_trusted_domain(request, xmlrpc_setup): tracker = CertmapruleTracker(**certmaprule_create_trusted_params) return tracker.make_fixture(request) @pytest.fixture(scope='class') -def certmap_config(request): +def certmap_config(request, xmlrpc_setup): tracker = CertmapconfigTracker() return tracker.make_fixture(request) @@ -344,7 +344,7 @@ def change_permissions_bindtype(perm, bindtype): @pytest.fixture(scope='class') -def bindtype_permission(request): +def bindtype_permission(request, xmlrpc_setup): orig_bindtype = {} # set bindtype to permission to actually test the permission for perm_name in certmaprule_permissions.values(): diff --git a/ipatests/test_xmlrpc/test_certprofile_plugin.py b/ipatests/test_xmlrpc/test_certprofile_plugin.py index 7cefd0a..3d2dced 100644 --- a/ipatests/test_xmlrpc/test_certprofile_plugin.py +++ b/ipatests/test_xmlrpc/test_certprofile_plugin.py @@ -44,7 +44,7 @@ RENAME_ERR_TEMPL = ( @pytest.fixture(scope='class') -def default_profile(request): +def default_profile(request, xmlrpc_setup): name = 'caIPAserviceCert' desc = u'Standard profile for network services' tracker = CertprofileTracker(name, store=True, desc=desc) @@ -53,7 +53,7 @@ def default_profile(request): @pytest.fixture(scope='class') -def user_profile(request): +def user_profile(request, xmlrpc_setup): name = 'caIPAserviceCert_mod' profile_path = prepare_config( CA_IPA_SERVICE_MODIFIED_TEMPLATE, @@ -70,7 +70,7 @@ def user_profile(request): @pytest.fixture(scope='class') -def malformed(request): +def malformed(request, xmlrpc_setup): name = u'caIPAserviceCert_mal' profile_path = prepare_config( CA_IPA_SERVICE_MALFORMED_TEMPLATE, @@ -86,7 +86,7 @@ def malformed(request): @pytest.fixture(scope='class') -def xmlprofile(request): +def xmlprofile(request, xmlrpc_setup): name = u'caIPAserviceCert_xml' profile_path = prepare_config( CA_IPA_SERVICE_XML_TEMPLATE, diff --git a/ipatests/test_xmlrpc/test_dns_plugin.py b/ipatests/test_xmlrpc/test_dns_plugin.py index c3c9d8c..80a1989 100644 --- a/ipatests/test_xmlrpc/test_dns_plugin.py +++ b/ipatests/test_xmlrpc/test_dns_plugin.py @@ -426,10 +426,8 @@ if have_ldap2: @pytest.mark.tier1 class test_dns(Declarative): - @classmethod - def setup_class(cls): - super(test_dns, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def dns_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() @@ -3338,10 +3336,8 @@ class test_dns(Declarative): @pytest.mark.tier1 class test_root_zone(Declarative): - @classmethod - def setup_class(cls): - super(test_root_zone, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def root_zone_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() @@ -3424,10 +3420,8 @@ class test_root_zone(Declarative): class test_forward_zones(Declarative): # https://fedorahosted.org/freeipa/ticket/4750 - @classmethod - def setup_class(cls): - super(test_forward_zones, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def forward_zone_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() @@ -4633,10 +4627,8 @@ class test_forward_zones(Declarative): class test_forward_master_zones_mutual_exlusion(Declarative): # https://fedorahosted.org/freeipa/ticket/4750 - @classmethod - def setup_class(cls): - super(test_forward_master_zones_mutual_exlusion, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def forward_master_zone_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() @@ -5013,10 +5005,8 @@ class test_forward_master_zones_mutual_exlusion(Declarative): @pytest.mark.tier1 class test_forwardzone_delegation_warnings(Declarative): - @classmethod - def setup_class(cls): - super(test_forwardzone_delegation_warnings, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def forw_zone_deleg_warn_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() @@ -5524,10 +5514,8 @@ class test_forwardzone_delegation_warnings(Declarative): @pytest.mark.tier1 class test_dns_soa(Declarative): - @classmethod - def setup_class(cls): - super(test_dns_soa, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def dns_soa_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() @@ -6313,9 +6301,8 @@ class test_dns_soa(Declarative): class test_dns_type_uri(test_dns): """Test behavior specific for URI RR type.""" - @classmethod - def setup_class(cls): - super(test_dns_type_uri, cls).setup_class() + @pytest.fixture(autouse=True, scope="class") + def dns_type_uri_setup(self, dns_setup): try: api.Command['dnszone_add'](zone1, idnssoarname=zone1_rname) except errors.DuplicateEntry: diff --git a/ipatests/test_xmlrpc/test_external_members.py b/ipatests/test_xmlrpc/test_external_members.py index aa76bc5..e71bf69 100644 --- a/ipatests/test_xmlrpc/test_external_members.py +++ b/ipatests/test_xmlrpc/test_external_members.py @@ -46,9 +46,8 @@ def get_trusted_group_name(): @pytest.mark.tier1 class test_external_members(Declarative): - @classmethod - def setup_class(cls): - super(test_external_members, cls).setup_class() + @pytest.fixture(autouse=True, scope="class") + def ext_member_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() diff --git a/ipatests/test_xmlrpc/test_group_plugin.py b/ipatests/test_xmlrpc/test_group_plugin.py index 3a4b778..90d47c5 100644 --- a/ipatests/test_xmlrpc/test_group_plugin.py +++ b/ipatests/test_xmlrpc/test_group_plugin.py @@ -41,13 +41,13 @@ external_sid1 = u'S-1-1-123456-789-1' @pytest.fixture(scope='class') -def group(request): +def group(request, xmlrpc_setup): tracker = GroupTracker(name=u'testgroup1', description=u'Test desc1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def group2(request): +def group2(request, xmlrpc_setup): tracker = GroupTracker(name=u'testgroup2', description=u'Test desc2') return tracker.make_fixture(request) @@ -65,7 +65,7 @@ def managed_group(request, user): @pytest.fixture(scope='class') -def user(request): +def user(request, xmlrpc_setup): tracker = UserTracker(name=u'user1', givenname=u'Test', sn=u'User1') return tracker.make_fixture(request) @@ -85,7 +85,7 @@ def user_npg2(request, group): @pytest.fixture(scope='class') -def admins(request): +def admins(request, xmlrpc_setup): # Track the admins group tracker = GroupTracker( name=u'admins', description=u'Account administrators group' @@ -97,7 +97,7 @@ def admins(request): @pytest.fixture(scope='class') -def trustadmins(request): +def trustadmins(request, xmlrpc_setup): # Track the 'trust admins' group tracker = GroupTracker( name=u'trust admins', description=u'Trusts administrators group' diff --git a/ipatests/test_xmlrpc/test_host_plugin.py b/ipatests/test_xmlrpc/test_host_plugin.py index cb6975a..910fb8d 100644 --- a/ipatests/test_xmlrpc/test_host_plugin.py +++ b/ipatests/test_xmlrpc/test_host_plugin.py @@ -108,37 +108,37 @@ ipv4_in_missingrevzone_ip = u'172.16.30.22' @pytest.fixture(scope='class') -def host(request): +def host(request, xmlrpc_setup): tracker = HostTracker(name=u'testhost1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host2(request): +def host2(request, xmlrpc_setup): tracker = HostTracker(name=u'testhost2') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host3(request): +def host3(request, xmlrpc_setup): tracker = HostTracker(name=u'testhost3') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host4(request): +def host4(request, xmlrpc_setup): tracker = HostTracker(name=u'testhost4') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host5(request): +def host5(request, xmlrpc_setup): tracker = HostTracker(name=u'testhost5') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def lab_host(request): +def lab_host(request, xmlrpc_setup): name = u'testhost1' tracker = HostTracker(name=name, fqdn=u'%s.lab.%s' % (name, api.env.domain)) @@ -146,7 +146,7 @@ def lab_host(request): @pytest.fixture(scope='class') -def this_host(request): +def this_host(request, xmlrpc_setup): """Fixture for the current master""" tracker = HostTracker(name=api.env.host.partition('.')[0], fqdn=api.env.host) @@ -158,41 +158,41 @@ def this_host(request): @pytest.fixture(scope='class') -def invalid_host(request): +def invalid_host(request, xmlrpc_setup): tracker = HostTracker(name='foo_bar',) return tracker.make_fixture(request) @pytest.fixture(scope='class') -def ipv6only_host(request): +def ipv6only_host(request, xmlrpc_setup): name = u'testipv6onlyhost' tracker = HostTracker(name=name, fqdn=u'%s.%s' % (name, dnszone)) return tracker.make_fixture(request) @pytest.fixture(scope='class') -def ipv4only_host(request): +def ipv4only_host(request, xmlrpc_setup): name = u'testipv4onlyhost' tracker = HostTracker(name=name, fqdn=u'%s.%s' % (name, dnszone)) return tracker.make_fixture(request) @pytest.fixture(scope='class') -def ipv46both_host(request): +def ipv46both_host(request, xmlrpc_setup): name = u'testipv4and6host' tracker = HostTracker(name=name, fqdn=u'%s.%s' % (name, dnszone)) return tracker.make_fixture(request) @pytest.fixture(scope='class') -def ipv4_fromip_host(request): +def ipv4_fromip_host(request, xmlrpc_setup): name = u'testipv4fromip' tracker = HostTracker(name=name, fqdn=u'%s.%s' % (name, dnszone)) return tracker.make_fixture(request) @pytest.fixture(scope='class') -def ipv6_fromip_host(request): +def ipv6_fromip_host(request, xmlrpc_setup): name = u'testipv6fromip' tracker = HostTracker(name=name, fqdn=u'%s.%s' % (name, dnszone)) return tracker.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_hostgroup_plugin.py b/ipatests/test_xmlrpc/test_hostgroup_plugin.py index 2e93e10..361fd9d 100644 --- a/ipatests/test_xmlrpc/test_hostgroup_plugin.py +++ b/ipatests/test_xmlrpc/test_hostgroup_plugin.py @@ -31,25 +31,25 @@ import pytest @pytest.fixture(scope='class') -def hostgroup(request): +def hostgroup(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'hostgroup') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def hostgroup_invalid(request): +def hostgroup_invalid(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'@invalid') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def hostgroup_single(request): +def hostgroup_single(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'a') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host(request): +def host(request, xmlrpc_setup): tracker = HostTracker(name=u'host') return tracker.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_location_plugin.py b/ipatests/test_xmlrpc/test_location_plugin.py index a2400f7..d9cb176 100644 --- a/ipatests/test_xmlrpc/test_location_plugin.py +++ b/ipatests/test_xmlrpc/test_location_plugin.py @@ -17,25 +17,25 @@ from ipapython.dnsutil import DNSName @pytest.fixture(scope='class', params=[u'location1', u'sk\xfa\u0161ka.idna']) -def location(request): +def location(request, xmlrpc_setup): tracker = LocationTracker(request.param) return tracker.make_fixture(request) @pytest.fixture(scope='class') -def location_invalid(request): +def location_invalid(request, xmlrpc_setup): tracker = LocationTracker(u'invalid..location') return tracker @pytest.fixture(scope='class') -def location_absolute(request): +def location_absolute(request, xmlrpc_setup): tracker = LocationTracker(u'invalid.absolute.') return tracker @pytest.fixture(scope='class') -def server(request): +def server(request, xmlrpc_setup): tracker = ServerTracker(api.env.host) return tracker.make_fixture_clean_location(request) diff --git a/ipatests/test_xmlrpc/test_nesting.py b/ipatests/test_xmlrpc/test_nesting.py index f78a6e5..28a5a7c 100644 --- a/ipatests/test_xmlrpc/test_nesting.py +++ b/ipatests/test_xmlrpc/test_nesting.py @@ -29,67 +29,67 @@ import pytest @pytest.fixture(scope='class') -def user1(request): +def user1(request, xmlrpc_setup): tracker = UserTracker(name=u'tuser1', givenname=u'Test1', sn=u'User1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user2(request): +def user2(request, xmlrpc_setup): tracker = UserTracker(name=u'tuser2', givenname=u'Test2', sn=u'User2') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user3(request): +def user3(request, xmlrpc_setup): tracker = UserTracker(name=u'tuser3', givenname=u'Test3', sn=u'User3') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user4(request): +def user4(request, xmlrpc_setup): tracker = UserTracker(name=u'tuser4', givenname=u'Test4', sn=u'User4') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def group1(request): +def group1(request, xmlrpc_setup): tracker = GroupTracker(name=u'testgroup1', description=u'Test desc1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def group2(request): +def group2(request, xmlrpc_setup): tracker = GroupTracker(name=u'testgroup2', description=u'Test desc2') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def group3(request): +def group3(request, xmlrpc_setup): tracker = GroupTracker(name=u'testgroup3', description=u'Test desc3') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def group4(request): +def group4(request, xmlrpc_setup): tracker = GroupTracker(name=u'testgroup4', description=u'Test desc4') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def host1(request): +def host1(request, xmlrpc_setup): tracker = HostTracker(name=u'host1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def hostgroup1(request): +def hostgroup1(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'hostgroup1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def hostgroup2(request): +def hostgroup2(request, xmlrpc_setup): tracker = HostGroupTracker(name=u'hostgroup2') return tracker.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_permission_plugin.py b/ipatests/test_xmlrpc/test_permission_plugin.py index 361e75e..a7c0a5a 100644 --- a/ipatests/test_xmlrpc/test_permission_plugin.py +++ b/ipatests/test_xmlrpc/test_permission_plugin.py @@ -3442,10 +3442,8 @@ class test_managed_permissions(Declarative): ('permission_del', [permission2], {'force': True}), ] - @classmethod - def setup_class(cls): - super(test_managed_permissions, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def managed_perm_setup(self, declarative_setup): if not have_ldap2: raise unittest.SkipTest('server plugin not available') diff --git a/ipatests/test_xmlrpc/test_range_plugin.py b/ipatests/test_xmlrpc/test_range_plugin.py index 20c9d2a..ac11be0 100644 --- a/ipatests/test_xmlrpc/test_range_plugin.py +++ b/ipatests/test_xmlrpc/test_range_plugin.py @@ -368,10 +368,38 @@ IPA_LOCAL_RANGE_MOD_ERR = ( @pytest.mark.tier1 class test_range(Declarative): - @classmethod - def setup_class(cls): - super(test_range, cls).setup_class() - cls.teardown_class() + mockldap = None + + @pytest.fixture(autouse=True, scope="class") + def range_setup(self, request, declarative_setup): + cls = request.cls + + def fin(): + cls.mockldap = MockLDAP() + + cls.mockldap.del_entry(domain2_dn) + cls.mockldap.del_entry(domain3_dn) + cls.mockldap.del_entry(domain4_dn) + cls.mockldap.del_entry(domain5_dn) + cls.mockldap.del_entry(domain6_dn) + cls.mockldap.del_entry(domain7_dn) + + cls.mockldap.del_entry(domain1range1_dn) + cls.mockldap.del_entry(domain2range1_dn) + cls.mockldap.del_entry(domain2range2_dn) + cls.mockldap.del_entry(domain3range1_dn) + cls.mockldap.del_entry(domain3range2_dn) + cls.mockldap.del_entry(domain4range1_dn) + cls.mockldap.del_entry(domain5range1_dn) + cls.mockldap.del_entry(domain5range2_dn) + cls.mockldap.del_entry(domain6range1_dn) + cls.mockldap.del_entry(domain7range1_dn) + cls.mockldap.del_entry(trust_container_dn) + cls.mockldap.del_entry(trust_local_dn) + cls.mockldap.del_entry(smb_cont_dn) + cls.mockldap.unbind() + + fin() cls.mockldap = MockLDAP() cls.mockldap.add_entry(trust_container_dn, trust_container_add) cls.mockldap.add_entry(smb_cont_dn, smb_cont_add) @@ -395,31 +423,7 @@ class test_range(Declarative): cls.mockldap.add_entry(domain6range1_dn, domain6range1_add) cls.mockldap.unbind() - @classmethod - def teardown_class(cls): - cls.mockldap = MockLDAP() - - cls.mockldap.del_entry(domain2_dn) - cls.mockldap.del_entry(domain3_dn) - cls.mockldap.del_entry(domain4_dn) - cls.mockldap.del_entry(domain5_dn) - cls.mockldap.del_entry(domain6_dn) - cls.mockldap.del_entry(domain7_dn) - - cls.mockldap.del_entry(domain1range1_dn) - cls.mockldap.del_entry(domain2range1_dn) - cls.mockldap.del_entry(domain2range2_dn) - cls.mockldap.del_entry(domain3range1_dn) - cls.mockldap.del_entry(domain3range2_dn) - cls.mockldap.del_entry(domain4range1_dn) - cls.mockldap.del_entry(domain5range1_dn) - cls.mockldap.del_entry(domain5range2_dn) - cls.mockldap.del_entry(domain6range1_dn) - cls.mockldap.del_entry(domain7range1_dn) - cls.mockldap.del_entry(trust_container_dn) - cls.mockldap.del_entry(trust_local_dn) - cls.mockldap.del_entry(smb_cont_dn) - cls.mockldap.unbind() + request.addfinalizer(fin) cleanup_commands = [ ('idrange_del', [testrange1, testrange2, testrange3, testrange4, diff --git a/ipatests/test_xmlrpc/test_replace.py b/ipatests/test_xmlrpc/test_replace.py index 76f7d1c..c806bdd 100644 --- a/ipatests/test_xmlrpc/test_replace.py +++ b/ipatests/test_xmlrpc/test_replace.py @@ -33,7 +33,7 @@ import pytest @pytest.fixture(scope='class') -def user(request): +def user(request, xmlrpc_setup): tracker = UserTracker( name=u'user1', givenname=u'Test', sn=u'User1', mail=[u'test1@example.com', u'test2@example.com'] diff --git a/ipatests/test_xmlrpc/test_stageuser_plugin.py b/ipatests/test_xmlrpc/test_stageuser_plugin.py index ccbb652..1c12f0d 100644 --- a/ipatests/test_xmlrpc/test_stageuser_plugin.py +++ b/ipatests/test_xmlrpc/test_stageuser_plugin.py @@ -89,48 +89,48 @@ options_ids = list(options_def.keys()) @pytest.fixture(scope='class') -def stageduser(request): +def stageduser(request, xmlrpc_setup): tracker = StageUserTracker(name=u'suser1', givenname=u'staged', sn=u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def stageduser_min(request): +def stageduser_min(request, xmlrpc_setup): tracker = StageUserTracker(givenname=u'stagedmin', sn=u'usermin') return tracker.make_fixture(request) @pytest.fixture(scope='class', params=options_ok, ids=options_ids) -def stageduser2(request): +def stageduser2(request, xmlrpc_setup): tracker = StageUserTracker(u'suser2', u'staged', u'user', **request.param) return tracker.make_fixture_activate(request) @pytest.fixture(scope='class') -def user_activated(request): +def user_activated(request, xmlrpc_setup): tracker = UserTracker(u'suser2', u'staged', u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def stageduser3(request): +def stageduser3(request, xmlrpc_setup): tracker = StageUserTracker(name=u'suser3', givenname=u'staged', sn=u'user') return tracker.make_fixture_activate(request) @pytest.fixture(scope='class') -def stageduser4(request): +def stageduser4(request, xmlrpc_setup): tracker = StageUserTracker(u'tuser', u'test', u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def stageduser_notposix(request): +def stageduser_notposix(request, xmlrpc_setup): tracker = StageUserTracker(u'notposix', u'notposix', u'notposix') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def stageduser_customattr(request): +def stageduser_customattr(request, xmlrpc_setup): tracker = StageUserTracker(u'customattr', u'customattr', u'customattr', setattr=u'businesscategory=BusinessCat') tracker.track_create() @@ -141,43 +141,43 @@ def stageduser_customattr(request): @pytest.fixture(scope='class') -def user(request): +def user(request, xmlrpc_setup): tracker = UserTracker(u'auser1', u'active', u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user2(request): +def user2(request, xmlrpc_setup): tracker = UserTracker(u'suser3', u'staged', u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user3(request): +def user3(request, xmlrpc_setup): tracker = UserTracker(u'auser2', u'active', u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user4(request): +def user4(request, xmlrpc_setup): tracker = UserTracker(u'tuser', u'test', u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user5(request): +def user5(request, xmlrpc_setup): tracker = UserTracker(u'tuser', u'test', u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user6(request): +def user6(request, xmlrpc_setup): tracker = UserTracker(u'suser2', u'staged', u'user') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user7(request): +def user7(request, xmlrpc_setup): tracker = UserTracker(u'puser1', u'preserved', u'user') return tracker.make_fixture_restore(request) @@ -734,7 +734,7 @@ class TestDuplicates(XMLRPC_test): @pytest.fixture(scope='class') -def group(request): +def group(request, xmlrpc_setup): tracker = GroupTracker(u'testgroup') return tracker.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_sudocmd_plugin.py b/ipatests/test_xmlrpc/test_sudocmd_plugin.py index dd880b5..2aa6acc 100644 --- a/ipatests/test_xmlrpc/test_sudocmd_plugin.py +++ b/ipatests/test_xmlrpc/test_sudocmd_plugin.py @@ -29,21 +29,21 @@ import pytest @pytest.fixture(scope='class') -def sudocmd1(request): +def sudocmd1(request, xmlrpc_setup): tracker = SudoCmdTracker(command=u'/usr/bin/sudotestcmd1', description=u'Test sudo command 1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def sudocmd2(request): +def sudocmd2(request, xmlrpc_setup): tracker = SudoCmdTracker(command=u'/usr/bin/sudoTestCmd1', description=u'Test sudo command 2') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def sudorule1(request): +def sudorule1(request, xmlrpc_setup): name = u'test_sudorule1' def fin(): diff --git a/ipatests/test_xmlrpc/test_sudocmdgroup_plugin.py b/ipatests/test_xmlrpc/test_sudocmdgroup_plugin.py index ac00d5c..20e8d80 100644 --- a/ipatests/test_xmlrpc/test_sudocmdgroup_plugin.py +++ b/ipatests/test_xmlrpc/test_sudocmdgroup_plugin.py @@ -30,34 +30,34 @@ import pytest @pytest.fixture(scope='class') -def sudocmd1(request): +def sudocmd1(request, xmlrpc_setup): tracker = SudoCmdTracker(command=u'/usr/bin/sudotestcmd1', description=u'Test sudo command 1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def sudocmd2(request): +def sudocmd2(request, xmlrpc_setup): tracker = SudoCmdTracker(command=u'/usr/bin/sudoTestCmd1', description=u'Test sudo command 2') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def sudocmd_plus(request): +def sudocmd_plus(request, xmlrpc_setup): tracker = SudoCmdTracker(command=u'/bin/ls -l /lost+found/*', description=u'Test sudo command 3') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def sudocmdgroup1(request): +def sudocmdgroup1(request, xmlrpc_setup): tracker = SudoCmdGroupTracker(u'testsudocmdgroup1', u'Test desc1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def sudocmdgroup2(request): +def sudocmdgroup2(request, xmlrpc_setup): tracker = SudoCmdGroupTracker(u'testsudocmdgroup2', u'Test desc2') return tracker.make_fixture(request) diff --git a/ipatests/test_xmlrpc/test_trust_plugin.py b/ipatests/test_xmlrpc/test_trust_plugin.py index dbcc18c..f90ae75 100644 --- a/ipatests/test_xmlrpc/test_trust_plugin.py +++ b/ipatests/test_xmlrpc/test_trust_plugin.py @@ -47,10 +47,8 @@ default_group_dn = DN(('cn', default_group), api.env.container_group, api.env.ba @pytest.mark.tier1 class test_trustconfig(Declarative): - - @classmethod - def setup_class(cls): - super(test_trustconfig, cls).setup_class() + @pytest.fixture(autouse=True, scope="class") + def trustconfig_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() try: diff --git a/ipatests/test_xmlrpc/test_user_plugin.py b/ipatests/test_xmlrpc/test_user_plugin.py index a8b46d6..ea06547 100644 --- a/ipatests/test_xmlrpc/test_user_plugin.py +++ b/ipatests/test_xmlrpc/test_user_plugin.py @@ -83,32 +83,32 @@ isodate_re = re.compile(r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$') @pytest.fixture(scope='class') -def user_min(request): +def user_min(request, xmlrpc_setup): """ User tracker fixture for testing user with uid no specified """ tracker = UserTracker(givenname=u'Testmin', sn=u'Usermin') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user(request): +def user(request, xmlrpc_setup): tracker = UserTracker(name=u'user1', givenname=u'Test', sn=u'User1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def user2(request): +def user2(request, xmlrpc_setup): tracker = UserTracker(name=u'user2', givenname=u'Test2', sn=u'User2') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def renameduser(request): +def renameduser(request, xmlrpc_setup): tracker = UserTracker(name=u'ruser1', givenname=u'Ruser', sn=u'Ruser1') return tracker.make_fixture(request) @pytest.fixture(scope='class') -def admin2(request): +def admin2(request, xmlrpc_setup): tracker = UserTracker(name=u'admin2', givenname=u'Second', sn=u'Admin') return tracker.make_fixture(request) @@ -142,7 +142,7 @@ def user_npg2(request, group): @pytest.fixture(scope='class') -def user_radius(request): +def user_radius(request, xmlrpc_setup): """ User tracker fixture for testing users with radius user name """ tracker = UserTracker(name=u'radiususer', givenname=u'radiususer', sn=u'radiususer1', @@ -155,7 +155,7 @@ def user_radius(request): @pytest.fixture(scope='class') -def group(request): +def group(request, xmlrpc_setup): tracker = GroupTracker(name=u'group1') return tracker.make_fixture(request) @@ -797,15 +797,14 @@ class TestUserWithUPGDisabled(XMLRPC_test): assert action in ('enable', 'disable') ipautil.run(['ipa-managed-entries', '-e', 'UPG Definition', action]) - @classmethod - def setup_class(cls): - super(TestUserWithUPGDisabled, cls).setup_class() + @pytest.fixture(autouse=True, scope="class") + def user_with_upg_disabled_setup(self, request, xmlrpc_setup): + cls = request.cls cls.managed_entries_upg(action='disable') - @classmethod - def teardown_class(cls): - cls.managed_entries_upg(action='enable') - super(TestUserWithUPGDisabled, cls).teardown_class() + def fin(): + cls.managed_entries_upg(action='enable') + request.addfinalizer(fin) def test_create_without_upg(self): """ Try to create user without User's Primary GID @@ -1073,20 +1072,16 @@ class TestValidation(XMLRPC_test): class TestDeniedBindWithExpiredPrincipal(XMLRPC_test): password = u'random' + connection = None - @classmethod - def setup_class(cls): - super(TestDeniedBindWithExpiredPrincipal, cls).setup_class() - + @pytest.fixture(autouse=True, scope="class") + def bind_with_expired_principal_setup(self, request, xmlrpc_setup): + cls = request.cls cls.connection = ldap_initialize( 'ldap://{host}'.format(host=api.env.host) ) cls.connection.start_tls_s() - @classmethod - def teardown_class(cls): - super(TestDeniedBindWithExpiredPrincipal, cls).teardown_class() - def test_bind_as_test_user(self, user): """ Bind as user """ self.failsafe_add( diff --git a/ipatests/test_xmlrpc/test_vault_plugin.py b/ipatests/test_xmlrpc/test_vault_plugin.py index 6aabe76..5edce2e 100644 --- a/ipatests/test_xmlrpc/test_vault_plugin.py +++ b/ipatests/test_xmlrpc/test_vault_plugin.py @@ -134,17 +134,14 @@ veCYju6ok4ZWnMiH8MR1jgC39RWtjJZwynCuPXUP2/vZkoVf1tCZyz7dSm8TdS/2 @pytest.mark.tier1 class test_vault_plugin(Declarative): - - @classmethod - def setup_class(cls): + @pytest.fixture(autouse=True, scope="class") + def vault_plugin_setup(self, declarative_setup): if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() if not api.Command.kra_is_enabled()['result']: raise unittest.SkipTest('KRA service is not enabled') - super(test_vault_plugin, cls).setup_class() - cleanup_commands = [ ('vault_del', [vault_name], {'continue': True}), ('vault_del', [vault_name], { diff --git a/ipatests/test_xmlrpc/xmlrpc_test.py b/ipatests/test_xmlrpc/xmlrpc_test.py index 9a6176b..2a2d4cb 100644 --- a/ipatests/test_xmlrpc/xmlrpc_test.py +++ b/ipatests/test_xmlrpc/xmlrpc_test.py @@ -27,10 +27,11 @@ import inspect import unittest import contextlib +import pytest import six from ipatests.util import assert_deepequal, Fuzzy -from ipalib import api, request, errors +from ipalib import api, request as ipa_request, errors from ipapython.version import API_VERSION # pylint: disable=no-name-in-module, import-error @@ -207,18 +208,18 @@ class XMLRPC_test: """ Base class for all XML-RPC plugin tests """ - - @classmethod - def setup_class(cls): + @pytest.fixture(autouse=True, scope="class") + def xmlrpc_setup(self, request): if not server_available: raise unittest.SkipTest('%r: Server not available: %r' % - (cls.__module__, api.env.xmlrpc_uri)) + (request.cls.__module__, + api.env.xmlrpc_uri)) if not api.Backend.rpcclient.isconnected(): api.Backend.rpcclient.connect() - @classmethod - def teardown_class(cls): - request.destroy_context() + def fin(): + ipa_request.destroy_context() + request.addfinalizer(fin) def failsafe_add(self, obj, pk, **options): """ @@ -306,17 +307,13 @@ class Declarative(XMLRPC_test): cleanup_commands = tuple() tests = tuple() - @classmethod - def setup_class(cls): - super(Declarative, cls).setup_class() - for command in cls.cleanup_commands: - cls.cleanup(command) - - @classmethod - def teardown_class(cls): - for command in cls.cleanup_commands: - cls.cleanup(command) - super(Declarative, cls).teardown_class() + @pytest.fixture(autouse=True, scope="class") + def declarative_setup(self, request, xmlrpc_setup): + def fin(): + for command in request.cls.cleanup_commands: + request.cls.cleanup(command) + fin() + request.addfinalizer(fin) @classmethod def cleanup(cls, command): diff --git a/ipatests/util.py b/ipatests/util.py index 317758e..398ed2d 100644 --- a/ipatests/util.py +++ b/ipatests/util.py @@ -550,11 +550,11 @@ class ClassChecker: 'get_subcls()' ) - def teardown(self): - """ - nose tear-down fixture. - """ - context.__dict__.clear() + @pytest.fixture(autouse=True) + def classchecker_setup(self, request): + def fin(): + context.__dict__.clear() + request.addfinalizer(fin) def get_api(**kw): @@ -622,11 +622,11 @@ class PluginTester: o = api[namespace][self.plugin.__name__] return (o, api, home) - def teardown(self): - """ - nose tear-down fixture. - """ - context.__dict__.clear() + @pytest.fixture(autouse=True) + def plugintester_setup(self, request): + def fin(): + context.__dict__.clear() + request.addfinalizer(fin) class dummy_ugettext: