My favorite today \o/ --> 67 <-- \o/ test cases, no more manual testing of installers \o/.

Test suite contains: 6 combination how to install components on replica X 4 combinations of server installation + 3 extra server tests


To save time tests install 1 master and 3 replicas per test class (except extra server tests):
Class name  specifies what is installed on master.

Remember, option "-k" is your friend
$ ipa-run-tests -k '<name of class you want to test (it is regexp)>'
otherwise you will need a lot of time until tests finish.

To list all tests:
$ ipa-run-tests test_integration/test_installation.py --collect-only


Patch attached, it needs to have attached all patches I sent today and also attached workaround patch (Martin3 will provide proper fix)

I haven't had time/mood/resources to test this patch with domain level 0, so testing this patch with domain level 0 is appreciated.


Oleg, I added some methods to tasks.py which you may want to reuse.

Martin^2

From 28dac70efd8768539e7c1a4175ee573bc62def25 Mon Sep 17 00:00:00 2001
From: Martin Basti <mba...@redhat.com>
Date: Fri, 4 Dec 2015 17:12:05 +0100
Subject: [PATCH] CI: installation tests

---
 ipatests/test_integration/tasks.py             |  32 ++++
 ipatests/test_integration/test_installation.py | 200 +++++++++++++++++++++++++
 2 files changed, 232 insertions(+)
 create mode 100644 ipatests/test_integration/test_installation.py

diff --git a/ipatests/test_integration/tasks.py b/ipatests/test_integration/tasks.py
index a0d599d52d4edb9471b6a0cedd155a8590d0889b..6c869158d49210df0e8b3979ee76b34d5263f9f6 100644
--- a/ipatests/test_integration/tasks.py
+++ b/ipatests/test_integration/tasks.py
@@ -39,6 +39,7 @@ from ipatests.test_integration.env_config import env_to_script
 from ipatests.test_integration.host import Host
 from ipalib.util import get_reverse_zone_default
 from ipalib.constants import DOMAIN_SUFFIX_NAME
+from ipalib.constants import DOMAIN_LEVEL_0
 
 log = log_mgr.get_logger(__name__)
 
@@ -924,3 +925,34 @@ def resolve_record(nameserver, query, rtype="SOA", retry=True, timeout=100):
             if not retry:
                 raise
         time.sleep(1)
