Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3814)

Unified Diff: build/android/pylib/device/device_utils_test.py

Issue 265743002: [Android] Switch to new interfaces of GetAVDs and RestartAdbServer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: build/android/pylib/device/device_utils_test.py
diff --git a/build/android/pylib/device/device_utils_test.py b/build/android/pylib/device/device_utils_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..592d97ed5d2e9073982e0b7889879af44dcd7557
--- /dev/null
+++ b/build/android/pylib/device/device_utils_test.py
@@ -0,0 +1,171 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Unit tests for the contents of device_utils.py (mostly DeviceUtils).
+"""
+# pylint: disable=W0212
+# pylint: disable=W0613
+
+import time
+import unittest
+from pylib.device import adb_wrapper
+from pylib.device import device_utils
+
+
+class DeviceUtilsTest(unittest.TestCase):
+
+ _decorated_function_called_count = 0
+
+ def testFunctionDecoratorSetsTimeout(self):
+ """ Tests that the WithTimeoutAndRetries decorator sets |timeout|
+ appropriately.
+ """
+ @device_utils.WithTimeoutAndRetries(device_utils._DEFAULT_TIMEOUT,
+ device_utils._DEFAULT_RETRIES)
+ def alwaysReturnTimeoutVal(timeout=None, retries=None):
+ return timeout
+
+ self.assertEquals(device_utils._DEFAULT_TIMEOUT, alwaysReturnTimeoutVal())
+ self.assertEquals(8, alwaysReturnTimeoutVal(timeout=8))
+
+ def testFunctionDecoratorSetsRetries(self):
+ """ Tests that the WithTimeoutAndRetries decorator sets |retries|
+ appropriately.
+ """
+ @device_utils.WithTimeoutAndRetries(device_utils._DEFAULT_TIMEOUT,
+ device_utils._DEFAULT_RETRIES)
+ def alwaysReturnRetriesVal(timeout=None, retries=None):
+ return retries
+
+ self.assertEquals(device_utils._DEFAULT_RETRIES, alwaysReturnRetriesVal())
+ self.assertEquals(1, alwaysReturnRetriesVal(retries=1))
+
+ def testFunctionDecoratorDoesTimeouts(self):
+ """ Tests that the WithTimeoutAndRetries decorator handles the timeout
+ logic.
+ """
+ DeviceUtilsTest._decorated_function_called_count = 0
+ @device_utils.WithTimeoutAndRetries(device_utils._DEFAULT_TIMEOUT,
+ device_utils._DEFAULT_RETRIES)
+ def alwaysTimesOut(timeout=None, retries=None):
+ DeviceUtilsTest._decorated_function_called_count += 1
+ time.sleep(100 * timeout)
+
+ start_time = time.time()
+ with self.assertRaises(adb_wrapper.CommandTimeoutError):
+ alwaysTimesOut(timeout=1, retries=0)
+ elapsed_time = time.time() - start_time
+ self.assertTrue(elapsed_time >= 1)
+ self.assertEquals(1, DeviceUtilsTest._decorated_function_called_count)
+
+ def testFunctionDecoratorDoesRetries(self):
+ """ Tests that the WithTimeoutAndRetries decorator handles the retries
+ logic.
+ """
+ DeviceUtilsTest._decorated_function_called_count = 0
+ @device_utils.WithTimeoutAndRetries(device_utils._DEFAULT_TIMEOUT,
+ device_utils._DEFAULT_RETRIES)
+ def alwaysRaisesCommandFailedError(timeout=None, retries=None):
+ DeviceUtilsTest._decorated_function_called_count += 1
+ raise adb_wrapper.CommandFailedError(['testCommand'],
+ 'testCommand failed')
+
+ with self.assertRaises(adb_wrapper.CommandFailedError):
+ alwaysRaisesCommandFailedError(retries=10)
+ self.assertEquals(11, DeviceUtilsTest._decorated_function_called_count)
+
+ class _MethodDecoratorTestObject(object):
+ """ An object suitable for testing the
+ WithTimeoutAndRetriesFromInstance method decorator.
+ """
+
+ def __init__(self, test_case, default_timeout=device_utils._DEFAULT_TIMEOUT,
+ default_retries=device_utils._DEFAULT_RETRIES):
+ self._test_case = test_case
+ self._default_timeout = default_timeout
+ self._default_retries = default_retries
+ self.function_call_counters = {
+ 'alwaysRaisesCommandFailedError': 0,
+ 'alwaysTimesOut': 0,
+ }
+
+ # pylint: disable=R0201
+
+ @device_utils.WithTimeoutAndRetriesFromInstance
+ def alwaysReturnTimeoutVal(self, timeout=None, retries=None):
+ return timeout
+
+ @device_utils.WithTimeoutAndRetriesFromInstance
+ def alwaysReturnRetriesVal(self, timeout=None, retries=None):
+ return retries
+
+ # pylint: enable=R0201
+
+ @device_utils.WithTimeoutAndRetriesFromInstance
+ def alwaysTimesOut(self, timeout=None, retries=None):
+ self.function_call_counters['alwaysTimesOut'] += 1
+ time.sleep(100 * timeout)
+ self._test_case.assertFalse(True, msg='Failed to time out?')
+
+ @device_utils.WithTimeoutAndRetriesFromInstance
+ def alwaysRaisesCommandFailedError(self, timeout=None, retries=None):
+ self.function_call_counters['alwaysRaisesCommandFailedError'] += 1
+ raise adb_wrapper.CommandFailedError(['testCommand'],
+ 'testCommand failed')
+
+ def testMethodDecoratorSetsTimeout(self):
+ """ Tests that the WithTimeoutAndRetriesFromInstance decorator sets
+ |timeout| appropriately.
+ """
+ expected_default_timeout = 37
+ expected_custom_timeout = 38
+ test_obj = self._MethodDecoratorTestObject(
+ self, default_timeout=expected_default_timeout)
+ self.assertEquals(
+ expected_default_timeout, test_obj.alwaysReturnTimeoutVal())
+ self.assertEquals(
+ expected_custom_timeout,
+ test_obj.alwaysReturnTimeoutVal(timeout=expected_custom_timeout))
+
+ def testMethodDecoratorSetsRetries(self):
+ """ Tests that the WithTimeoutAndRetriesFromInstance decorator sets
+ |retries| appropriately.
+ """
+ expected_default_retries = 5
+ expected_custom_retries = 6
+ test_obj = self._MethodDecoratorTestObject(
+ self, default_retries=expected_default_retries)
+ self.assertEquals(
+ expected_default_retries, test_obj.alwaysReturnRetriesVal())
+ self.assertEquals(
+ expected_custom_retries,
+ test_obj.alwaysReturnRetriesVal(retries=expected_custom_retries))
+
+ def testMethodDecoratorDoesTimeout(self):
+ """ Tests that the WithTimeoutAndRetriesFromInstance decorator handles
+ the timeout logic.
+ """
+ test_obj = self._MethodDecoratorTestObject(self)
+ start_time = time.time()
+ with self.assertRaises(adb_wrapper.CommandTimeoutError):
+ test_obj.alwaysTimesOut(timeout=1, retries=0)
+ elapsed_time = time.time() - start_time
+ self.assertTrue(elapsed_time >= 1)
+ self.assertEquals(1, test_obj.function_call_counters['alwaysTimesOut'])
+
+ def testMethodDecoratorDoesRetries(self):
+ """ Tests that the WithTimeoutAndRetriesFromInstance decorator handles
+ the retries logic.
+ """
+ test_obj = self._MethodDecoratorTestObject(self)
+ with self.assertRaises(adb_wrapper.CommandFailedError):
+ test_obj.alwaysRaisesCommandFailedError(retries=10)
+ self.assertEquals(
+ 11, test_obj.function_call_counters['alwaysRaisesCommandFailedError'])
+
+
+if __name__ == '__main__':
+ unittest.main()
+

Powered by Google App Engine
This is Rietveld 408576698