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