Revision 38d1ee54

b/test/py/ganeti.utils.retry_unittest.py
35 35
    testutils.GanetiTestCase.setUp(self)
36 36
    self.retries = 0
37 37
    self.called = 0
38
    self.time = 1379601882.0
39

  
40
  def _time_fn(self):
41
    return self.time
42

  
43
  def _wait_fn(self, delay):
44
    self.time += delay
38 45

  
39 46
  @staticmethod
40 47
  def _RaiseRetryAgain():
......
64 71

  
65 72
  def testRaiseTimeout(self):
66 73
    self.failUnlessRaises(utils.RetryTimeout, utils.Retry,
67
                          self._RaiseRetryAgain, 0.01, 0.02)
74
                          self._RaiseRetryAgain, 0.01, 0.02,
75
                          wait_fn = self._wait_fn, _time_fn = self._time_fn)
68 76
    self.failUnlessRaises(utils.RetryTimeout, utils.Retry,
69
                          self._RetryAndSucceed, 0.01, 0, args=[1])
77
                          self._RetryAndSucceed, 0.01, 0, args=[1],
78
                          wait_fn = self._wait_fn, _time_fn = self._time_fn)
70 79
    self.failUnlessEqual(self.retries, 1)
71 80

  
72 81
  def testComplete(self):
73
    self.failUnlessEqual(utils.Retry(lambda: True, 0, 1), True)
74
    self.failUnlessEqual(utils.Retry(self._RetryAndSucceed, 0, 1, args=[2]),
82
    self.failUnlessEqual(utils.Retry(lambda: True, 0, 1,
83
                                     wait_fn = self._wait_fn,
84
                                     _time_fn = self._time_fn),
85
                         True)
86
    self.failUnlessEqual(utils.Retry(self._RetryAndSucceed, 0, 1, args=[2],
87
                                     wait_fn = self._wait_fn,
88
                                     _time_fn = self._time_fn),
75 89
                         True)
76 90
    self.failUnlessEqual(self.retries, 2)
77 91

  
78 92
  def testNestedLoop(self):
79 93
    try:
80 94
      self.failUnlessRaises(errors.ProgrammerError, utils.Retry,
81
                            self._WrongNestedLoop, 0, 1)
95
                            self._WrongNestedLoop, 0, 1,
96
                            wait_fn = self._wait_fn, _time_fn = self._time_fn)
82 97
    except utils.RetryTimeout:
83 98
      self.fail("Didn't detect inner loop's exception")
84 99

  
85 100
  def testTimeoutArgument(self):
86 101
    retry_arg="my_important_debugging_message"
87 102
    try:
88
      utils.Retry(self._RaiseRetryAgainWithArg, 0.01, 0.02, args=[[retry_arg]])
103
      utils.Retry(self._RaiseRetryAgainWithArg, 0.01, 0.02, args=[[retry_arg]],
104
                  wait_fn = self._wait_fn, _time_fn = self._time_fn)
89 105
    except utils.RetryTimeout, err:
90 106
      self.failUnlessEqual(err.args, (retry_arg, ))
91 107
    else:
......
96 112
    try:
97 113
      try:
98 114
        utils.Retry(self._RaiseRetryAgainWithArg, 0.01, 0.02,
99
                    args=[[errors.GenericError(retry_arg, retry_arg)]])
115
                    args=[[errors.GenericError(retry_arg, retry_arg)]],
116
                    wait_fn = self._wait_fn, _time_fn = self._time_fn)
100 117
      except utils.RetryTimeout, err:
101 118
        err.RaiseInner()
102 119
      else:
......
111 128
    try:
112 129
      try:
113 130
        utils.Retry(self._RaiseRetryAgainWithArg, 0.01, 0.02,
114
                    args=[[retry_arg, retry_arg]])
131
                    args=[[retry_arg, retry_arg]],
132
                    wait_fn = self._wait_fn, _time_fn = self._time_fn)
115 133
      except utils.RetryTimeout, err:
116 134
        err.RaiseInner()
117 135
      else:
......
122 140
      self.fail("Expected RetryTimeout didn't happen")
123 141

  
124 142
  def testSimpleRetry(self):
125
    self.assertFalse(utils.SimpleRetry(True, lambda: False, 0.01, 0.02))
126
    self.assertFalse(utils.SimpleRetry(lambda x: x, lambda: False, 0.01, 0.02))
127
    self.assertTrue(utils.SimpleRetry(True, lambda: True, 0, 1))
128
    self.assertTrue(utils.SimpleRetry(lambda x: x, lambda: True, 0, 1))
129
    self.assertTrue(utils.SimpleRetry(True, self._SimpleRetryAndSucceed,
130
                                      0, 1, args=[1]))
143
    self.assertFalse(utils.SimpleRetry(True, lambda: False, 0.01, 0.02,
144
                                       wait_fn = self._wait_fn,
145
                                       _time_fn = self._time_fn))
146
    self.assertFalse(utils.SimpleRetry(lambda x: x, lambda: False, 0.01, 0.02,
147
                                       wait_fn = self._wait_fn,
148
                                       _time_fn = self._time_fn))
149
    self.assertTrue(utils.SimpleRetry(True, lambda: True, 0, 1,
150
                                      wait_fn = self._wait_fn,
151
                                      _time_fn = self._time_fn))
152
    self.assertTrue(utils.SimpleRetry(lambda x: x, lambda: True, 0, 1,
153
                                      wait_fn = self._wait_fn,
154
                                      _time_fn = self._time_fn))
155
    self.assertTrue(utils.SimpleRetry(True, self._SimpleRetryAndSucceed, 0, 1,
156
                                      args=[1], wait_fn = self._wait_fn,
157
                                      _time_fn = self._time_fn))
131 158
    self.assertEqual(self.retries, 1)
132 159
    self.assertEqual(self.called, 2)
133 160
    self.called = self.retries = 0
134
    self.assertTrue(utils.SimpleRetry(True, self._SimpleRetryAndSucceed,
135
                                      0, 1, args=[2]))
161
    self.assertTrue(utils.SimpleRetry(True, self._SimpleRetryAndSucceed, 0, 1,
162
                                      args=[2], wait_fn = self._wait_fn,
163
                                      _time_fn = self._time_fn))
136 164
    self.assertEqual(self.called, 3)
137 165

  
138 166

  

Also available in: Unified diff