summaryrefslogtreecommitdiffstats
path: root/ipatests/pytest_plugins
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 /ipatests/pytest_plugins
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>
Diffstat (limited to 'ipatests/pytest_plugins')
-rw-r--r--ipatests/pytest_plugins/integration.py89
1 files changed, 89 insertions, 0 deletions
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