+
+
+def install_kra(host, domain_level=None, first_instance=False):
+    if not domain_level:
+       domain_level = domainlevel(host)
+    command = ["ipa-kra-install", "-U", "-p", host.config.dirman_password]
+    if domain_level == DOMAIN_LEVEL_0 and not first_instance:
+        replica_file = get_replica_filename(host)
+        command.append(replica_file)
+    return host.run_command(command)
+
+
+def install_ca(host, domain_level=None, first_instance=False):
+    if not domain_level:
+       domain_level = domainlevel(host)
+    command = ["ipa-ca-install", "-U", "-p", host.config.dirman_password,
+               "-P", 'admin', "-w", host.config.admin_password]
+    if domain_level == DOMAIN_LEVEL_0 and not first_instance:
+        replica_file = get_replica_filename(host)
+        command.append(replica_file)
+    return host.run_command(command)
+
+
+def install_dns(host):
+    args = [
+        "ipa-dns-install",
+        "--forwarder", host.config.dns_forwarder,
+        "-p", host.config.dirman_password,
+        "-U",
+    ]
+    host.run_command(args)
diff --git a/ipatests/test_integration/test_installation.py b/ipatests/test_integration/test_installation.py
new file mode 100644
index 0000000000000000000000000000000000000000..e557ad5a0b8cd4497016659b0dfeb2e94b198c99
--- /dev/null
+++ b/ipatests/test_integration/test_installation.py
@@ -0,0 +1,200 @@
+#
+# Copyright (C) 2015  FreeIPA Contributors see COPYING for license
+#
+
+"""
+Module provides tests which testing ability of various subsystems to be
+installed.
+"""
+
+import time
+
+from ipatests.test_integration.base import IntegrationTest
+from ipatests.test_integration import tasks
+
+
+class InstallTestBase1(IntegrationTest):
+
+    num_replicas = 3
+    topology = 'star'
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=False)
+
+    def test_replica0_ca_less_install(self):
+        tasks.install_replica(self.master, self.replicas[0], setup_ca=False)
+
+    def test_replica0_ipa_ca_install(self):
+        tasks.install_ca(self.replicas[0])
+
+    def test_replica0_ipa_kra_install(self):
+        tasks.install_kra(self.replicas[0], first_instance=True)
+
+    def test_replica0_ipa_dns_install(self):
+        tasks.install_dns(self.replicas[0])
+
+    def test_replica1_with_ca_install(self):
+        tasks.install_replica(self.master, self.replicas[1], setup_ca=True)
+
+    def test_replica1_ipa_kra_install(self):
+        tasks.install_kra(self.replicas[1])
+
+    def test_replica1_ipa_dns_install(self):
+        tasks.install_dns(self.replicas[1])
+
+    def test_replica2_with_ca_kra_install(self):
+        tasks.install_replica(self.master, self.replicas[2], setup_ca=True,
+                              setup_kra=True)
+
+    def test_replica2_ipa_dns_install(self):
+        tasks.install_dns(self.replicas[2])
+
+
+class InstallTestBase2(IntegrationTest):
+
+    num_replicas = 3
+    topology = 'star'
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=False)
+
+    def test_replica0_with_ca_kra_dns_install(self):
+        tasks.install_replica(self.master, self.replicas[0], setup_ca=True,
+                              setup_kra=True, setup_dns=True)
+
+    def test_replica1_with_ca_dns_install(self):
+        tasks.install_replica(self.master, self.replicas[1], setup_ca=True,
+                              setup_kra=True)
+
+    def test_replica1_ipa_dns_install(self):
+        tasks.install_kra(self.replicas[1])
+
+    def test_replica2_with_dns_install(self):
+        tasks.install_replica(self.master, self.replicas[2], setup_ca=False,
+                              setup_dns=True)
+
+    def test_replica2_ipa_ca_install(self):
+        tasks.install_ca(self.replicas[2])
+
+    def test_replica2_ipa_kra_install(self):
+        tasks.install_kra(self.replicas[2])
+
+
+##
+# Master X Replicas installation tests
+##
+
+class TestInstallWithCA1(InstallTestBase1):
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=False)
+
+
+class TestInstallWithCA2(InstallTestBase2):
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=False)
+
+
+class TestInstallWithCA_KRA1(InstallTestBase1):
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=False, setup_kra=True)
+
+    def test_replica0_ipa_kra_install(self):
+        tasks.install_kra(self.replicas[0], first_instance=False)
+
+
+class TestInstallWithCA_KRA2(InstallTestBase2):
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=False, setup_kra=True)
+
+
+class TestInstallWithCA_DNS1(InstallTestBase1):
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=True)
+
+
+class TestInstallWithCA_DNS2(InstallTestBase2):
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=True)
+
+
+class TestInstallWithCA_KRA_DNS1(InstallTestBase1):
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=True, setup_kra=True)
+
+    def test_replica0_ipa_kra_install(self):
+        tasks.install_kra(self.replicas[0], first_instance=False)
+
+
+class TestInstallWithCA_KRA_DNS2(InstallTestBase2):
+
+    @classmethod
+    def install(cls, mh):
+        tasks.install_master(cls.master, setup_dns=True, setup_kra=True)
+
+
+##
+# Rest of master installation tests
+##
+
+class TestInstallMaster(IntegrationTest):
+
+    num_replicas = 0
+
+    @classmethod
+    def install(cls, mh):
+        pass
+
+    def test_install_master(self):
+        tasks.install_master(self.master, setup_dns=False)
+
+    def test_install_kra(self):
+        tasks.install_kra(self.master, first_instance=True)
+
+    def test_install_dns(self):
+        tasks.install_dns(self.master)
+
+
+class TestInstallMasterKRA(IntegrationTest):
+
+    num_replicas = 0
+
+    @classmethod
+    def install(cls, mh):
+        pass
+
+    def test_install_master(self):
+        tasks.install_master(self.master, setup_dns=False, setup_kra=True)
+
+    def test_install_dns(self):
+        tasks.install_dns(self.master)
+
+
+class TestInstallMasterDNS(IntegrationTest):
+
+    num_replicas = 0
+
+    @classmethod
+    def install(cls, mh):
+        pass
+
+    def test_install_master(self):
+        tasks.install_master(self.master, setup_dns=True)
+
+    def test_install_kra(self):
+        tasks.install_kra(self.master, first_instance=True)
-- 
2.5.0

From 37e3d205ab91bf753f199b61a7b4c1c574ea7769 Mon Sep 17 00:00:00 2001
From: Martin Basti <mba...@redhat.com>
Date: Sun, 6 Dec 2015 18:46:45 +0100
Subject: [PATCH] CI: uninstall WORKAROUND DO NOT PUSH

---
 ipatests/test_integration/tasks.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ipatests/test_integration/tasks.py b/ipatests/test_integration/tasks.py
index e75fe505f5ad9b5ffe680f7e37dec6873616ca05..a0d599d52d4edb9471b6a0cedd155a8590d0889b 100644
--- a/ipatests/test_integration/tasks.py
+++ b/ipatests/test_integration/tasks.py
@@ -616,7 +616,7 @@ def kinit_admin(host):
 
 def uninstall_master(host):
     host.collect_log(paths.IPASERVER_UNINSTALL_LOG)
-
+    host.run_command(['ipactl', 'stop'], raiseonerr=False)  # temporal workaround
     host.run_command(['ipa-server-install', '--uninstall', '-U'],
                      raiseonerr=False)
     host.run_command(['pkidestroy', '-s', 'CA', '-i', 'pki-tomcat'],
-- 
2.5.0

-- 
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code

Reply via email to