summaryrefslogtreecommitdiffstats
path: root/ipatests/test_integration
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2014-01-03 17:44:49 +0100
committerPetr Viktorin <pviktori@redhat.com>2014-03-05 10:00:58 +0100
commit561e57d12169cfa4e1d2c5d9fef42b149c37fca2 (patch)
tree64bda59ee4d40e969215e3ae219c82beee066539 /ipatests/test_integration
parente6dbb2aa681f8cecfa81623ff17f4acac2b58028 (diff)
downloadfreeipa-561e57d12169cfa4e1d2c5d9fef42b149c37fca2.tar.gz
freeipa-561e57d12169cfa4e1d2c5d9fef42b149c37fca2.tar.xz
freeipa-561e57d12169cfa4e1d2c5d9fef42b149c37fca2.zip
Add tests for integration test configuration
Reviewed-By: Tomas Babej <tbabej@redhat.com>
Diffstat (limited to 'ipatests/test_integration')
-rw-r--r--ipatests/test_integration/test_testconfig.py437
1 files changed, 437 insertions, 0 deletions
diff --git a/ipatests/test_integration/test_testconfig.py b/ipatests/test_integration/test_testconfig.py
new file mode 100644
index 000000000..974263669
--- /dev/null
+++ b/ipatests/test_integration/test_testconfig.py
@@ -0,0 +1,437 @@
+# Authors:
+# Petr Viktorin <pviktori@redhat.com>
+#
+# Copyright (C) 2014 Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import json
+import copy
+
+from ipatests.test_integration import config
+from ipapython.ipautil import write_tmp_file
+from ipatests.util import assert_deepequal
+
+DEFAULT_OUTPUT_DICT = {
+ "nis_domain": "ipatest",
+ "test_dir": "/root/ipatests",
+ "debug": False,
+ "ad_admin_name": "Administrator",
+ "ipv6": False,
+ "root_ssh_key_filename": "~/.ssh/id_rsa",
+ "admin_name": "admin",
+ "ad_admin_password": "Secret123",
+ "root_password": None,
+ "dns_forwarder": "8.8.8.8",
+ "domains": [],
+ "dirman_dn": "cn=Directory Manager",
+ "dirman_password": "Secret123",
+ "ntp_server": "ntp.clock.test",
+ "admin_password": "Secret123"
+}
+
+DEFAULT_OUTPUT_ENV = {
+ "IPATEST_DIR": "/root/ipatests",
+ "IPA_ROOT_SSH_KEY": "~/.ssh/id_rsa",
+ "IPA_ROOT_SSH_PASSWORD": "",
+ "ADMINID": "admin",
+ "ADMINPW": "Secret123",
+ "ROOTDN": "cn=Directory Manager",
+ "ROOTDNPWD": "Secret123",
+ "DNSFORWARD": "8.8.8.8",
+ "NISDOMAIN": "ipatest",
+ "NTPSERVER": "ntp.clock.test",
+ "ADADMINID": "Administrator",
+ "ADADMINPW": "Secret123",
+ "IPv6SETUP": "",
+ "IPADEBUG": "",
+}
+
+DEFAULT_INPUT_ENV = {
+ 'NTPSERVER': 'ntp.clock.test',
+}
+
+DEFAULT_INPUT_DICT = {
+ 'ntp_server': 'ntp.clock.test',
+ 'domains': [],
+}
+
+
+def extend_dict(defaults, *others, **kwargs):
+ result = dict(defaults)
+ for other in others:
+ result.update(other)
+ result.update(kwargs)
+ return copy.deepcopy(result)
+
+
+class CheckConfig(object):
+ def check_config(self, conf):
+ pass
+
+ def get_input_env(self):
+ return extend_dict(DEFAULT_INPUT_ENV, self.extra_input_env)
+
+ def get_output_env(self):
+ return extend_dict(DEFAULT_OUTPUT_ENV, self.extra_output_env)
+
+ def get_input_dict(self):
+ return extend_dict(DEFAULT_INPUT_DICT, self.extra_input_dict)
+
+ def get_output_dict(self):
+ return extend_dict(DEFAULT_OUTPUT_DICT, self.extra_output_dict)
+
+ def test_env_to_dict(self):
+ conf = config.Config.from_env(self.get_input_env())
+ assert_deepequal(self.get_output_dict(), conf.to_dict())
+ self.check_config(conf)
+
+ def test_env_to_env(self):
+ conf = config.Config.from_env(self.get_input_env())
+ assert_deepequal(self.get_output_env(), dict(conf.to_env()))
+ self.check_config(conf)
+
+ def test_dict_to_env(self):
+ conf = config.Config.from_dict(self.get_input_dict())
+ assert_deepequal(self.get_output_env(), dict(conf.to_env()))
+ self.check_config(conf)
+
+ def test_dict_to_dict(self):
+ conf = config.Config.from_dict(self.get_input_dict())
+ assert_deepequal(self.get_output_dict(), conf.to_dict())
+ self.check_config(conf)
+
+ def test_env_roundtrip(self):
+ conf = config.Config.from_env(self.get_output_env())
+ assert_deepequal(self.get_output_env(), dict(conf.to_env()))
+ self.check_config(conf)
+
+ def test_dict_roundtrip(self):
+ conf = config.Config.from_dict(self.get_output_dict())
+ assert_deepequal(self.get_output_dict(), conf.to_dict())
+ self.check_config(conf)
+
+ def test_from_json_file(self):
+ file = write_tmp_file(json.dumps(self.get_input_dict()))
+ conf = config.Config.from_env({'IPATEST_JSON_CONFIG': file.name})
+ assert_deepequal(self.get_output_dict(), conf.to_dict())
+ self.check_config(conf)
+
+
+class TestEmptyConfig(CheckConfig):
+ extra_input_dict = {}
+ extra_input_env = {}
+ extra_output_dict = {}
+ extra_output_env = {}
+
+
+class TestMinimalConfig(CheckConfig):
+ extra_input_dict = dict(
+ domains=[
+ dict(name='ipadomain.test', type='IPA', hosts=[
+ dict(name='master', ip='192.0.2.1'),
+ ]),
+ ],
+ )
+ extra_input_env = dict(
+ MASTER='master.ipadomain.test',
+ BEAKERMASTER1_IP_env1='192.0.2.1',
+ )
+ extra_output_dict = dict(
+ domains=[
+ dict(
+ type="IPA",
+ name="ipadomain.test",
+ hosts=[
+ dict(
+ name='master.ipadomain.test',
+ ip="192.0.2.1",
+ external_hostname="master.ipadomain.test",
+ role="master",
+ ),
+ ],
+ ),
+ ],
+ )
+ extra_output_env = dict(
+ DOMAIN_env1="ipadomain.test",
+ RELM_env1="IPADOMAIN.TEST",
+ BASEDN_env1="dc=ipadomain,dc=test",
+ MASTER_env1="master.ipadomain.test",
+ BEAKERMASTER_env1="master.ipadomain.test",
+ BEAKERMASTER_IP_env1="192.0.2.1",
+ MASTER1_env1="master.ipadomain.test",
+ BEAKERMASTER1_env1="master.ipadomain.test",
+ BEAKERMASTER1_IP_env1="192.0.2.1",
+ MASTER="master.ipadomain.test",
+ BEAKERMASTER="master.ipadomain.test",
+ MASTERIP="192.0.2.1",
+ )
+
+ def check_config(self, conf):
+ assert len(conf.domains) == 1
+ assert conf.domains[0].name == 'ipadomain.test'
+ assert conf.domains[0].type == 'IPA'
+ assert len(conf.domains[0].hosts) == 1
+
+ master = conf.domains[0].master
+ assert master == conf.domains[0].hosts[0]
+ assert master.hostname == 'master.ipadomain.test'
+ assert master.role == 'master'
+
+ assert conf.domains[0].replicas == []
+ assert conf.domains[0].clients == []
+ assert conf.domains[0].hosts_by_role('replica') == []
+ assert conf.domains[0].host_by_role('master') == master
+
+
+class TestComplexConfig(CheckConfig):
+ extra_input_dict = dict(
+ domains=[
+ dict(name='ipadomain.test', type='IPA', hosts=[
+ dict(name='master', ip='192.0.2.1', role='master'),
+ dict(name='replica1', ip='192.0.2.2', role='replica'),
+ dict(name='replica2', ip='192.0.2.3', role='replica',
+ external_hostname='r2.ipadomain.test'),
+ dict(name='client1', ip='192.0.2.4', role='client'),
+ dict(name='client2', ip='192.0.2.5', role='client',
+ external_hostname='c2.ipadomain.test'),
+ dict(name='extra', ip='192.0.2.6', role='extrarole'),
+ dict(name='extram1', ip='192.0.2.7', role='extrarolem'),
+ dict(name='extram2', ip='192.0.2.8', role='extrarolem',
+ external_hostname='e2.ipadomain.test'),
+ ]),
+ dict(name='addomain.test', type='AD', hosts=[
+ dict(name='ad', ip='192.0.2.33', role='ad'),
+ ]),
+ dict(name='ipadomain2.test', type='IPA', hosts=[
+ dict(name='master.ipadomain2.test', ip='192.0.2.65'),
+ ]),
+ ],
+ )
+ extra_input_env = dict(
+ MASTER='master.ipadomain.test',
+ BEAKERMASTER1_IP_env1='192.0.2.1',
+ REPLICA='replica1.ipadomain.test replica2.ipadomain.test',
+ BEAKERREPLICA1_IP_env1='192.0.2.2',
+ BEAKERREPLICA2_IP_env1='192.0.2.3',
+ BEAKERREPLICA2_env1='r2.ipadomain.test',
+ CLIENT='client1.ipadomain.test client2.ipadomain.test',
+ BEAKERCLIENT1_IP_env1='192.0.2.4',
+ BEAKERCLIENT2_IP_env1='192.0.2.5',
+ BEAKERCLIENT2_env1='c2.ipadomain.test',
+ TESTHOST_EXTRAROLE_env1='extra.ipadomain.test',
+ BEAKEREXTRAROLE1_IP_env1='192.0.2.6',
+ TESTHOST_EXTRAROLEM_env1='extram1.ipadomain.test extram2.ipadomain.test',
+ BEAKEREXTRAROLEM1_IP_env1='192.0.2.7',
+ BEAKEREXTRAROLEM2_IP_env1='192.0.2.8',
+ BEAKEREXTRAROLEM2_env1='e2.ipadomain.test',
+
+ AD_env2='ad.addomain.test',
+ BEAKERAD1_IP_env2='192.0.2.33',
+
+ MASTER_env3='master.ipadomain2.test',
+ BEAKERMASTER1_IP_env3='192.0.2.65',
+ )
+ extra_output_dict = dict(
+ domains=[
+ dict(
+ type="IPA",
+ name="ipadomain.test",
+ hosts=[
+ dict(
+ name='master.ipadomain.test',
+ ip="192.0.2.1",
+ external_hostname="master.ipadomain.test",
+ role="master",
+ ),
+ dict(
+ name='replica1.ipadomain.test',
+ ip="192.0.2.2",
+ external_hostname="replica1.ipadomain.test",
+ role="replica",
+ ),
+ dict(
+ name='replica2.ipadomain.test',
+ ip="192.0.2.3",
+ external_hostname="r2.ipadomain.test",
+ role="replica",
+ ),
+ dict(
+ name='client1.ipadomain.test',
+ ip="192.0.2.4",
+ external_hostname="client1.ipadomain.test",
+ role="client",
+ ),
+ dict(
+ name='client2.ipadomain.test',
+ ip="192.0.2.5",
+ external_hostname="c2.ipadomain.test",
+ role="client",
+ ),
+ dict(
+ name='extra.ipadomain.test',
+ ip="192.0.2.6",
+ external_hostname="extra.ipadomain.test",
+ role="extrarole",
+ ),
+ dict(
+ name='extram1.ipadomain.test',
+ ip="192.0.2.7",
+ external_hostname="extram1.ipadomain.test",
+ role="extrarolem",
+ ),
+ dict(
+ name='extram2.ipadomain.test',
+ ip="192.0.2.8",
+ external_hostname="e2.ipadomain.test",
+ role="extrarolem",
+ ),
+ ],
+ ),
+ dict(
+ type="AD",
+ name="addomain.test",
+ hosts=[
+ dict(
+ name='ad.addomain.test',
+ ip="192.0.2.33",
+ external_hostname="ad.addomain.test",
+ role="ad",
+ ),
+ ],
+ ),
+ dict(
+ type="IPA",
+ name="ipadomain2.test",
+ hosts=[
+ dict(
+ name='master.ipadomain2.test',
+ ip="192.0.2.65",
+ external_hostname="master.ipadomain2.test",
+ role="master",
+ ),
+ ],
+ ),
+ ],
+ )
+ extra_output_env = extend_dict(extra_input_env,
+ DOMAIN_env1="ipadomain.test",
+ RELM_env1="IPADOMAIN.TEST",
+ BASEDN_env1="dc=ipadomain,dc=test",
+
+ MASTER_env1="master.ipadomain.test",
+ BEAKERMASTER_env1="master.ipadomain.test",
+ BEAKERMASTER_IP_env1="192.0.2.1",
+ MASTER="master.ipadomain.test",
+ BEAKERMASTER="master.ipadomain.test",
+ MASTERIP="192.0.2.1",
+ MASTER1_env1="master.ipadomain.test",
+ BEAKERMASTER1_env1="master.ipadomain.test",
+ BEAKERMASTER1_IP_env1="192.0.2.1",
+
+ REPLICA_env1="replica1.ipadomain.test replica2.ipadomain.test",
+ BEAKERREPLICA_env1="replica1.ipadomain.test r2.ipadomain.test",
+ BEAKERREPLICA_IP_env1="192.0.2.2 192.0.2.3",
+ REPLICA="replica1.ipadomain.test replica2.ipadomain.test",
+ REPLICA1_env1="replica1.ipadomain.test",
+ BEAKERREPLICA1_env1="replica1.ipadomain.test",
+ BEAKERREPLICA1_IP_env1="192.0.2.2",
+ REPLICA2_env1="replica2.ipadomain.test",
+ BEAKERREPLICA2_env1="r2.ipadomain.test",
+ BEAKERREPLICA2_IP_env1="192.0.2.3",
+ SLAVE="replica1.ipadomain.test replica2.ipadomain.test",
+ BEAKERSLAVE="replica1.ipadomain.test r2.ipadomain.test",
+ SLAVEIP="192.0.2.2 192.0.2.3",
+
+ CLIENT_env1="client1.ipadomain.test client2.ipadomain.test",
+ BEAKERCLIENT_env1="client1.ipadomain.test c2.ipadomain.test",
+ BEAKERCLIENT='client1.ipadomain.test',
+ BEAKERCLIENT2='c2.ipadomain.test',
+ BEAKERCLIENT_IP_env1="192.0.2.4 192.0.2.5",
+ CLIENT="client1.ipadomain.test",
+ CLIENT2="client2.ipadomain.test",
+ CLIENT1_env1="client1.ipadomain.test",
+ BEAKERCLIENT1_env1="client1.ipadomain.test",
+ BEAKERCLIENT1_IP_env1="192.0.2.4",
+ CLIENT2_env1="client2.ipadomain.test",
+ BEAKERCLIENT2_env1="c2.ipadomain.test",
+ BEAKERCLIENT2_IP_env1="192.0.2.5",
+
+ TESTHOST_EXTRAROLE_env1="extra.ipadomain.test",
+ BEAKEREXTRAROLE_env1="extra.ipadomain.test",
+ BEAKEREXTRAROLE_IP_env1="192.0.2.6",
+ TESTHOST_EXTRAROLE1_env1="extra.ipadomain.test",
+ BEAKEREXTRAROLE1_env1="extra.ipadomain.test",
+ BEAKEREXTRAROLE1_IP_env1="192.0.2.6",
+
+ TESTHOST_EXTRAROLEM_env1="extram1.ipadomain.test extram2.ipadomain.test",
+ BEAKEREXTRAROLEM_env1="extram1.ipadomain.test e2.ipadomain.test",
+ BEAKEREXTRAROLEM_IP_env1="192.0.2.7 192.0.2.8",
+ TESTHOST_EXTRAROLEM1_env1="extram1.ipadomain.test",
+ BEAKEREXTRAROLEM1_env1="extram1.ipadomain.test",
+ BEAKEREXTRAROLEM1_IP_env1="192.0.2.7",
+ TESTHOST_EXTRAROLEM2_env1="extram2.ipadomain.test",
+ BEAKEREXTRAROLEM2_env1="e2.ipadomain.test",
+ BEAKEREXTRAROLEM2_IP_env1="192.0.2.8",
+
+ DOMAIN_env2="addomain.test",
+ RELM_env2="ADDOMAIN.TEST",
+ BASEDN_env2="dc=addomain,dc=test",
+ AD_env2="ad.addomain.test",
+ BEAKERAD_env2="ad.addomain.test",
+ BEAKERAD_IP_env2="192.0.2.33",
+ AD1_env2="ad.addomain.test",
+ BEAKERAD1_env2="ad.addomain.test",
+ BEAKERAD1_IP_env2="192.0.2.33",
+
+ DOMAIN_env3="ipadomain2.test",
+ RELM_env3="IPADOMAIN2.TEST",
+ BASEDN_env3="dc=ipadomain2,dc=test",
+ MASTER_env3="master.ipadomain2.test",
+ BEAKERMASTER_env3="master.ipadomain2.test",
+ BEAKERMASTER_IP_env3="192.0.2.65",
+ MASTER1_env3="master.ipadomain2.test",
+ BEAKERMASTER1_env3="master.ipadomain2.test",
+ BEAKERMASTER1_IP_env3="192.0.2.65",
+ )
+
+ def check_config(self, conf):
+ assert len(conf.domains) == 3
+ main_dom = conf.domains[0]
+ (client1, client2, extra, extram1, extram2, master,
+ replica1, replica2) = sorted(main_dom.hosts, key=lambda h: h.role)
+ assert main_dom.name == 'ipadomain.test'
+ assert main_dom.type == 'IPA'
+
+ assert sorted(main_dom.roles) == ['client', 'extrarole', 'extrarolem',
+ 'master', 'replica']
+ assert main_dom.static_roles == ('master', 'replica', 'client', 'other')
+ assert sorted(main_dom.extra_roles) == ['extrarole', 'extrarolem']
+
+ assert main_dom.replicas == [replica1, replica2]
+ assert main_dom.clients == [client1, client2]
+ assert main_dom.hosts_by_role('replica') == [replica1, replica2]
+ assert main_dom.hosts_by_role('extrarolem') == [extram1, extram2]
+ assert main_dom.host_by_role('extrarole') == extra
+
+ assert extra.ip == '192.0.2.6'
+ assert extram2.hostname == 'extram2.ipadomain.test'
+ assert extram2.external_hostname == 'e2.ipadomain.test'
+
+ ad_dom = conf.domains[1]
+ assert ad_dom.roles == ['ad']
+ assert ad_dom.static_roles == ('ad',)
+ assert ad_dom.extra_roles == []