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 <slev@altlinux.org>
Reviewed-By: Christian Heimes <cheimes@redhat.com>
This commit is contained in:
Stanislav Levin 2019-06-20 17:14:02 +03:00 committed by Alexander Bokovoy
parent ff547a2777
commit 292d686c0b
57 changed files with 436 additions and 420 deletions

View File

@ -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.

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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,

View File

@ -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

View File

@ -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):

View File

@ -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]

View File

@ -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):
"""

View File

@ -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")

View File

@ -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"

View File

@ -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:

View File

@ -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

View File

@ -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),

View File

@ -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):

View File

@ -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(

View File

@ -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

View File

@ -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'):
"""

View File

@ -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")

View File

@ -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):

View File

@ -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):

View File

@ -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')

View File

@ -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')

View File

@ -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()

View File

@ -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):
"""

View File

@ -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()

View File

@ -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')

View File

@ -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')

View File

@ -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):

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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')

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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():

View File

@ -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,

View File

@ -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:

View File

@ -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()

View File

@ -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'

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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')

View File

@ -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,

View File

@ -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']

View File

@ -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)

View File

@ -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():

View File

@ -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)

View File

@ -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:

View File

@ -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(

View File

@ -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], {

View File

@ -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):

View File

@ -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: