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