| OLD | NEW |
| (Empty) | |
| 1 # Copyright 2014 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 """ |
| 6 Unit tests for the contents of device_utils.py (mostly DeviceUtils). |
| 7 """ |
| 8 # pylint: disable=W0212 |
| 9 # pylint: disable=W0613 |
| 10 |
| 11 import time |
| 12 import unittest |
| 13 from pylib.device import adb_wrapper |
| 14 from pylib.device import device_utils |
| 15 |
| 16 |
| 17 class DeviceUtilsTest(unittest.TestCase): |
| 18 |
| 19 _decorated_function_called_count = 0 |
| 20 |
| 21 def testFunctionTimesOut(self): |
| 22 """ Tests that RunWithTimeoutAndRetries handles the timeout logic for |
| 23 functions. |
| 24 """ |
| 25 def alwaysTimesOut(timeout=None, retries=None): |
| 26 DeviceUtilsTest._decorated_function_called_count += 1 |
| 27 time.sleep(100 * timeout) |
| 28 |
| 29 start_time = time.time() |
| 30 with self.assertRaises(adb_wrapper.CommandTimeoutError): |
| 31 device_utils.RunWithTimeoutAndRetries(alwaysTimesOut, timeout=1, |
| 32 retries=0) |
| 33 elapsed_time = time.time() - start_time |
| 34 self.assertTrue(elapsed_time >= 1) |
| 35 |
| 36 def testFunctionRetries(self): |
| 37 """ Tests that RunWithTimeoutAndRetries handles the retries logic for |
| 38 functions. |
| 39 """ |
| 40 |
| 41 DeviceUtilsTest._decorated_function_called_count = 0 |
| 42 def alwaysRaisesCommandFailedError(timeout=None, retries=None): |
| 43 DeviceUtilsTest._decorated_function_called_count += 1 |
| 44 raise adb_wrapper.CommandFailedError(['testCommand'], |
| 45 'testCommand failed') |
| 46 with self.assertRaises(adb_wrapper.CommandFailedError): |
| 47 device_utils.RunWithTimeoutAndRetries(alwaysRaisesCommandFailedError, |
| 48 timeout=100, retries=10) |
| 49 self.assertEquals(11, DeviceUtilsTest._decorated_function_called_count) |
| 50 |
| 51 def testMethodTimesOut(self): |
| 52 """ Tests that RunWithTimeoutAndRetries handles the timeout logic for |
| 53 methods. |
| 54 """ |
| 55 class TestObject(object): |
| 56 def __init__(self, test_case): |
| 57 self._test_case = test_case |
| 58 self._default_timeout = device_utils._DEFAULT_TIMEOUT |
| 59 self._default_retries = device_utils._DEFAULT_RETRIES |
| 60 self.called = 0 |
| 61 |
| 62 def alwaysTimesOut(self, timeout=None, retries=None): |
| 63 timeout = timeout if timeout is not None else self._default_timeout |
| 64 retries = retries if retries is not None else self._default_retries |
| 65 device_utils.RunWithTimeoutAndRetries( |
| 66 type(self)._alwaysTimesOutImpl, self, timeout=timeout, |
| 67 retries=retries) |
| 68 |
| 69 def _alwaysTimesOutImpl(self, timeout=None, retries=None): |
| 70 self.called += 1 |
| 71 time.sleep(100 * timeout) |
| 72 self._test_case.assertFalse(True, msg='Failed to time out?') |
| 73 |
| 74 test_obj = TestObject(self) |
| 75 start_time = time.time() |
| 76 with self.assertRaises(adb_wrapper.CommandTimeoutError): |
| 77 test_obj.alwaysTimesOut(timeout=1, retries=0) |
| 78 elapsed_time = time.time() - start_time |
| 79 self.assertTrue(elapsed_time >= 1) |
| 80 self.assertEquals(1, test_obj.called) |
| 81 |
| 82 def testMethodRetries(self): |
| 83 """ Tests that RunWithTimeoutAndRetries handles the retries logic for |
| 84 methods. |
| 85 """ |
| 86 class TestObject(object): |
| 87 def __init__(self, test_case): |
| 88 self._test_case = test_case |
| 89 self._default_timeout = device_utils._DEFAULT_TIMEOUT |
| 90 self._default_retries = device_utils._DEFAULT_RETRIES |
| 91 self.called = 0 |
| 92 |
| 93 def alwaysRaisesCommandFailedError(self, timeout=None, retries=None): |
| 94 timeout = timeout if timeout is not None else self._default_timeout |
| 95 retries = retries if retries is not None else self._default_retries |
| 96 device_utils.RunWithTimeoutAndRetries( |
| 97 type(self)._alwaysRaisesCommandFailedErrorImpl, |
| 98 self, timeout=timeout, retries=retries) |
| 99 |
| 100 def _alwaysRaisesCommandFailedErrorImpl(self, timeout=None, retries=None): |
| 101 self.called += 1 |
| 102 raise adb_wrapper.CommandFailedError(['testCommand'], |
| 103 'testCommand failed') |
| 104 |
| 105 test_obj = TestObject(self) |
| 106 with self.assertRaises(adb_wrapper.CommandFailedError): |
| 107 test_obj.alwaysRaisesCommandFailedError(retries=10) |
| 108 self.assertEquals(11, test_obj.called) |
| 109 |
| 110 |
| 111 if __name__ == '__main__': |
| 112 unittest.main() |
| 113 |
| OLD | NEW |