As this patch series will alter the behavior of the function RetryByNumberOfTimes, we first add a few unit tests to ensure we don't break anything.
Signed-off-by: Helga Velroyen <[email protected]> --- test/py/ganeti.utils.retry_unittest.py | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/test/py/ganeti.utils.retry_unittest.py b/test/py/ganeti.utils.retry_unittest.py index f8c5daa..e796f84 100755 --- a/test/py/ganeti.utils.retry_unittest.py +++ b/test/py/ganeti.utils.retry_unittest.py @@ -30,6 +30,7 @@ """Script for testing ganeti.utils.retry""" +import mock import unittest from ganeti import constants @@ -205,5 +206,46 @@ class TestRetry(testutils.GanetiTestCase): self.assertEqual(self.called, 3) +class TestRetryByNumberOfTimes(testutils.GanetiTestCase): + + def setUp(self): + testutils.GanetiTestCase.setUp(self) + + def testSuccessOnFirst(self): + test_fn = mock.Mock() + utils.RetryByNumberOfTimes(5, Exception, test_fn) + test_fn.assert_called_once() + + def testSuccessOnFirstWithArgs(self): + test_fn = mock.Mock() + utils.RetryByNumberOfTimes(5, Exception, test_fn, + "arg1", "arg2", kwarg1_key="kwarg1_value", kwarg2_key="kwarg2_value") + test_fn.assert_called_with( + "arg1", "arg2", kwarg1_key="kwarg1_value", kwarg2_key="kwarg2_value") + + def testSuccessAtSomePoint(self): + self.succeed_after_try = 2 + self.num_try = 0 + self.max_tries = 5 + + def test_fn(): + self.num_try +=1 + if self.num_try <= self.succeed_after_try: + raise errors.OpExecError("I fail!") + else: + return "I succeed." + + utils.RetryByNumberOfTimes(self.max_tries, Exception, test_fn) + + def testFailAllTries(self): + self.max_tries = 5 + + def test_fn(): + raise errors.OpExecError("I fail!") + + self.assertRaises(Exception, utils.RetryByNumberOfTimes, self.max_tries, + Exception, test_fn) + + if __name__ == "__main__": testutils.GanetiTestProgram() -- 2.6.0.rc2.230.g3dd15c0
