diff options
author | Tomas Babej <tbabej@redhat.com> | 2013-09-26 13:18:59 +0200 |
---|---|---|
committer | Petr Viktorin <pviktori@redhat.com> | 2013-10-24 14:08:40 +0200 |
commit | e8941ef6cbdf4b8aba7bd66c472a7acb0aa0a4a1 (patch) | |
tree | 57307925d12b2561d7c1aae48adebb621ba68df2 /ipatests | |
parent | 407db5b8a903e64ee1f70a26bf2975b48a3db9d2 (diff) | |
download | freeipa-e8941ef6cbdf4b8aba7bd66c472a7acb0aa0a4a1.tar.gz freeipa-e8941ef6cbdf4b8aba7bd66c472a7acb0aa0a4a1.tar.xz freeipa-e8941ef6cbdf4b8aba7bd66c472a7acb0aa0a4a1.zip |
ipatests: Create util module for ipatests
Part of: https://fedorahosted.org/freeipa/ticket/3834
Diffstat (limited to 'ipatests')
-rw-r--r-- | ipatests/test_integration/util.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/ipatests/test_integration/util.py b/ipatests/test_integration/util.py new file mode 100644 index 000000000..1a1bb3fcc --- /dev/null +++ b/ipatests/test_integration/util.py @@ -0,0 +1,60 @@ +# Authors: +# Tomas Babej <tbabej@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/>. + +import time + + +def run_repeatedly(host, command, assert_zero_rc=True, test=None, + timeout=30, **kwargs): + """ + Runs command on host repeatedly until it's finished successfully (returns + 0 exit code and its stdout passes the test function). + + Returns True if the command was executed succesfully, False otherwise. + + This method accepts additional kwargs and passes these arguments + to the actual run_command method. + """ + + time_waited = 0 + time_step = 2 + + # Check that the test is a function + if test: + assert callable(test) + + while(time_waited <= timeout): + result = host.run_command(command, raiseonerr=False, **kwargs) + + return_code_ok = not assert_zero_rc or (result.returncode == 0) + test_ok = not test or test(result.stdout_text) + + if return_code_ok and test_ok: + # Command successful + return True + else: + # Command not successful + time.sleep(time_step) + time_waited += time_step + + raise AssertionError("Command: {cmd} repeatedly failed {times} times, " + "exceeding the timeout of {timeout} seconds." + .format(cmd=' '.join(command), + times=timeout / time_step, + timeout=timeout)) |