diff options
author | Petr Viktorin <pviktori@redhat.com> | 2013-12-11 19:06:31 +0100 |
---|---|---|
committer | Petr Viktorin <pviktori@redhat.com> | 2014-03-05 10:00:58 +0100 |
commit | e1b73c18e3bcbd63a67636cdb3a64bb96eab1c52 (patch) | |
tree | b0dacf84607e3aa11f370cb5a06b4d818045a754 /ipatests | |
parent | 8e2bceffa3afe110332ef8850e86c399f5eece3a (diff) | |
download | freeipa-e1b73c18e3bcbd63a67636cdb3a64bb96eab1c52.tar.gz freeipa-e1b73c18e3bcbd63a67636cdb3a64bb96eab1c52.tar.xz freeipa-e1b73c18e3bcbd63a67636cdb3a64bb96eab1c52.zip |
test_integration.config: Use a more declarative approach to test-wide settings
The list of options was duplicated too many times. Consolidate.
Part of the work for: https://fedorahosted.org/freeipa/ticket/3938
Reviewed-By: Tomas Babej <tbabej@redhat.com>
Diffstat (limited to 'ipatests')
-rw-r--r-- | ipatests/test_integration/config.py | 107 |
1 files changed, 50 insertions, 57 deletions
diff --git a/ipatests/test_integration/config.py b/ipatests/test_integration/config.py index 4821b967f..bf4d870bb 100644 --- a/ipatests/test_integration/config.py +++ b/ipatests/test_integration/config.py @@ -32,29 +32,57 @@ from ipatests.test_integration.host import BaseHost, Host TESTHOST_PREFIX = 'TESTHOST_' +_SettingInfo = collections.namedtuple('Setting', 'name var_name default') +_setting_infos = ( + # Directory on which test-specific files will be stored, + _SettingInfo('test_dir', 'IPATEST_DIR', '/root/ipatests'), + + # File with root's private RSA key for SSH (default: ~/.ssh/id_rsa) + _SettingInfo('root_ssh_key_filename', 'IPA_ROOT_SSH_KEY', None), + + # SSH password for root (used if root_ssh_key_filename is not set) + _SettingInfo('root_password', 'IPA_ROOT_SSH_PASSWORD', None), + + _SettingInfo('admin_name', 'ADMINID', 'admin'), + _SettingInfo('admin_password', 'ADMINPW', 'Secret123'), + _SettingInfo('dirman_dn', 'ROOTDN', 'cn=Directory Manager'), + _SettingInfo('dirman_password', 'ROOTDNPWD', None), + + # 8.8.8.8 is probably the best-known public DNS + _SettingInfo('dns_forwarder', 'DNSFORWARD', '8.8.8.8'), + _SettingInfo('nis_domain', 'NISDOMAIN', 'ipatest'), + _SettingInfo('ntp_server', 'NTPSERVER', None), + _SettingInfo('ad_admin_name', 'ADADMINID', 'Administrator'), + _SettingInfo('ad_admin_password', 'ADADMINPW', 'Secret123'), + + _SettingInfo('ipv6', 'IPv6SETUP', False), + _SettingInfo('debug', 'IPADEBUG', False), +) + + class Config(object): def __init__(self, **kwargs): self.log = log_mgr.get_logger(self) admin_password = kwargs.get('admin_password') or 'Secret123' + # This unfortunately duplicates information in _setting_infos, + # but is left here for the sake of static analysis. self.test_dir = kwargs.get('test_dir', '/root/ipatests') - self.root_password = kwargs.get('root_password') self.root_ssh_key_filename = kwargs.get('root_ssh_key_filename') - self.ipv6 = bool(kwargs.get('ipv6', False)) - self.debug = bool(kwargs.get('debug', False)) + self.root_password = kwargs.get('root_password') self.admin_name = kwargs.get('admin_name') or 'admin' self.admin_password = admin_password self.dirman_dn = DN(kwargs.get('dirman_dn') or 'cn=Directory Manager') self.dirman_password = kwargs.get('dirman_password') or admin_password - self.admin_name = kwargs.get('admin_name') or 'admin' - # 8.8.8.8 is probably the best-known public DNS self.dns_forwarder = kwargs.get('dns_forwarder') or '8.8.8.8' self.nis_domain = kwargs.get('nis_domain') or 'ipatest' self.ntp_server = kwargs.get('ntp_server') or ( '%s.pool.ntp.org' % random.randint(0, 3)) self.ad_admin_name = kwargs.get('ad_admin_name') or 'Administrator' self.ad_admin_password = kwargs.get('ad_admin_password') or 'Secret123' + self.ipv6 = bool(kwargs.get('ipv6', False)) + self.debug = bool(kwargs.get('debug', False)) if not self.root_password and not self.root_ssh_key_filename: self.root_ssh_key_filename = '~/.ssh/id_rsa' @@ -71,25 +99,7 @@ class Config(object): Input variables: - DOMAIN: the domain to install in - IPATEST_DIR: Directory on which test-specific files will be stored, - by default /root/ipatests - IPv6SETUP: "TRUE" if setting up with IPv6 - IPADEBUG: non-empty if debugging is turned on - IPA_ROOT_SSH_KEY: File with root's private RSA key for SSH - (default: ~/.ssh/id_rsa) - IPA_ROOT_SSH_PASSWORD: SSH password for root - (used if IPA_ROOT_SSH_KEY is not set) - - ADMINID: Administrator username - ADMINPW: Administrator password - ROOTDN: Directory Manager DN - ROOTDNPWD: Directory Manager password - ADADMINID: Active Directory Administrator username - ADADMINPW: Active Directory Administrator password - DNSFORWARD: DNS forwarder - NISDOMAIN - NTPSERVER + See _setting_infos for test-wide settings MASTER_env1: FQDN of the master REPLICA_env1: space-separated FQDNs of the replicas @@ -115,21 +125,14 @@ class Config(object): """ env_normalize(env) - 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'), - root_ssh_key_filename=env.get('IPA_ROOT_SSH_KEY'), - admin_name=env.get('ADMINID'), - admin_password=env.get('ADMINPW'), - dirman_dn=env.get('ROOTDN'), - dirman_password=env.get('ROOTDNPWD'), - dns_forwarder=env.get('DNSFORWARD'), - nis_domain=env.get('NISDOMAIN'), - ntp_server=env.get('NTPSERVER'), - ad_admin_name=env.get('ADADMINID'), - ad_admin_password=env.get('ADADMINPW'), - ) + kwargs = {s.name: env.get(s.var_name, s.default) + for s in _setting_infos} + + # $IPv6SETUP needs to be 'TRUE' to enable ipv6 + if isinstance(kwargs['ipv6'], basestring): + kwargs['ipv6'] = (kwargs['ipv6'].upper() == 'TRUE') + + self = cls(**kwargs) # Either IPA master or AD can define a domain @@ -156,24 +159,14 @@ class Config(object): # Older Python versions env = {} - 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['IPA_ROOT_SSH_KEY'] = self.root_ssh_key_filename or '' - - env['ADMINID'] = self.admin_name - env['ADMINPW'] = self.admin_password - - env['ROOTDN'] = str(self.dirman_dn) - env['ROOTDNPWD'] = self.dirman_password - - env['ADADMINID'] = self.ad_admin_name - env['ADADMINPW'] = self.ad_admin_password - - env['DNSFORWARD'] = self.dns_forwarder - env['NISDOMAIN'] = self.nis_domain - env['NTPSERVER'] = self.ntp_server + for setting in _setting_infos: + value = getattr(self, setting.name) + if value in (None, False): + env[setting.var_name] = '' + elif value is True: + env[setting.var_name] = 'TRUE' + else: + env[setting.var_name] = str(value) for domain in self.domains: env['DOMAIN%s' % domain._env] = domain.name |