diff options
author | Petr Viktorin <pviktori@redhat.com> | 2013-05-28 13:31:37 +0200 |
---|---|---|
committer | Petr Viktorin <pviktori@redhat.com> | 2013-07-15 15:49:06 +0200 |
commit | 353f3c62c3dc95db471a2b23fcd90d6071542362 (patch) | |
tree | 00fd09352061194c964cd151b1480b6405b69a6d /ipatests/test_integration/tasks.py | |
parent | c577420e40a353f3038263bf8ef763f7c01f6f22 (diff) | |
download | freeipa-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.py | 90 |
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) |