diff options
Diffstat (limited to 'ipatests/test_integration/base.py')
-rw-r--r-- | ipatests/test_integration/base.py | 41 |
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): |