Add a few Retry unittests
authorGuido Trotter <ultrotter@google.com>
Fri, 7 May 2010 08:51:56 +0000 (10:51 +0200)
committerGuido Trotter <ultrotter@google.com>
Mon, 10 May 2010 08:56:01 +0000 (09:56 +0100)
Check that Retry actually times out, and actually retries.

Signed-off-by: Guido Trotter <ultrotter@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>

test/ganeti.utils_unittest.py

index 675ff10..bad5a9a 100755 (executable)
@@ -1604,6 +1604,10 @@ class TestMakedirs(unittest.TestCase):
 
 
 class TestRetry(testutils.GanetiTestCase):
+  def setUp(self):
+    testutils.GanetiTestCase.setUp(self)
+    self.retries = 0
+
   @staticmethod
   def _RaiseRetryAgain():
     raise utils.RetryAgain()
@@ -1611,12 +1615,25 @@ class TestRetry(testutils.GanetiTestCase):
   def _WrongNestedLoop(self):
     return utils.Retry(self._RaiseRetryAgain, 0.01, 0.02)
 
+  def _RetryAndSucceed(self, retries):
+    if self.retries < retries:
+      self.retries += 1
+      raise utils.RetryAgain()
+    else:
+      return True
+
   def testRaiseTimeout(self):
     self.failUnlessRaises(utils.RetryTimeout, utils.Retry,
                           self._RaiseRetryAgain, 0.01, 0.02)
+    self.failUnlessRaises(utils.RetryTimeout, utils.Retry,
+                          self._RetryAndSucceed, 0.01, 0, args=[1])
+    self.failUnlessEqual(self.retries, 1)
 
   def testComplete(self):
     self.failUnlessEqual(utils.Retry(lambda: True, 0, 1), True)
+    self.failUnlessEqual(utils.Retry(self._RetryAndSucceed, 0, 1, args=[2]),
+                         True)
+    self.failUnlessEqual(self.retries, 2)
 
   def testNestedLoop(self):
     try: