summaryrefslogtreecommitdiffstats
path: root/ipatests/test_integration/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipatests/test_integration/base.py')
-rw-r--r--ipatests/test_integration/base.py41
1 files changed, 34 insertions, 7 deletions
diff --git a/ipatests/test_integration/base.py b/ipatests/test_integration/base.py
index 1bed7d55..a24a577d 100644
--- a/ipatests/test_integration/base.py
+++ b/ipatests/test_integration/base.py
@@ -19,8 +19,6 @@
"""Base class for FreeIPA integration tests"""
-import os
-
import nose
from ipapython.ipa_log_manager import log_mgr
@@ -36,6 +34,7 @@ class IntegrationTest(object):
num_replicas = 0
num_clients = 0
num_ad_domains = 0
+ required_extra_roles = []
topology = None
@classmethod
@@ -54,16 +53,29 @@ class IntegrationTest(object):
cls.logs_to_collect = {}
- domain = config.domains[0]
+ cls.domain = config.domains[0]
- cls.master = domain.master
- cls.replicas = get_resources(domain.replicas, 'replicas',
+ # 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(domain.clients, 'clients',
+ 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)
@@ -75,8 +87,22 @@ class IntegrationTest(object):
raise
@classmethod
+ def host_by_role(cls, role):
+ for domain in cls.get_domains():
+ try:
+ return domain.host_by_role(role)
+ except LookupError:
+ pass
+ raise LookupError(role)
+
+ @classmethod
def get_all_hosts(cls):
- return [cls.master] + cls.replicas + cls.clients
+ return ([cls.master] + cls.replicas + cls.clients +
+ map(cls.host_by_role, cls.required_extra_roles))
+
+ @classmethod
+ def get_domains(cls):
+ return [cls.domain] + cls.ad_domains
@classmethod
def prepare_host(cls, host):
@@ -103,6 +129,7 @@ class IntegrationTest(object):
del cls.replicas
del cls.clients
del cls.ad_domains
+ del cls.domain
@classmethod
def uninstall(cls):