summaryrefslogtreecommitdiffstats
path: root/ipatests
diff options
context:
space:
mode:
authorTomas Babej <tbabej@redhat.com>2013-09-26 13:18:59 +0200
committerPetr Viktorin <pviktori@redhat.com>2013-10-24 14:08:35 +0200
commit1243730aea66d6a25895745fb5734b9cf2508fff (patch)
tree7b83fa7ecde292aa4dd8af380a70f535dc82c1ee /ipatests
parent87267dd29721e26ce00913ad22382c7409f00b4c (diff)
downloadfreeipa-1243730aea66d6a25895745fb5734b9cf2508fff.tar.gz
freeipa-1243730aea66d6a25895745fb5734b9cf2508fff.tar.xz
freeipa-1243730aea66d6a25895745fb5734b9cf2508fff.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.py60
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))