diff --git a/ipatests/pytest_ipa/integration/__init__.py b/ipatests/pytest_ipa/integration/__init__.py index b94b8cb2b..80cbd8371 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 ad141a0f0..11bde1061 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 35932b144..280a97f77 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 cd28a3b92..4b49e47ac 100644 --- a/ipatests/test_integration/base.py +++ b/ipatests/test_integration/base.py @@ -40,10 +40,6 @@ class IntegrationTest: domain_level = None fips_mode = None - @classmethod - def setup_class(cls): - pass - @classmethod def host_by_role(cls, role): for domain in cls.get_domains(): @@ -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 ee547bc4e..7d298368a 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 992c182d8..932c538fd 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 ec656f343..d40f08839 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 7db8f04f6..16b2cb34b 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 b72284736..a6e6122b5 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 f25f795c5..f96f118b8 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 5ecc097a6..860718ed4 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 eb1a38220..ff9e5c19c 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 0bedf3cfc..9f3214dbd 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 6447594b7..1914af092 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 b7e9c62fa..d143ae946 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 5c9353367..9f3e9801a 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 613007118..5ffb2d4f9 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 2a386389e..023dbe2a5 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 dd4525de6..ca68a8905 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 38d654bad..b4b9e22af 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 29de0d10b..56da13646 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 4e7502ce8..53dc76faa 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 24e79dd85..864b8494b 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 be7a6d89c..2619fd460 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 fb2f9f898..4b0c25f12 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 49da8bb5c..239c1c442 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 1393d33e9..c04c2fcd8 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 1c094e62b..0172dc576 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 74d9f464a..218d3a451 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 d05704752..35e7a4b34 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 dfc27bbe9..bbb1bf288 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 21ee880b8..3d975a3fc 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 b48b58e40..fa5fc2127 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 52864171d..cc5278320 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 6ed6cbf34..98653904f 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 68f5b1667..7d630f377 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 c522d1402..3e9af41e0 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 0fb574e2b..ee5fabb1a 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) @@ -326,7 +326,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 7cefd0a8d..3d2dced4e 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 c3c9d8c9c..80a198997 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 aa76bc531..e71bf697f 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 3a4b7788d..90d47c53a 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 cb6975a7d..910fb8df6 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 2e93e1013..361fd9df0 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 a2400f7e7..d9cb176a3 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 f78a6e54b..28a5a7c43 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 361e75ee3..a7c0a5add 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 20c9d2a52..ac11be025 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 76f7d1c2c..c806bdd78 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 ccbb6523e..1c12f0d95 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 dd880b58e..2aa6accd5 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 ac00d5c56..20e8d8069 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 dbcc18cb9..f90ae753a 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 a8b46d629..ea06547b8 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 6aabe7684..5edce2e68 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 9a6176b0d..2a2d4cb34 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 317758e62..398ed2d6c 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: