• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Unittests for timeout_and_retry.py."""
6
7import unittest
8
9from pylib.utils import reraiser_thread
10from pylib.utils import timeout_retry
11
12
13class TestException(Exception):
14  pass
15
16
17def _NeverEnding(tries):
18  tries[0] += 1
19  while True:
20    pass
21
22
23def _CountTries(tries):
24  tries[0] += 1
25  raise TestException
26
27
28class TestRun(unittest.TestCase):
29  """Tests for timeout_retry.Run."""
30
31  def testRun(self):
32    self.assertTrue(timeout_retry.Run(
33        lambda x: x, 30, 3, [True], {}))
34
35  def testTimeout(self):
36    tries = [0]
37    self.assertRaises(reraiser_thread.TimeoutError,
38        timeout_retry.Run, lambda: _NeverEnding(tries), 0, 3)
39    self.assertEqual(tries[0], 4)
40
41  def testRetries(self):
42    tries = [0]
43    self.assertRaises(TestException,
44        timeout_retry.Run, lambda: _CountTries(tries), 30, 3)
45    self.assertEqual(tries[0], 4)
46
47  def testReturnValue(self):
48    self.assertTrue(timeout_retry.Run(lambda: True, 30, 3))
49
50
51if __name__ == '__main__':
52  unittest.main()
53