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

Side by Side Diff: build/android/pylib/device/device_utils_test.py

Issue 292313015: [Android] Switch to DeviceUtils versions of Reboot and Install. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 6 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 unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 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 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """ 5 """
6 Unit tests for the contents of device_utils.py (mostly DeviceUtils). 6 Unit tests for the contents of device_utils.py (mostly DeviceUtils).
7 """ 7 """
8 8
9 # pylint: disable=W0212 9 # pylint: disable=W0212
10 # pylint: disable=W0613 10 # pylint: disable=W0613
11 11
12 import functools
12 import random 13 import random
13 import time 14 import time
14 import unittest 15 import unittest
15 16
16 from pylib import android_commands 17 from pylib import android_commands
17 from pylib import cmd_helper 18 from pylib import cmd_helper
18 from pylib.device import adb_wrapper 19 from pylib.device import adb_wrapper
19 from pylib.device import device_errors 20 from pylib.device import device_errors
20 from pylib.device import device_utils 21 from pylib.device import device_utils
21 22
22 23
24 def TestRequiresDevice(f):
25 @functools.wraps(f)
26 def wrapper(*args, **kwargs):
27 if len(adb_wrapper.AdbWrapper.GetDevices()) > 0:
28 return f(*args, **kwargs)
29 return unittest.skip('Test requires an attached device.')
30 return wrapper
31
32
23 class DeviceUtilsTest(unittest.TestCase): 33 class DeviceUtilsTest(unittest.TestCase):
24 def testGetAVDs(self): 34 def testGetAVDs(self):
25 pass 35 pass
26 36
37 @TestRequiresDevice
27 def testRestartServerNotRunning(self): 38 def testRestartServerNotRunning(self):
28 self.assertEqual(0, cmd_helper.RunCmd(['pkill', 'adb']), 39 self.assertEqual(0, cmd_helper.RunCmd(['pkill', 'adb']),
29 msg='Unable to kill adb during setup.') 40 msg='Unable to kill adb during setup.')
30 self.assertNotEqual(0, cmd_helper.RunCmd(['pgrep', 'adb']), 41 self.assertNotEqual(0, cmd_helper.RunCmd(['pgrep', 'adb']),
31 msg='Unexpectedly found adb during setup.') 42 msg='Unexpectedly found adb during setup.')
32 device_utils.RestartServer() 43 device_utils.RestartServer()
33 self.assertEqual(0, cmd_helper.RunCmd(['pgrep', 'adb'])) 44 self.assertEqual(0, cmd_helper.RunCmd(['pgrep', 'adb']))
34 45
46 @TestRequiresDevice
35 def testRestartServerAlreadyRunning(self): 47 def testRestartServerAlreadyRunning(self):
36 if cmd_helper.RunCmd(['pgrep', 'adb']) != 0: 48 if cmd_helper.RunCmd(['pgrep', 'adb']) != 0:
37 device_utils.RestartServer() 49 device_utils.RestartServer()
38 code, original_pid = cmd_helper.GetCmdStatusAndOutput(['pgrep', 'adb']) 50 code, original_pid = cmd_helper.GetCmdStatusAndOutput(['pgrep', 'adb'])
39 self.assertEqual(0, code) 51 self.assertEqual(0, code)
40 device_utils.RestartServer() 52 device_utils.RestartServer()
41 code, new_pid = cmd_helper.GetCmdStatusAndOutput(['pgrep', 'adb']) 53 code, new_pid = cmd_helper.GetCmdStatusAndOutput(['pgrep', 'adb'])
42 self.assertEqual(0, code) 54 self.assertEqual(0, code)
43 self.assertNotEqual(original_pid, new_pid) 55 self.assertNotEqual(original_pid, new_pid)
44 56
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 @staticmethod 94 @staticmethod
83 def _getUnusedSerial(): 95 def _getUnusedSerial():
84 used_devices = [str(d) for d in adb_wrapper.AdbWrapper.GetDevices()] 96 used_devices = [str(d) for d in adb_wrapper.AdbWrapper.GetDevices()]
85 while True: 97 while True:
86 serial = '' 98 serial = ''
87 for _ in xrange(0, 16): 99 for _ in xrange(0, 16):
88 serial += random.choice('0123456789abcdef') 100 serial += random.choice('0123456789abcdef')
89 if serial not in used_devices: 101 if serial not in used_devices:
90 return serial 102 return serial
91 103
104 @TestRequiresDevice
92 def testIsOnline(self): 105 def testIsOnline(self):
93 d = device_utils.DeviceUtils(self._getTestAdbWrapper()) 106 d = device_utils.DeviceUtils(self._getTestAdbWrapper())
94 self.assertTrue(d is None or d.IsOnline()) 107 self.assertTrue(d is None or d.IsOnline())
95 d = device_utils.DeviceUtils(self._getUnusedSerial()) 108 d = device_utils.DeviceUtils(self._getUnusedSerial())
96 self.assertFalse(d.IsOnline()) 109 self.assertFalse(d.IsOnline())
97 110
111 @TestRequiresDevice
98 def testHasRoot(self): 112 def testHasRoot(self):
99 a = self._getTestAdbWrapper() 113 a = self._getTestAdbWrapper()
100 d = device_utils.DeviceUtils(a) 114 d = device_utils.DeviceUtils(a)
101 secure_prop = a.Shell('getprop ro.secure').strip() 115 secure_prop = a.Shell('getprop ro.secure').strip()
102 if secure_prop == '1': 116 if secure_prop == '1':
103 build_type_prop = a.Shell('getprop ro.build.type').strip() 117 build_type_prop = a.Shell('getprop ro.build.type').strip()
104 if build_type_prop == 'userdebug': 118 if build_type_prop == 'userdebug':
105 adb_root_prop = a.Shell('getprop service.adb.root').strip() 119 adb_root_prop = a.Shell('getprop service.adb.root').strip()
106 if adb_root_prop is None or adb_root_prop == '0': 120 if adb_root_prop is None or adb_root_prop == '0':
107 self.assertFalse(d.HasRoot()) 121 self.assertFalse(d.HasRoot())
108 else: 122 else:
109 self.assertTrue(d.HasRoot()) 123 self.assertTrue(d.HasRoot())
110 else: 124 else:
111 self.assertFalse(d.HasRoot()) 125 self.assertFalse(d.HasRoot())
112 else: 126 else:
113 self.assertTrue(d.HasRoot()) 127 self.assertTrue(d.HasRoot())
114 128
129 @TestRequiresDevice
115 def testEnableRoot(self): 130 def testEnableRoot(self):
116 a = self._getTestAdbWrapper() 131 a = self._getTestAdbWrapper()
117 d = device_utils.DeviceUtils(a) 132 d = device_utils.DeviceUtils(a)
118 133
119 secure_prop = a.Shell('getprop ro.secure').strip() 134 secure_prop = a.Shell('getprop ro.secure').strip()
120 if secure_prop == '1': 135 if secure_prop == '1':
121 build_type_prop = a.Shell('getprop ro.build.type').strip() 136 build_type_prop = a.Shell('getprop ro.build.type').strip()
122 if build_type_prop == 'userdebug': 137 if build_type_prop == 'userdebug':
123 # Turn off the adb root property 138 # Turn off the adb root property
124 adb_root_prop = a.Shell('getprop service.adb.root').strip() 139 adb_root_prop = a.Shell('getprop service.adb.root').strip()
(...skipping 16 matching lines...) Expand all
141 self.assertTrue(d.HasRoot()) 156 self.assertTrue(d.HasRoot())
142 else: 157 else:
143 self.assertFalse(d.HasRoot()) 158 self.assertFalse(d.HasRoot())
144 with self.assertRaises(device_errors.CommandFailedError): 159 with self.assertRaises(device_errors.CommandFailedError):
145 d.EnableRoot() 160 d.EnableRoot()
146 else: 161 else:
147 self.assertTrue(d.HasRoot()) 162 self.assertTrue(d.HasRoot())
148 d.EnableRoot() 163 d.EnableRoot()
149 self.assertTrue(d.HasRoot()) 164 self.assertTrue(d.HasRoot())
150 165
166 @TestRequiresDevice
151 def testGetExternalStorage(self): 167 def testGetExternalStorage(self):
152 a = self._getTestAdbWrapper() 168 a = self._getTestAdbWrapper()
153 d = device_utils.DeviceUtils(a) 169 d = device_utils.DeviceUtils(a)
154 170
155 actual_external_storage = a.Shell('echo $EXTERNAL_STORAGE').splitlines()[0] 171 actual_external_storage = a.Shell('echo $EXTERNAL_STORAGE').splitlines()[0]
156 if actual_external_storage and len(actual_external_storage) != 0: 172 if actual_external_storage and len(actual_external_storage) != 0:
157 self.assertEquals(actual_external_storage, d.GetExternalStoragePath()) 173 self.assertEquals(actual_external_storage, d.GetExternalStoragePath())
158 174
175 @TestRequiresDevice
159 def testWaitUntilFullyBooted(self): 176 def testWaitUntilFullyBooted(self):
160 a = self._getTestAdbWrapper() 177 a = self._getTestAdbWrapper()
161 d = device_utils.DeviceUtils(a) 178 d = device_utils.DeviceUtils(a)
162 179
163 a.Reboot() 180 a.Reboot()
164 while a.GetState() == 'device': 181 while a.GetState() == 'device':
165 time.sleep(0.1) 182 time.sleep(0.1)
166 d.WaitUntilFullyBooted(wifi=True) 183 d.WaitUntilFullyBooted(wifi=True)
167 self.assertEquals( 184 self.assertEquals(
168 '1', a.Shell('getprop sys.boot_completed').splitlines()[0]) 185 '1', a.Shell('getprop sys.boot_completed').splitlines()[0])
169 self.assertTrue( 186 self.assertTrue(
170 a.Shell('pm path android').splitlines()[0].startswith('package:')) 187 a.Shell('pm path android').splitlines()[0].startswith('package:'))
171 self.assertTrue(a.Shell('ls $EXTERNAL_STORAGE')) 188 self.assertTrue(a.Shell('ls $EXTERNAL_STORAGE'))
172 self.assertTrue( 189 self.assertTrue(
173 'Wi-Fi is enabled' in a.Shell('dumpsys wifi').splitlines()) 190 'Wi-Fi is enabled' in a.Shell('dumpsys wifi').splitlines())
174 191
192 @TestRequiresDevice
193 def testBlockingReboot(self):
194 a = self._getTestAdbWrapper()
195 d = device_utils.DeviceUtils(a)
196
197 old_boot_time = a.Shell('getprop ro.runtime.firstboot').strip()
198 if old_boot_time and len(old_boot_time):
199 d.Reboot(block=True, timeout=120)
200 self.assertNotEquals(old_boot_time,
201 a.Shell('getprop ro.runtime.firstboot').strip())
202 self.assertEquals(
203 '1', a.Shell('getprop sys.boot_completed').splitlines()[0])
204 self.assertTrue(
205 a.Shell('pm path android').splitlines()[0].startswith('package:'))
206 self.assertTrue(a.Shell('ls $EXTERNAL_STORAGE'))
207 else:
208 self.skipTest("No 'ro.runtime.firstboot' property on %s." % str(a))
209
175 210
176 if __name__ == '__main__': 211 if __name__ == '__main__':
177 unittest.main(verbosity=2, buffer=True) 212 unittest.main(verbosity=2)
178 213
OLDNEW
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/gtest/test_package_apk.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698