diff options
author | Petr Viktorin <pviktori@redhat.com> | 2013-05-28 13:31:37 +0200 |
---|---|---|
committer | Petr Viktorin <pviktori@redhat.com> | 2013-07-15 15:49:06 +0200 |
commit | 353f3c62c3dc95db471a2b23fcd90d6071542362 (patch) | |
tree | 00fd09352061194c964cd151b1480b6405b69a6d /ipatests/test_integration/config.py | |
parent | c577420e40a353f3038263bf8ef763f7c01f6f22 (diff) | |
download | freeipa-353f3c62c3dc95db471a2b23fcd90d6071542362.tar.gz freeipa-353f3c62c3dc95db471a2b23fcd90d6071542362.tar.xz freeipa-353f3c62c3dc95db471a2b23fcd90d6071542362.zip |
Add a framework for integration testing
Add methods to run commands and copy files to Host objects.
Adds a base class for integration tests which can currently install
and uninstall IPA in a "star" topology with per-test specified number
of hosts.
A simple test for user replication between two masters is provided.
Log files from the remote hosts can be marked for collection, but the
actual collection is left to a Nose plugin.
Part of the work for: https://fedorahosted.org/freeipa/ticket/3621
Diffstat (limited to 'ipatests/test_integration/config.py')
-rw-r--r-- | ipatests/test_integration/config.py | 60 |
1 files changed, 5 insertions, 55 deletions
diff --git a/ipatests/test_integration/config.py b/ipatests/test_integration/config.py index bc6411d43..22e442d15 100644 --- a/ipatests/test_integration/config.py +++ b/ipatests/test_integration/config.py @@ -22,11 +22,11 @@ import os import collections import random -import socket from ipapython import ipautil from ipapython.dn import DN from ipapython.ipa_log_manager import log_mgr +from ipatests.test_integration.host import Host class Config(object): @@ -36,6 +36,7 @@ class Config(object): admin_password = kwargs.get('admin_password') or 'Secret123' self.test_dir = kwargs.get('test_dir', '/root/ipatests') + self.root_password = kwargs.get('root_password') self.ipv6 = bool(kwargs.get('ipv6', False)) self.debug = bool(kwargs.get('debug', False)) self.admin_name = kwargs.get('admin_name') or 'admin' @@ -62,6 +63,7 @@ class Config(object): by default /root/ipatests IPv6SETUP: "TRUE" if setting up with IPv6 IPADEBUG: non-empty if debugging is turned on + IPA_ROOT_SSH_PASSWORD: SSH password for root ADMINID: Administrator username ADMINPW: Administrator password @@ -84,6 +86,7 @@ class Config(object): self = cls(test_dir=env.get('IPATEST_DIR') or '/root/ipatests', ipv6=(env.get('IPv6SETUP') == 'TRUE'), debug=env.get('IPADEBUG'), + root_password=env.get('IPA_ROOT_SSH_PASSWORD'), admin_name=env.get('ADMINID'), admin_password=env.get('ADMINPW'), dirman_dn=env.get('ROOTDN'), @@ -111,6 +114,7 @@ class Config(object): env['IPATEST_DIR'] = self.test_dir env['IPv6SETUP'] = 'TRUE' if self.ipv6 else '' env['IPADEBUG'] = 'TRUE' if self.debug else '' + env['IPA_ROOT_SSH_PASSWORD'] = self.root_password or '' env['ADMINID'] = self.admin_name env['ADMINPW'] = self.admin_password @@ -292,60 +296,6 @@ class Domain(object): raise LookupError(name) -class Host(object): - """Configuration for an IPA host""" - def __init__(self, domain, hostname, role, index): - self.log = log_mgr.get_logger(self) - self.domain = domain - self.role = role - self.index = index - - shortname, dot, ext_domain = hostname.partition('.') - self.hostname = shortname + '.' + self.domain.name - self.external_hostname = hostname - - if self.config.ipv6: - # $(dig +short $M $rrtype|tail -1) - stdout, stderr, returncode = ipautil.run( - ['dig', '+short', self.external_hostname, 'AAAA']) - self.ip = stdout.splitlines()[-1].strip() - else: - try: - self.ip = socket.gethostbyname(self.external_hostname) - except socket.gaierror: - self.ip = None - - if not self.ip: - self.ip = '' - self.role = 'other' - - @classmethod - def from_env(cls, env, domain, hostname, role, index): - self = cls(domain, hostname, role, index) - return self - - @property - def config(self): - return self.domain.config - - def to_env(self, **kwargs): - """Return environment variables specific to this host""" - env = self.domain.to_env(**kwargs) - - role = self.role.upper() - if self.role != 'master': - role += str(self.index) - - env['MYHOSTNAME'] = self.hostname - env['MYBREAKERHOSTNAME'] = self.external_hostname - env['MYIP'] = self.ip - - env['MYROLE'] = '%s%s' % (role, self.domain._env) - env['MYENV'] = str(self.domain.index) - - return env - - def env_to_script(env): return ''.join(['export %s=%s\n' % (key, ipautil.shell_quote(value)) for key, value in env.items()]) |