summaryrefslogtreecommitdiffstats
path: root/ipatests/test_integration/tasks.py
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2013-05-28 13:31:37 +0200
committerPetr Viktorin <pviktori@redhat.com>2013-07-15 15:49:06 +0200
commit353f3c62c3dc95db471a2b23fcd90d6071542362 (patch)
tree00fd09352061194c964cd151b1480b6405b69a6d /ipatests/test_integration/tasks.py
parentc577420e40a353f3038263bf8ef763f7c01f6f22 (diff)
downloadfreeipa-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/tasks.py')
-rw-r--r--ipatests/test_integration/tasks.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/ipatests/test_integration/tasks.py b/ipatests/test_integration/tasks.py
new file mode 100644
index 000000000..d899ba789
--- /dev/null
+++ b/ipatests/test_integration/tasks.py
@@ -0,0 +1,90 @@
+# Authors:
+# Petr Viktorin <pviktori@redhat.com>
+#
+# Copyright (C) 2013 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/>.
+
+"""Common tasks for FreeIPA integration tests"""
+
+import os
+import textwrap
+
+from ipapython.ipa_log_manager import log_mgr
+
+log = log_mgr.get_logger(__name__)
+
+
+def enable_replication_debugging(host):
+ log.info('Enable LDAP replication logging')
+ logging_ldif = textwrap.dedent("""
+ dn: cn=config
+ changetype: modify
+ replace: nsslapd-errorlog-level
+ nsslapd-errorlog-level: 8192
+ """)
+ host.run_command(['ldapmodify', '-x',
+ '-D', str(host.config.dirman_dn),
+ '-w', host.config.dirman_password],
+ stdin_text=logging_ldif)
+
+
+def install_master(host, collect_log=None):
+ if collect_log:
+ collect_log(host, '/var/log/ipaserver-install.log')
+ collect_log(host, '/var/log/ipaclient-install.log')
+ inst = host.domain.realm.replace('.', '-')
+ collect_log(host, '/var/log/dirsrv/slapd-%s/errors' % inst)
+ collect_log(host, '/var/log/dirsrv/slapd-%s/access' % inst)
+
+ host.run_command(['ipa-server-install', '-U',
+ '-r', host.domain.name,
+ '-p', host.config.dirman_password,
+ '-a', host.config.admin_password,
+ '--setup-dns',
+ '--forwarder', host.config.dns_forwarder])
+
+ enable_replication_debugging(host)
+
+
+def install_replica(master, replica, collect_log=None):
+ if collect_log:
+ collect_log(replica, '/var/log/ipareplica-install.log')
+ collect_log(replica, '/var/log/ipareplica-conncheck.log')
+
+ master.run_command(['ipa-replica-prepare',
+ '-p', replica.config.dirman_password,
+ '--ip-address', replica.ip,
+ replica.hostname])
+ replica_bundle = master.get_file_contents(
+ '/var/lib/ipa/replica-info-%s.gpg' % replica.hostname)
+ replica_filename = os.path.join(replica.config.test_dir,
+ 'replica-info.gpg')
+ replica.put_file_contents(replica_filename, replica_bundle)
+ replica.run_command(['ipa-replica-install', '-U',
+ '-p', replica.config.dirman_password,
+ '-w', replica.config.admin_password,
+ '--ip-address', replica.ip,
+ replica_filename])
+
+ enable_replication_debugging(replica)
+
+
+def connect_replica(master, replica=None):
+ if replica is None:
+ args = [replica.hostname, master.hostname]
+ else:
+ args = [master.hostname]
+ replica.run_command(['ipa-replica-manage', 'connect'] + args)