summaryrefslogtreecommitdiffstats
path: root/ipatests/test_integration/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipatests/test_integration/config.py')
-rw-r--r--ipatests/test_integration/config.py51
1 files changed, 48 insertions, 3 deletions
diff --git a/ipatests/test_integration/config.py b/ipatests/test_integration/config.py
index aa3fd5e3b..080eed284 100644
--- a/ipatests/test_integration/config.py
+++ b/ipatests/test_integration/config.py
@@ -27,9 +27,8 @@ import random
from ipapython import ipautil
from ipapython.dn import DN
from ipapython.ipa_log_manager import log_mgr
-from ipatests.test_integration.host import BaseHost, Host
-
-TESTHOST_PREFIX = 'TESTHOST_'
+from ipatests.test_integration.util import check_config_dict_empty
+from ipatests.test_integration.util import TESTHOST_PREFIX
_SettingInfo = collections.namedtuple('Setting', 'name var_name default')
@@ -94,6 +93,27 @@ class Config(object):
return filter(lambda d: d.type == 'AD', self.domains)
@classmethod
+ def from_dict(cls, dct):
+ kwargs = {s.name: dct.pop(s.name, s.default) for s in _setting_infos}
+ self = cls(**kwargs)
+
+ for domain_dict in dct.pop('domains'):
+ self.domains.append(Domain.from_dict(domain_dict, self))
+
+ check_config_dict_empty(dct, 'config')
+
+ return self
+
+ def to_dict(self):
+ dct = {'domains': [d.to_dict() for d in self.domains]}
+ for setting in _setting_infos:
+ value = getattr(self, setting.name)
+ if isinstance(value, DN):
+ value = str(value)
+ dct[setting.name] = value
+ return dct
+
+ @classmethod
def from_env(cls, env):
"""Create a test config from environment variables
@@ -316,7 +336,32 @@ class Domain(object):
yield role
@classmethod
+ def from_dict(cls, dct, config):
+ from ipatests.test_integration.host import BaseHost
+
+ domain_type = dct.pop('type')
+ assert domain_type in ('IPA', 'AD')
+ domain_name = dct.pop('name')
+ self = cls(config, domain_name, domain_type)
+
+ for host_dict in dct.pop('hosts'):
+ host = BaseHost.from_dict(host_dict, self)
+ self.hosts.append(host)
+
+ check_config_dict_empty(dct, 'domain %s' % domain_name)
+
+ return self
+
+ def to_dict(self):
+ return {
+ 'type': self.type,
+ 'name': self.name,
+ 'hosts': [h.to_dict() for h in self.hosts],
+ }
+
+ @classmethod
def from_env(cls, env, config, index, domain_type):
+ from ipatests.test_integration.host import BaseHost
# Roles available in the domain depend on the type of the domain
# Unix machines are added only to the IPA domains, Windows machines