summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2014-10-23 19:17:09 +0200
committerTomas Babej <tbabej@redhat.com>2014-11-21 12:14:44 +0100
commit0ad5c57f6243a7dbfc15af04b87e88f59c65409c (patch)
treef1cf1e82c003ab6661ae7657985996cf75737f2a
parenteaad0a9ced1e989d5c64a7432995b1a679aab77c (diff)
downloadfreeipa-0ad5c57f6243a7dbfc15af04b87e88f59c65409c.tar.gz
freeipa-0ad5c57f6243a7dbfc15af04b87e88f59c65409c.tar.xz
freeipa-0ad5c57f6243a7dbfc15af04b87e88f59c65409c.zip
Switch integration testing config to a fixture
The hack of storing the config on the class is left in; it would be too much work for too little gain at this time. https://fedorahosted.org/freeipa/ticket/4610 Reviewed-By: Tomas Babej <tbabej@redhat.com>
-rw-r--r--ipatests/pytest.ini1
-rw-r--r--ipatests/pytest_plugins/integration.py89
-rw-r--r--ipatests/test_integration/base.py64
3 files changed, 94 insertions, 60 deletions
diff --git a/ipatests/pytest.ini b/ipatests/pytest.ini
index 32dc858b0..38b0484c0 100644
--- a/ipatests/pytest.ini
+++ b/ipatests/pytest.ini
@@ -11,6 +11,7 @@ addopts = --doctest-modules
-p ipatests.pytest_plugins.nose_compat
-p ipatests.pytest_plugins.declarative
-p ipatests.pytest_plugins.ordering
+ -p ipatests.pytest_plugins.integration
# Ignore files for doc tests.
# TODO: ideally, these should all use __name__=='__main__' guards
--ignore=setup.py
diff --git a/ipatests/pytest_plugins/integration.py b/ipatests/pytest_plugins/integration.py
new file mode 100644
index 000000000..5a0e46845
--- /dev/null
+++ b/ipatests/pytest_plugins/integration.py
@@ -0,0 +1,89 @@
+# Authors:
+# Petr Viktorin <pviktori@redhat.com>
+#
+# Copyright (C) 2011 Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""Pytest plugin for IPA Integration tests"""
+
+import pytest
+
+from ipatests.test_integration.config import get_global_config
+
+
+@pytest.yield_fixture(scope='class')
+def integration_config(request):
+ cls = request.cls
+
+ def get_resources(resource_container, resource_str, num_needed):
+ if len(resource_container) < num_needed:
+ raise pytest.skip(
+ 'Not enough %s available (have %s, need %s)' %
+ (resource_str, len(resource_container), num_needed))
+ return resource_container[:num_needed]
+
+ config = get_global_config()
+ if not config.domains:
+ raise pytest.skip('Integration testing not configured')
+
+ cls.logs_to_collect = {}
+
+ cls.domain = config.domains[0]
+
+ # Check that we have enough resources available
+ cls.master = cls.domain.master
+ cls.replicas = get_resources(cls.domain.replicas, 'replicas',
+ cls.num_replicas)
+ cls.clients = get_resources(cls.domain.clients, 'clients',
+ cls.num_clients)
+ cls.ad_domains = get_resources(config.ad_domains, 'AD domains',
+ cls.num_ad_domains)
+
+ # Check that we have all required extra hosts at our disposal
+ available_extra_roles = [role for domain in cls.get_domains()
+ for role in domain.extra_roles]
+ missing_extra_roles = list(set(cls.required_extra_roles) -
+ set(available_extra_roles))
+
+ if missing_extra_roles:
+ raise pytest.skip("Not all required extra hosts available, "
+ "missing: %s, available: %s"
+ % (missing_extra_roles,
+ available_extra_roles))
+
+ for host in cls.get_all_hosts():
+ host.add_log_collector(cls.collect_log)
+ cls.prepare_host(host)
+
+ try:
+ cls.install()
+ except:
+ cls.uninstall()
+ raise
+
+ yield config
+
+ for host in cls.get_all_hosts():
+ host.remove_log_collector(collect_log)
+
+ try:
+ cls.uninstall()
+ finally:
+ del cls.master
+ del cls.replicas
+ del cls.clients
+ del cls.ad_domains
+ del cls.domain
diff --git a/ipatests/test_integration/base.py b/ipatests/test_integration/base.py
index b07eab099..60b0f02a9 100644
--- a/ipatests/test_integration/base.py
+++ b/ipatests/test_integration/base.py
@@ -19,10 +19,9 @@
"""Base class for FreeIPA integration tests"""
-import nose
+import pytest
from ipapython.ipa_log_manager import log_mgr
-from ipatests.test_integration.config import get_global_config
from ipatests.test_integration import tasks
from ipatests.pytest_plugins.ordering import ordered
@@ -30,6 +29,7 @@ log = log_mgr.get_logger(__name__)
@ordered
+@pytest.mark.usefixtures('integration_config')
class IntegrationTest(object):
num_replicas = 0
num_clients = 0
@@ -39,52 +39,7 @@ class IntegrationTest(object):
@classmethod
def setup_class(cls):
-
- def get_resources(resource_container, resource_str, num_needed):
- if len(resource_container) < num_needed:
- raise nose.SkipTest(
- 'Not enough %s available (have %s, need %s)' %
- (resource_str, len(resource_container), num_needed))
- return resource_container[:num_needed]
-
- config = get_global_config()
- if not config.domains:
- raise nose.SkipTest('Integration testing not configured')
-
- cls.logs_to_collect = {}
-
- cls.domain = config.domains[0]
-
- # Check that we have enough resources available
- cls.master = cls.domain.master
- cls.replicas = get_resources(cls.domain.replicas, 'replicas',
- cls.num_replicas)
- cls.clients = get_resources(cls.domain.clients, 'clients',
- cls.num_clients)
- cls.ad_domains = get_resources(config.ad_domains, 'AD domains',
- cls.num_ad_domains)
-
- # Check that we have all required extra hosts at our disposal
- available_extra_roles = [role for domain in cls.get_domains()
- for role in domain.extra_roles]
- missing_extra_roles = list(set(cls.required_extra_roles) -
- set(available_extra_roles))
-
- if missing_extra_roles:
- raise nose.SkipTest("Not all required extra hosts available, "
- "missing: %s, available: %s"
- % (missing_extra_roles,
- available_extra_roles))
-
- for host in cls.get_all_hosts():
- host.add_log_collector(cls.collect_log)
- cls.prepare_host(host)
-
- try:
- cls.install()
- except:
- cls.uninstall()
- raise
+ pass
@classmethod
def host_by_role(cls, role):
@@ -116,20 +71,9 @@ class IntegrationTest(object):
else:
tasks.install_topo(cls.topology,
cls.master, cls.replicas, cls.clients)
-
@classmethod
def teardown_class(cls):
- for host in cls.get_all_hosts():
- host.remove_log_collector(cls.collect_log)
-
- try:
- cls.uninstall()
- finally:
- del cls.master
- del cls.replicas
- del cls.clients
- del cls.ad_domains
- del cls.domain
+ pass
@classmethod
def uninstall(cls):