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

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

Issue 951673002: Revert "Pull chromium at 2c3ffb2355a27c32f45e508ef861416b820c823b" (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ 6 """
7 Unit tests for the contents of device_utils.py (mostly DeviceUtils). 7 Unit tests for the contents of device_utils.py (mostly DeviceUtils).
8 """ 8 """
9 9
10 # pylint: disable=C0321 10 # pylint: disable=C0321
(...skipping 21 matching lines...) Expand all
32 # RunCommand from third_party/android_testrunner/run_command.py is mocked 32 # RunCommand from third_party/android_testrunner/run_command.py is mocked
33 # below, so its path needs to be in sys.path. 33 # below, so its path needs to be in sys.path.
34 sys.path.append(os.path.join( 34 sys.path.append(os.path.join(
35 constants.DIR_SOURCE_ROOT, 'third_party', 'android_testrunner')) 35 constants.DIR_SOURCE_ROOT, 'third_party', 'android_testrunner'))
36 36
37 sys.path.append(os.path.join( 37 sys.path.append(os.path.join(
38 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock')) 38 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock'))
39 import mock # pylint: disable=F0401 39 import mock # pylint: disable=F0401
40 40
41 41
42 class DeviceUtilsInitTest(unittest.TestCase): 42 class DeviceUtilsTest(unittest.TestCase):
43 43
44 def testInitWithStr(self): 44 def testInitWithStr(self):
45 serial_as_str = str('0123456789abcdef') 45 serial_as_str = str('0123456789abcdef')
46 d = device_utils.DeviceUtils('0123456789abcdef') 46 d = device_utils.DeviceUtils('0123456789abcdef')
47 self.assertEqual(serial_as_str, d.adb.GetDeviceSerial()) 47 self.assertEqual(serial_as_str, d.adb.GetDeviceSerial())
48 48
49 def testInitWithUnicode(self): 49 def testInitWithUnicode(self):
50 serial_as_unicode = unicode('fedcba9876543210') 50 serial_as_unicode = unicode('fedcba9876543210')
51 d = device_utils.DeviceUtils(serial_as_unicode) 51 d = device_utils.DeviceUtils(serial_as_unicode)
52 self.assertEqual(serial_as_unicode, d.adb.GetDeviceSerial()) 52 self.assertEqual(serial_as_unicode, d.adb.GetDeviceSerial())
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 def __exit__(self, exc_type, exc_val, exc_tb): 114 def __exit__(self, exc_type, exc_val, exc_tb):
115 pass 115 pass
116 116
117 117
118 class _PatchedFunction(object): 118 class _PatchedFunction(object):
119 def __init__(self, patched=None, mocked=None): 119 def __init__(self, patched=None, mocked=None):
120 self.patched = patched 120 self.patched = patched
121 self.mocked = mocked 121 self.mocked = mocked
122 122
123 123
124 class DeviceUtilsOldImplTest(unittest.TestCase):
125
126 class AndroidCommandsCalls(object):
127
128 def __init__(self, test_case, cmd_ret, comp):
129 self._cmds = cmd_ret
130 self._comp = comp
131 self._run_command = _PatchedFunction()
132 self._test_case = test_case
133 self._total_received = 0
134
135 def __enter__(self):
136 self._run_command.patched = mock.patch(
137 'run_command.RunCommand',
138 side_effect=lambda c, **kw: self._ret(c))
139 self._run_command.mocked = self._run_command.patched.__enter__()
140
141 def _ret(self, actual_cmd):
142 if sys.exc_info()[0] is None:
143 on_failure_fmt = ('\n'
144 ' received command: %s\n'
145 ' expected command: %s')
146 self._test_case.assertGreater(
147 len(self._cmds), self._total_received,
148 msg=on_failure_fmt % (actual_cmd, None))
149 expected_cmd, ret = self._cmds[self._total_received]
150 self._total_received += 1
151 self._test_case.assertTrue(
152 self._comp(expected_cmd, actual_cmd),
153 msg=on_failure_fmt % (actual_cmd, expected_cmd))
154 return ret
155 return ''
156
157 def __exit__(self, exc_type, exc_val, exc_tb):
158 self._run_command.patched.__exit__(exc_type, exc_val, exc_tb)
159 if exc_type is None:
160 on_failure = "adb commands don't match.\nExpected:%s\nActual:%s" % (
161 ''.join('\n %s' % c for c, _ in self._cmds),
162 ''.join('\n %s' % a[0]
163 for _, a, kw in self._run_command.mocked.mock_calls))
164 self._test_case.assertEqual(
165 len(self._cmds), len(self._run_command.mocked.mock_calls),
166 msg=on_failure)
167 for (expected_cmd, _r), (_n, actual_args, actual_kwargs) in zip(
168 self._cmds, self._run_command.mocked.mock_calls):
169 self._test_case.assertEqual(1, len(actual_args), msg=on_failure)
170 self._test_case.assertTrue(self._comp(expected_cmd, actual_args[0]),
171 msg=on_failure)
172 self._test_case.assertTrue('timeout_time' in actual_kwargs,
173 msg=on_failure)
174 self._test_case.assertTrue('retry_count' in actual_kwargs,
175 msg=on_failure)
176
177 def assertNoAdbCalls(self):
178 return type(self).AndroidCommandsCalls(self, [], str.__eq__)
179
180 def assertCalls(self, cmd, ret, comp=str.__eq__):
181 return type(self).AndroidCommandsCalls(self, [(cmd, ret)], comp)
182
183 def assertCallsSequence(self, cmd_ret, comp=str.__eq__):
184 return type(self).AndroidCommandsCalls(self, cmd_ret, comp)
185
186 def setUp(self):
187 self._get_adb_path_patch = mock.patch('pylib.constants.GetAdbPath',
188 mock.Mock(return_value='adb'))
189 self._get_adb_path_patch.start()
190 self.device = device_utils.DeviceUtils(
191 '0123456789abcdef', default_timeout=1, default_retries=0)
192
193 def tearDown(self):
194 self._get_adb_path_patch.stop()
195
196
124 def _AdbWrapperMock(test_serial): 197 def _AdbWrapperMock(test_serial):
125 adb = mock.Mock(spec=adb_wrapper.AdbWrapper) 198 adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
126 adb.__str__ = mock.Mock(return_value=test_serial) 199 adb.__str__ = mock.Mock(return_value=test_serial)
127 adb.GetDeviceSerial.return_value = test_serial 200 adb.GetDeviceSerial.return_value = test_serial
128 return adb 201 return adb
129 202
130 203
131 class DeviceUtilsTest(mock_calls.TestCase): 204 class DeviceUtilsNewImplTest(mock_calls.TestCase):
132 205
133 def setUp(self): 206 def setUp(self):
134 self.adb = _AdbWrapperMock('0123456789abcdef') 207 self.adb = _AdbWrapperMock('0123456789abcdef')
135 self.device = device_utils.DeviceUtils( 208 self.device = device_utils.DeviceUtils(
136 self.adb, default_timeout=10, default_retries=0) 209 self.adb, default_timeout=10, default_retries=0)
137 self.watchMethodCalls(self.call.adb, ignore=['GetDeviceSerial']) 210 self.watchMethodCalls(self.call.adb, ignore=['GetDeviceSerial'])
138 211
139 def ShellError(self, output=None, status=1): 212 def ShellError(self, output=None, status=1):
140 def action(cmd, *args, **kwargs): 213 def action(cmd, *args, **kwargs):
141 raise device_errors.AdbShellCommandFailedError( 214 raise device_errors.AdbShellCommandFailedError(
142 cmd, output, status, str(self.device)) 215 cmd, output, status, str(self.device))
143 if output is None: 216 if output is None:
144 output = 'Permission denied\n' 217 output = 'Permission denied\n'
145 return action 218 return action
146 219
147 def TimeoutError(self, msg=None): 220 def TimeoutError(self, msg=None):
148 if msg is None: 221 if msg is None:
149 msg = 'Operation timed out' 222 msg = 'Operation timed out'
150 return mock.Mock(side_effect=device_errors.CommandTimeoutError( 223 return mock.Mock(side_effect=device_errors.CommandTimeoutError(
151 msg, str(self.device))) 224 msg, str(self.device)))
152 225
153 def CommandError(self, msg=None): 226 def CommandError(self, msg=None):
154 if msg is None: 227 if msg is None:
155 msg = 'Command failed' 228 msg = 'Command failed'
156 return mock.Mock(side_effect=device_errors.CommandFailedError( 229 return mock.Mock(side_effect=device_errors.CommandFailedError(
157 msg, str(self.device))) 230 msg, str(self.device)))
158 231
159 232
160 class DeviceUtilsIsOnlineTest(DeviceUtilsTest): 233 class DeviceUtilsIsOnlineTest(DeviceUtilsNewImplTest):
161 234
162 def testIsOnline_true(self): 235 def testIsOnline_true(self):
163 with self.assertCall(self.call.adb.GetState(), 'device'): 236 with self.assertCall(self.call.adb.GetState(), 'device'):
164 self.assertTrue(self.device.IsOnline()) 237 self.assertTrue(self.device.IsOnline())
165 238
166 def testIsOnline_false(self): 239 def testIsOnline_false(self):
167 with self.assertCall(self.call.adb.GetState(), 'offline'): 240 with self.assertCall(self.call.adb.GetState(), 'offline'):
168 self.assertFalse(self.device.IsOnline()) 241 self.assertFalse(self.device.IsOnline())
169 242
170 def testIsOnline_error(self): 243 def testIsOnline_error(self):
171 with self.assertCall(self.call.adb.GetState(), self.CommandError()): 244 with self.assertCall(self.call.adb.GetState(), self.CommandError()):
172 self.assertFalse(self.device.IsOnline()) 245 self.assertFalse(self.device.IsOnline())
173 246
174 247
175 class DeviceUtilsHasRootTest(DeviceUtilsTest): 248 class DeviceUtilsHasRootTest(DeviceUtilsNewImplTest):
176 249
177 def testHasRoot_true(self): 250 def testHasRoot_true(self):
178 with self.assertCall(self.call.adb.Shell('ls /root'), 'foo\n'): 251 with self.assertCall(self.call.adb.Shell('ls /root'), 'foo\n'):
179 self.assertTrue(self.device.HasRoot()) 252 self.assertTrue(self.device.HasRoot())
180 253
181 def testHasRoot_false(self): 254 def testHasRoot_false(self):
182 with self.assertCall(self.call.adb.Shell('ls /root'), self.ShellError()): 255 with self.assertCall(self.call.adb.Shell('ls /root'), self.ShellError()):
183 self.assertFalse(self.device.HasRoot()) 256 self.assertFalse(self.device.HasRoot())
184 257
185 258
186 class DeviceUtilsEnableRootTest(DeviceUtilsTest): 259 class DeviceUtilsEnableRootTest(DeviceUtilsNewImplTest):
187 260
188 def testEnableRoot_succeeds(self): 261 def testEnableRoot_succeeds(self):
189 with self.assertCalls( 262 with self.assertCalls(
190 (self.call.device.IsUserBuild(), False), 263 (self.call.device.IsUserBuild(), False),
191 self.call.adb.Root(), 264 self.call.adb.Root(),
192 self.call.adb.WaitForDevice()): 265 self.call.adb.WaitForDevice()):
193 self.device.EnableRoot() 266 self.device.EnableRoot()
194 267
195 def testEnableRoot_userBuild(self): 268 def testEnableRoot_userBuild(self):
196 with self.assertCalls( 269 with self.assertCalls(
197 (self.call.device.IsUserBuild(), True)): 270 (self.call.device.IsUserBuild(), True)):
198 with self.assertRaises(device_errors.CommandFailedError): 271 with self.assertRaises(device_errors.CommandFailedError):
199 self.device.EnableRoot() 272 self.device.EnableRoot()
200 273
201 def testEnableRoot_rootFails(self): 274 def testEnableRoot_rootFails(self):
202 with self.assertCalls( 275 with self.assertCalls(
203 (self.call.device.IsUserBuild(), False), 276 (self.call.device.IsUserBuild(), False),
204 (self.call.adb.Root(), self.CommandError())): 277 (self.call.adb.Root(), self.CommandError())):
205 with self.assertRaises(device_errors.CommandFailedError): 278 with self.assertRaises(device_errors.CommandFailedError):
206 self.device.EnableRoot() 279 self.device.EnableRoot()
207 280
208 281
209 class DeviceUtilsIsUserBuildTest(DeviceUtilsTest): 282 class DeviceUtilsIsUserBuildTest(DeviceUtilsNewImplTest):
210 283
211 def testIsUserBuild_yes(self): 284 def testIsUserBuild_yes(self):
212 with self.assertCall( 285 with self.assertCall(
213 self.call.device.GetProp('ro.build.type', cache=True), 'user'): 286 self.call.device.GetProp('ro.build.type', cache=True), 'user'):
214 self.assertTrue(self.device.IsUserBuild()) 287 self.assertTrue(self.device.IsUserBuild())
215 288
216 def testIsUserBuild_no(self): 289 def testIsUserBuild_no(self):
217 with self.assertCall( 290 with self.assertCall(
218 self.call.device.GetProp('ro.build.type', cache=True), 'userdebug'): 291 self.call.device.GetProp('ro.build.type', cache=True), 'userdebug'):
219 self.assertFalse(self.device.IsUserBuild()) 292 self.assertFalse(self.device.IsUserBuild())
220 293
221 294
222 class DeviceUtilsGetExternalStoragePathTest(DeviceUtilsTest): 295 class DeviceUtilsGetExternalStoragePathTest(DeviceUtilsNewImplTest):
223 296
224 def testGetExternalStoragePath_succeeds(self): 297 def testGetExternalStoragePath_succeeds(self):
225 with self.assertCall( 298 with self.assertCall(
226 self.call.adb.Shell('echo $EXTERNAL_STORAGE'), '/fake/storage/path\n'): 299 self.call.adb.Shell('echo $EXTERNAL_STORAGE'), '/fake/storage/path\n'):
227 self.assertEquals('/fake/storage/path', 300 self.assertEquals('/fake/storage/path',
228 self.device.GetExternalStoragePath()) 301 self.device.GetExternalStoragePath())
229 302
230 def testGetExternalStoragePath_fails(self): 303 def testGetExternalStoragePath_fails(self):
231 with self.assertCall(self.call.adb.Shell('echo $EXTERNAL_STORAGE'), '\n'): 304 with self.assertCall(self.call.adb.Shell('echo $EXTERNAL_STORAGE'), '\n'):
232 with self.assertRaises(device_errors.CommandFailedError): 305 with self.assertRaises(device_errors.CommandFailedError):
233 self.device.GetExternalStoragePath() 306 self.device.GetExternalStoragePath()
234 307
235 308
236 class DeviceUtilsGetApplicationPathTest(DeviceUtilsTest): 309 class DeviceUtilsGetApplicationPathTest(DeviceUtilsNewImplTest):
237 310
238 def testGetApplicationPath_exists(self): 311 def testGetApplicationPath_exists(self):
239 with self.assertCalls( 312 with self.assertCalls(
240 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'), 313 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'),
241 (self.call.adb.Shell('pm path android'), 314 (self.call.adb.Shell('pm path android'),
242 'package:/path/to/android.apk\n')): 315 'package:/path/to/android.apk\n')):
243 self.assertEquals('/path/to/android.apk', 316 self.assertEquals('/path/to/android.apk',
244 self.device.GetApplicationPath('android')) 317 self.device.GetApplicationPath('android'))
245 318
246 def testGetApplicationPath_notExists(self): 319 def testGetApplicationPath_notExists(self):
247 with self.assertCalls( 320 with self.assertCalls(
248 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'), 321 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'),
249 (self.call.adb.Shell('pm path not.installed.app'), '')): 322 (self.call.adb.Shell('pm path not.installed.app'), '')):
250 self.assertEquals(None, 323 self.assertEquals(None,
251 self.device.GetApplicationPath('not.installed.app')) 324 self.device.GetApplicationPath('not.installed.app'))
252 325
253 def testGetApplicationPath_fails(self): 326 def testGetApplicationPath_fails(self):
254 with self.assertCalls( 327 with self.assertCalls(
255 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'), 328 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'),
256 (self.call.adb.Shell('pm path android'), 329 (self.call.adb.Shell('pm path android'),
257 self.CommandError('ERROR. Is package manager running?\n'))): 330 self.CommandError('ERROR. Is package manager running?\n'))):
258 with self.assertRaises(device_errors.CommandFailedError): 331 with self.assertRaises(device_errors.CommandFailedError):
259 self.device.GetApplicationPath('android') 332 self.device.GetApplicationPath('android')
260 333
261 334
262 @mock.patch('time.sleep', mock.Mock()) 335 @mock.patch('time.sleep', mock.Mock())
263 class DeviceUtilsWaitUntilFullyBootedTest(DeviceUtilsTest): 336 class DeviceUtilsWaitUntilFullyBootedTest(DeviceUtilsNewImplTest):
264 337
265 def testWaitUntilFullyBooted_succeedsNoWifi(self): 338 def testWaitUntilFullyBooted_succeedsNoWifi(self):
266 with self.assertCalls( 339 with self.assertCalls(
267 self.call.adb.WaitForDevice(), 340 self.call.adb.WaitForDevice(),
268 # sd_card_ready 341 # sd_card_ready
269 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'), 342 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
270 (self.call.adb.Shell('test -d /fake/storage/path'), ''), 343 (self.call.adb.Shell('test -d /fake/storage/path'), ''),
271 # pm_ready 344 # pm_ready
272 (self.call.device.GetApplicationPath('android'), 345 (self.call.device.GetApplicationPath('android'),
273 'package:/some/fake/path'), 346 'package:/some/fake/path'),
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'), 436 (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'),
364 # wifi_enabled 437 # wifi_enabled
365 (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'), 438 (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'),
366 # wifi_enabled 439 # wifi_enabled
367 (self.call.adb.Shell('dumpsys wifi'), self.TimeoutError())): 440 (self.call.adb.Shell('dumpsys wifi'), self.TimeoutError())):
368 with self.assertRaises(device_errors.CommandTimeoutError): 441 with self.assertRaises(device_errors.CommandTimeoutError):
369 self.device.WaitUntilFullyBooted(wifi=True) 442 self.device.WaitUntilFullyBooted(wifi=True)
370 443
371 444
372 @mock.patch('time.sleep', mock.Mock()) 445 @mock.patch('time.sleep', mock.Mock())
373 class DeviceUtilsRebootTest(DeviceUtilsTest): 446 class DeviceUtilsRebootTest(DeviceUtilsNewImplTest):
374 447
375 def testReboot_nonBlocking(self): 448 def testReboot_nonBlocking(self):
376 with self.assertCalls( 449 with self.assertCalls(
377 self.call.adb.Reboot(), 450 self.call.adb.Reboot(),
378 (self.call.device.IsOnline(), True), 451 (self.call.device.IsOnline(), True),
379 (self.call.device.IsOnline(), False)): 452 (self.call.device.IsOnline(), False)):
380 self.device.Reboot(block=False) 453 self.device.Reboot(block=False)
381 454
382 def testReboot_blocking(self): 455 def testReboot_blocking(self):
383 with self.assertCalls( 456 with self.assertCalls(
384 self.call.adb.Reboot(), 457 self.call.adb.Reboot(),
385 (self.call.device.IsOnline(), True), 458 (self.call.device.IsOnline(), True),
386 (self.call.device.IsOnline(), False), 459 (self.call.device.IsOnline(), False),
387 self.call.device.WaitUntilFullyBooted(wifi=False)): 460 self.call.device.WaitUntilFullyBooted(wifi=False)):
388 self.device.Reboot(block=True) 461 self.device.Reboot(block=True)
389 462
390 def testReboot_blockUntilWifi(self): 463 def testReboot_blockUntilWifi(self):
391 with self.assertCalls( 464 with self.assertCalls(
392 self.call.adb.Reboot(), 465 self.call.adb.Reboot(),
393 (self.call.device.IsOnline(), True), 466 (self.call.device.IsOnline(), True),
394 (self.call.device.IsOnline(), False), 467 (self.call.device.IsOnline(), False),
395 self.call.device.WaitUntilFullyBooted(wifi=True)): 468 self.call.device.WaitUntilFullyBooted(wifi=True)):
396 self.device.Reboot(block=True, wifi=True) 469 self.device.Reboot(block=True, wifi=True)
397 470
398 471
399 class DeviceUtilsInstallTest(DeviceUtilsTest): 472 class DeviceUtilsInstallTest(DeviceUtilsNewImplTest):
400 473
401 def testInstall_noPriorInstall(self): 474 def testInstall_noPriorInstall(self):
402 with self.assertCalls( 475 with self.assertCalls(
403 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'), 476 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'),
404 'this.is.a.test.package'), 477 'this.is.a.test.package'),
405 (self.call.device.GetApplicationPath('this.is.a.test.package'), None), 478 (self.call.device.GetApplicationPath('this.is.a.test.package'), None),
406 self.call.adb.Install('/fake/test/app.apk', reinstall=False)): 479 self.call.adb.Install('/fake/test/app.apk', reinstall=False)):
407 self.device.Install('/fake/test/app.apk', retries=0) 480 self.device.Install('/fake/test/app.apk', retries=0)
408 481
409 def testInstall_differentPriorInstall(self): 482 def testInstall_differentPriorInstall(self):
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 with self.assertCalls( 519 with self.assertCalls(
447 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'), 520 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'),
448 'this.is.a.test.package'), 521 'this.is.a.test.package'),
449 (self.call.device.GetApplicationPath('this.is.a.test.package'), None), 522 (self.call.device.GetApplicationPath('this.is.a.test.package'), None),
450 (self.call.adb.Install('/fake/test/app.apk', reinstall=False), 523 (self.call.adb.Install('/fake/test/app.apk', reinstall=False),
451 self.CommandError('Failure\r\n'))): 524 self.CommandError('Failure\r\n'))):
452 with self.assertRaises(device_errors.CommandFailedError): 525 with self.assertRaises(device_errors.CommandFailedError):
453 self.device.Install('/fake/test/app.apk', retries=0) 526 self.device.Install('/fake/test/app.apk', retries=0)
454 527
455 528
456 class DeviceUtilsRunShellCommandTest(DeviceUtilsTest): 529 class DeviceUtilsRunShellCommandTest(DeviceUtilsNewImplTest):
457 530
458 def setUp(self): 531 def setUp(self):
459 super(DeviceUtilsRunShellCommandTest, self).setUp() 532 super(DeviceUtilsRunShellCommandTest, self).setUp()
460 self.device.NeedsSU = mock.Mock(return_value=False) 533 self.device.NeedsSU = mock.Mock(return_value=False)
461 534
462 def testRunShellCommand_commandAsList(self): 535 def testRunShellCommand_commandAsList(self):
463 with self.assertCall(self.call.adb.Shell('pm list packages'), ''): 536 with self.assertCall(self.call.adb.Shell('pm list packages'), ''):
464 self.device.RunShellCommand(['pm', 'list', 'packages']) 537 self.device.RunShellCommand(['pm', 'list', 'packages'])
465 538
466 def testRunShellCommand_commandAsListQuoted(self): 539 def testRunShellCommand_commandAsListQuoted(self):
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 self.device.RunShellCommand(cmd, check_return=True) 649 self.device.RunShellCommand(cmd, check_return=True)
577 650
578 def testRunShellCommand_checkReturn_disabled(self): 651 def testRunShellCommand_checkReturn_disabled(self):
579 cmd = 'ls /root' 652 cmd = 'ls /root'
580 output = 'opendir failed, Permission denied\n' 653 output = 'opendir failed, Permission denied\n'
581 with self.assertCall(self.call.adb.Shell(cmd), self.ShellError(output)): 654 with self.assertCall(self.call.adb.Shell(cmd), self.ShellError(output)):
582 self.assertEquals([output.rstrip()], 655 self.assertEquals([output.rstrip()],
583 self.device.RunShellCommand(cmd, check_return=False)) 656 self.device.RunShellCommand(cmd, check_return=False))
584 657
585 658
586 class DeviceUtilsGetDevicePieWrapper(DeviceUtilsTest): 659 class DeviceUtilsGetDevicePieWrapper(DeviceUtilsNewImplTest):
587 660
588 def testGetDevicePieWrapper_jb(self): 661 def testGetDevicePieWrapper_jb(self):
589 with self.assertCall( 662 with self.assertCall(
590 self.call.device.build_version_sdk(), 663 self.call.device.build_version_sdk(),
591 constants.ANDROID_SDK_VERSION_CODES.JELLY_BEAN): 664 constants.ANDROID_SDK_VERSION_CODES.JELLY_BEAN):
592 self.assertEqual('', self.device.GetDevicePieWrapper()) 665 self.assertEqual('', self.device.GetDevicePieWrapper())
593 666
594 def testGetDevicePieWrapper_ics(self): 667 def testGetDevicePieWrapper_ics(self):
595 with self.assertCalls( 668 with self.assertCalls(
596 (self.call.device.build_version_sdk(), 669 (self.call.device.build_version_sdk(),
597 constants.ANDROID_SDK_VERSION_CODES.ICE_CREAM_SANDWICH), 670 constants.ANDROID_SDK_VERSION_CODES.ICE_CREAM_SANDWICH),
598 (mock.call.pylib.constants.GetOutDirectory(), '/foo/bar'), 671 (mock.call.pylib.constants.GetOutDirectory(), '/foo/bar'),
599 (mock.call.os.path.exists(mock.ANY), True), 672 (mock.call.os.path.exists(mock.ANY), True),
600 (self.call.adb.Push(mock.ANY, mock.ANY), '')): 673 (self.call.adb.Push(mock.ANY, mock.ANY), '')):
601 self.assertNotEqual('', self.device.GetDevicePieWrapper()) 674 self.assertNotEqual('', self.device.GetDevicePieWrapper())
602 675
603 676
604 @mock.patch('time.sleep', mock.Mock()) 677 @mock.patch('time.sleep', mock.Mock())
605 class DeviceUtilsKillAllTest(DeviceUtilsTest): 678 class DeviceUtilsKillAllTest(DeviceUtilsNewImplTest):
606 679
607 def testKillAll_noMatchingProcesses(self): 680 def testKillAll_noMatchingProcesses(self):
608 with self.assertCall(self.call.adb.Shell('ps'), 681 with self.assertCall(self.call.adb.Shell('ps'),
609 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'): 682 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'):
610 with self.assertRaises(device_errors.CommandFailedError): 683 with self.assertRaises(device_errors.CommandFailedError):
611 self.device.KillAll('test_process') 684 self.device.KillAll('test_process')
612 685
613 def testKillAll_nonblocking(self): 686 def testKillAll_nonblocking(self):
614 with self.assertCalls( 687 with self.assertCalls(
615 (self.call.adb.Shell('ps'), 688 (self.call.adb.Shell('ps'),
(...skipping 30 matching lines...) Expand all
646 def testKillAll_sigterm(self): 719 def testKillAll_sigterm(self):
647 with self.assertCalls( 720 with self.assertCalls(
648 (self.call.adb.Shell('ps'), 721 (self.call.adb.Shell('ps'),
649 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 722 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'
650 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'), 723 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'),
651 (self.call.adb.Shell('kill -15 1234'), '')): 724 (self.call.adb.Shell('kill -15 1234'), '')):
652 self.assertEquals(1, 725 self.assertEquals(1,
653 self.device.KillAll('some.process', signum=signal.SIGTERM)) 726 self.device.KillAll('some.process', signum=signal.SIGTERM))
654 727
655 728
656 class DeviceUtilsStartActivityTest(DeviceUtilsTest): 729 class DeviceUtilsStartActivityTest(DeviceUtilsNewImplTest):
657 730
658 def testStartActivity_actionOnly(self): 731 def testStartActivity_actionOnly(self):
659 test_intent = intent.Intent(action='android.intent.action.VIEW') 732 test_intent = intent.Intent(action='android.intent.action.VIEW')
660 with self.assertCall( 733 with self.assertCall(
661 self.call.adb.Shell('am start ' 734 self.call.adb.Shell('am start '
662 '-a android.intent.action.VIEW'), 735 '-a android.intent.action.VIEW'),
663 'Starting: Intent { act=android.intent.action.VIEW }'): 736 'Starting: Intent { act=android.intent.action.VIEW }'):
664 self.device.StartActivity(test_intent) 737 self.device.StartActivity(test_intent)
665 738
666 def testStartActivity_success(self): 739 def testStartActivity_success(self):
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 flags='0x10000000') 883 flags='0x10000000')
811 with self.assertCall( 884 with self.assertCall(
812 self.call.adb.Shell('am start ' 885 self.call.adb.Shell('am start '
813 '-a android.intent.action.VIEW ' 886 '-a android.intent.action.VIEW '
814 '-n this.is.a.test.package/.Main ' 887 '-n this.is.a.test.package/.Main '
815 '-f 0x10000000'), 888 '-f 0x10000000'),
816 'Starting: Intent { act=android.intent.action.VIEW }'): 889 'Starting: Intent { act=android.intent.action.VIEW }'):
817 self.device.StartActivity(test_intent) 890 self.device.StartActivity(test_intent)
818 891
819 892
820 class DeviceUtilsStartInstrumentationTest(DeviceUtilsTest): 893 class DeviceUtilsStartInstrumentationTest(DeviceUtilsNewImplTest):
821 894
822 def testStartInstrumentation_nothing(self): 895 def testStartInstrumentation_nothing(self):
823 with self.assertCalls( 896 with self.assertCalls(
824 self.call.device.RunShellCommand( 897 self.call.device.RunShellCommand(
825 ['am', 'instrument', 'test.package/.TestInstrumentation'], 898 ['am', 'instrument', 'test.package/.TestInstrumentation'],
826 check_return=True)): 899 check_return=True)):
827 self.device.StartInstrumentation( 900 self.device.StartInstrumentation(
828 'test.package/.TestInstrumentation', 901 'test.package/.TestInstrumentation',
829 finish=False, raw=False, extras=None) 902 finish=False, raw=False, extras=None)
830 903
(...skipping 21 matching lines...) Expand all
852 with self.assertCalls( 925 with self.assertCalls(
853 self.call.device.RunShellCommand( 926 self.call.device.RunShellCommand(
854 ['am', 'instrument', '-e', 'foo', 'Foo', '-e', 'bar', 'Bar', 927 ['am', 'instrument', '-e', 'foo', 'Foo', '-e', 'bar', 'Bar',
855 'test.package/.TestInstrumentation'], 928 'test.package/.TestInstrumentation'],
856 check_return=True)): 929 check_return=True)):
857 self.device.StartInstrumentation( 930 self.device.StartInstrumentation(
858 'test.package/.TestInstrumentation', 931 'test.package/.TestInstrumentation',
859 finish=False, raw=False, extras={'foo': 'Foo', 'bar': 'Bar'}) 932 finish=False, raw=False, extras={'foo': 'Foo', 'bar': 'Bar'})
860 933
861 934
862 class DeviceUtilsBroadcastIntentTest(DeviceUtilsTest): 935 class DeviceUtilsBroadcastIntentTest(DeviceUtilsNewImplTest):
863 936
864 def testBroadcastIntent_noExtras(self): 937 def testBroadcastIntent_noExtras(self):
865 test_intent = intent.Intent(action='test.package.with.an.INTENT') 938 test_intent = intent.Intent(action='test.package.with.an.INTENT')
866 with self.assertCall( 939 with self.assertCall(
867 self.call.adb.Shell('am broadcast -a test.package.with.an.INTENT'), 940 self.call.adb.Shell('am broadcast -a test.package.with.an.INTENT'),
868 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): 941 'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
869 self.device.BroadcastIntent(test_intent) 942 self.device.BroadcastIntent(test_intent)
870 943
871 def testBroadcastIntent_withExtra(self): 944 def testBroadcastIntent_withExtra(self):
872 test_intent = intent.Intent(action='test.package.with.an.INTENT', 945 test_intent = intent.Intent(action='test.package.with.an.INTENT',
873 extras={'foo': 'bar value'}) 946 extras={'foo': 'bar value'})
874 with self.assertCall( 947 with self.assertCall(
875 self.call.adb.Shell( 948 self.call.adb.Shell(
876 "am broadcast -a test.package.with.an.INTENT --es foo 'bar value'"), 949 "am broadcast -a test.package.with.an.INTENT --es foo 'bar value'"),
877 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): 950 'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
878 self.device.BroadcastIntent(test_intent) 951 self.device.BroadcastIntent(test_intent)
879 952
880 def testBroadcastIntent_withExtra_noValue(self): 953 def testBroadcastIntent_withExtra_noValue(self):
881 test_intent = intent.Intent(action='test.package.with.an.INTENT', 954 test_intent = intent.Intent(action='test.package.with.an.INTENT',
882 extras={'foo': None}) 955 extras={'foo': None})
883 with self.assertCall( 956 with self.assertCall(
884 self.call.adb.Shell( 957 self.call.adb.Shell(
885 'am broadcast -a test.package.with.an.INTENT --esn foo'), 958 'am broadcast -a test.package.with.an.INTENT --esn foo'),
886 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): 959 'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
887 self.device.BroadcastIntent(test_intent) 960 self.device.BroadcastIntent(test_intent)
888 961
889 962
890 class DeviceUtilsGoHomeTest(DeviceUtilsTest): 963 class DeviceUtilsGoHomeTest(DeviceUtilsNewImplTest):
891 964
892 def testGoHome(self): 965 def testGoHome(self):
893 with self.assertCall( 966 with self.assertCall(
894 self.call.adb.Shell('am start -W -a android.intent.action.MAIN ' 967 self.call.adb.Shell('am start -W -a android.intent.action.MAIN '
895 '-c android.intent.category.HOME'), 968 '-c android.intent.category.HOME'),
896 'Starting: Intent { act=android.intent.action.MAIN }\r\n'): 969 'Starting: Intent { act=android.intent.action.MAIN }\r\n'):
897 self.device.GoHome() 970 self.device.GoHome()
898 971
899 972
900 class DeviceUtilsForceStopTest(DeviceUtilsTest): 973 class DeviceUtilsForceStopTest(DeviceUtilsNewImplTest):
901 974
902 def testForceStop(self): 975 def testForceStop(self):
903 with self.assertCall( 976 with self.assertCall(
904 self.call.adb.Shell('am force-stop this.is.a.test.package'), 977 self.call.adb.Shell('am force-stop this.is.a.test.package'),
905 ''): 978 ''):
906 self.device.ForceStop('this.is.a.test.package') 979 self.device.ForceStop('this.is.a.test.package')
907 980
908 981
909 class DeviceUtilsClearApplicationStateTest(DeviceUtilsTest): 982 class DeviceUtilsClearApplicationStateTest(DeviceUtilsNewImplTest):
910 983
911 def testClearApplicationState_packageDoesntExist(self): 984 def testClearApplicationState_packageDoesntExist(self):
912 with self.assertCalls( 985 with self.assertCalls(
913 (self.call.adb.Shell('getprop ro.build.version.sdk'), '17\n'), 986 (self.call.adb.Shell('getprop ro.build.version.sdk'), '17\n'),
914 (self.call.device.GetApplicationPath('this.package.does.not.exist'), 987 (self.call.device.GetApplicationPath('this.package.does.not.exist'),
915 None)): 988 None)):
916 self.device.ClearApplicationState('this.package.does.not.exist') 989 self.device.ClearApplicationState('this.package.does.not.exist')
917 990
918 def testClearApplicationState_packageDoesntExistOnAndroidJBMR2OrAbove(self): 991 def testClearApplicationState_packageDoesntExistOnAndroidJBMR2OrAbove(self):
919 with self.assertCalls( 992 with self.assertCalls(
(...skipping 12 matching lines...) Expand all
932 self.device.ClearApplicationState('this.package.exists') 1005 self.device.ClearApplicationState('this.package.exists')
933 1006
934 def testClearApplicationState_packageExistsOnAndroidJBMR2OrAbove(self): 1007 def testClearApplicationState_packageExistsOnAndroidJBMR2OrAbove(self):
935 with self.assertCalls( 1008 with self.assertCalls(
936 (self.call.adb.Shell('getprop ro.build.version.sdk'), '18\n'), 1009 (self.call.adb.Shell('getprop ro.build.version.sdk'), '18\n'),
937 (self.call.adb.Shell('pm clear this.package.exists'), 1010 (self.call.adb.Shell('pm clear this.package.exists'),
938 'Success\r\n')): 1011 'Success\r\n')):
939 self.device.ClearApplicationState('this.package.exists') 1012 self.device.ClearApplicationState('this.package.exists')
940 1013
941 1014
942 class DeviceUtilsSendKeyEventTest(DeviceUtilsTest): 1015 class DeviceUtilsSendKeyEventTest(DeviceUtilsNewImplTest):
943 1016
944 def testSendKeyEvent(self): 1017 def testSendKeyEvent(self):
945 with self.assertCall(self.call.adb.Shell('input keyevent 66'), ''): 1018 with self.assertCall(self.call.adb.Shell('input keyevent 66'), ''):
946 self.device.SendKeyEvent(66) 1019 self.device.SendKeyEvent(66)
947 1020
948 1021
949 class DeviceUtilsPushChangedFilesIndividuallyTest(DeviceUtilsTest): 1022 class DeviceUtilsPushChangedFilesIndividuallyTest(DeviceUtilsNewImplTest):
950 1023
951 def testPushChangedFilesIndividually_empty(self): 1024 def testPushChangedFilesIndividually_empty(self):
952 test_files = [] 1025 test_files = []
953 with self.assertCalls(): 1026 with self.assertCalls():
954 self.device._PushChangedFilesIndividually(test_files) 1027 self.device._PushChangedFilesIndividually(test_files)
955 1028
956 def testPushChangedFilesIndividually_single(self): 1029 def testPushChangedFilesIndividually_single(self):
957 test_files = [('/test/host/path', '/test/device/path')] 1030 test_files = [('/test/host/path', '/test/device/path')]
958 with self.assertCalls(self.call.adb.Push(*test_files[0])): 1031 with self.assertCalls(self.call.adb.Push(*test_files[0])):
959 self.device._PushChangedFilesIndividually(test_files) 1032 self.device._PushChangedFilesIndividually(test_files)
960 1033
961 def testPushChangedFilesIndividually_multiple(self): 1034 def testPushChangedFilesIndividually_multiple(self):
962 test_files = [ 1035 test_files = [
963 ('/test/host/path/file1', '/test/device/path/file1'), 1036 ('/test/host/path/file1', '/test/device/path/file1'),
964 ('/test/host/path/file2', '/test/device/path/file2')] 1037 ('/test/host/path/file2', '/test/device/path/file2')]
965 with self.assertCalls( 1038 with self.assertCalls(
966 self.call.adb.Push(*test_files[0]), 1039 self.call.adb.Push(*test_files[0]),
967 self.call.adb.Push(*test_files[1])): 1040 self.call.adb.Push(*test_files[1])):
968 self.device._PushChangedFilesIndividually(test_files) 1041 self.device._PushChangedFilesIndividually(test_files)
969 1042
970 1043
971 class DeviceUtilsPushChangedFilesZippedTest(DeviceUtilsTest): 1044 class DeviceUtilsPushChangedFilesZippedTest(DeviceUtilsNewImplTest):
972 1045
973 def testPushChangedFilesZipped_empty(self): 1046 def testPushChangedFilesZipped_empty(self):
974 test_files = [] 1047 test_files = []
975 with self.assertCalls(): 1048 with self.assertCalls():
976 self.device._PushChangedFilesZipped(test_files) 1049 self.device._PushChangedFilesZipped(test_files)
977 1050
978 def _testPushChangedFilesZipped_spec(self, test_files): 1051 def _testPushChangedFilesZipped_spec(self, test_files):
979 mock_zip_temp = mock.mock_open() 1052 mock_zip_temp = mock.mock_open()
980 mock_zip_temp.return_value.name = '/test/temp/file/tmp.zip' 1053 mock_zip_temp.return_value.name = '/test/temp/file/tmp.zip'
981 with self.assertCalls( 1054 with self.assertCalls(
(...skipping 18 matching lines...) Expand all
1000 def testPushChangedFilesZipped_single(self): 1073 def testPushChangedFilesZipped_single(self):
1001 self._testPushChangedFilesZipped_spec( 1074 self._testPushChangedFilesZipped_spec(
1002 [('/test/host/path/file1', '/test/device/path/file1')]) 1075 [('/test/host/path/file1', '/test/device/path/file1')])
1003 1076
1004 def testPushChangedFilesZipped_multiple(self): 1077 def testPushChangedFilesZipped_multiple(self):
1005 self._testPushChangedFilesZipped_spec( 1078 self._testPushChangedFilesZipped_spec(
1006 [('/test/host/path/file1', '/test/device/path/file1'), 1079 [('/test/host/path/file1', '/test/device/path/file1'),
1007 ('/test/host/path/file2', '/test/device/path/file2')]) 1080 ('/test/host/path/file2', '/test/device/path/file2')])
1008 1081
1009 1082
1010 class DeviceUtilsFileExistsTest(DeviceUtilsTest): 1083 class DeviceUtilsFileExistsTest(DeviceUtilsNewImplTest):
1011 1084
1012 def testFileExists_usingTest_fileExists(self): 1085 def testFileExists_usingTest_fileExists(self):
1013 with self.assertCall( 1086 with self.assertCall(
1014 self.call.device.RunShellCommand( 1087 self.call.device.RunShellCommand(
1015 ['test', '-e', '/path/file.exists'], check_return=True), ''): 1088 ['test', '-e', '/path/file.exists'], check_return=True), ''):
1016 self.assertTrue(self.device.FileExists('/path/file.exists')) 1089 self.assertTrue(self.device.FileExists('/path/file.exists'))
1017 1090
1018 def testFileExists_usingTest_fileDoesntExist(self): 1091 def testFileExists_usingTest_fileDoesntExist(self):
1019 with self.assertCall( 1092 with self.assertCall(
1020 self.call.device.RunShellCommand( 1093 self.call.device.RunShellCommand(
1021 ['test', '-e', '/does/not/exist'], check_return=True), 1094 ['test', '-e', '/does/not/exist'], check_return=True),
1022 self.ShellError('', 1)): 1095 self.ShellError('', 1)):
1023 self.assertFalse(self.device.FileExists('/does/not/exist')) 1096 self.assertFalse(self.device.FileExists('/does/not/exist'))
1024 1097
1025 1098
1026 class DeviceUtilsPullFileTest(DeviceUtilsTest): 1099 class DeviceUtilsPullFileTest(DeviceUtilsNewImplTest):
1027 1100
1028 def testPullFile_existsOnDevice(self): 1101 def testPullFile_existsOnDevice(self):
1029 with mock.patch('os.path.exists', return_value=True): 1102 with mock.patch('os.path.exists', return_value=True):
1030 with self.assertCall( 1103 with self.assertCall(
1031 self.call.adb.Pull('/data/app/test.file.exists', 1104 self.call.adb.Pull('/data/app/test.file.exists',
1032 '/test/file/host/path')): 1105 '/test/file/host/path')):
1033 self.device.PullFile('/data/app/test.file.exists', 1106 self.device.PullFile('/data/app/test.file.exists',
1034 '/test/file/host/path') 1107 '/test/file/host/path')
1035 1108
1036 def testPullFile_doesntExistOnDevice(self): 1109 def testPullFile_doesntExistOnDevice(self):
1037 with mock.patch('os.path.exists', return_value=True): 1110 with mock.patch('os.path.exists', return_value=True):
1038 with self.assertCall( 1111 with self.assertCall(
1039 self.call.adb.Pull('/data/app/test.file.does.not.exist', 1112 self.call.adb.Pull('/data/app/test.file.does.not.exist',
1040 '/test/file/host/path'), 1113 '/test/file/host/path'),
1041 self.CommandError('remote object does not exist')): 1114 self.CommandError('remote object does not exist')):
1042 with self.assertRaises(device_errors.CommandFailedError): 1115 with self.assertRaises(device_errors.CommandFailedError):
1043 self.device.PullFile('/data/app/test.file.does.not.exist', 1116 self.device.PullFile('/data/app/test.file.does.not.exist',
1044 '/test/file/host/path') 1117 '/test/file/host/path')
1045 1118
1046 1119
1047 class DeviceUtilsReadFileTest(DeviceUtilsTest): 1120 class DeviceUtilsReadFileTest(DeviceUtilsNewImplTest):
1048 1121
1049 def testReadFile_exists(self): 1122 def testReadFile_exists(self):
1050 with self.assertCall( 1123 with self.assertCall(
1051 self.call.adb.Shell('cat /read/this/test/file'), 1124 self.call.adb.Shell('cat /read/this/test/file'),
1052 'this is a test file\r\n'): 1125 'this is a test file\r\n'):
1053 self.assertEqual('this is a test file\n', 1126 self.assertEqual('this is a test file\n',
1054 self.device.ReadFile('/read/this/test/file')) 1127 self.device.ReadFile('/read/this/test/file'))
1055 1128
1056 def testReadFile_doesNotExist(self): 1129 def testReadFile_doesNotExist(self):
1057 with self.assertCall( 1130 with self.assertCall(
1058 self.call.adb.Shell('cat /this/file/does.not.exist'), 1131 self.call.adb.Shell('cat /this/file/does.not.exist'),
1059 self.ShellError('/system/bin/sh: cat: /this/file/does.not.exist: ' 1132 self.ShellError('/system/bin/sh: cat: /this/file/does.not.exist: '
1060 'No such file or directory')): 1133 'No such file or directory')):
1061 with self.assertRaises(device_errors.AdbCommandFailedError): 1134 with self.assertRaises(device_errors.AdbCommandFailedError):
1062 self.device.ReadFile('/this/file/does.not.exist') 1135 self.device.ReadFile('/this/file/does.not.exist')
1063 1136
1064 def testReadFile_withSU(self): 1137 def testReadFile_withSU(self):
1065 with self.assertCalls( 1138 with self.assertCalls(
1066 (self.call.device.NeedsSU(), True), 1139 (self.call.device.NeedsSU(), True),
1067 (self.call.adb.Shell("su -c sh -c 'cat /this/file/can.be.read.with.su'"), 1140 (self.call.adb.Shell("su -c sh -c 'cat /this/file/can.be.read.with.su'"),
1068 'this is a test file\nread with su')): 1141 'this is a test file\nread with su')):
1069 self.assertEqual( 1142 self.assertEqual(
1070 'this is a test file\nread with su\n', 1143 'this is a test file\nread with su\n',
1071 self.device.ReadFile('/this/file/can.be.read.with.su', 1144 self.device.ReadFile('/this/file/can.be.read.with.su',
1072 as_root=True)) 1145 as_root=True))
1073 1146
1074 1147
1075 class DeviceUtilsWriteFileTest(DeviceUtilsTest): 1148 class DeviceUtilsWriteFileTest(DeviceUtilsNewImplTest):
1076 1149
1077 def testWriteFileWithPush_success(self): 1150 def testWriteFileWithPush_success(self):
1078 tmp_host = MockTempFile('/tmp/file/on.host') 1151 tmp_host = MockTempFile('/tmp/file/on.host')
1079 contents = 'some interesting contents' 1152 contents = 'some interesting contents'
1080 with self.assertCalls( 1153 with self.assertCalls(
1081 (mock.call.tempfile.NamedTemporaryFile(), tmp_host), 1154 (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
1082 self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file')): 1155 self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file')):
1083 self.device._WriteFileWithPush('/path/to/device/file', contents) 1156 self.device._WriteFileWithPush('/path/to/device/file', contents)
1084 tmp_host.file.write.assert_called_once_with(contents) 1157 tmp_host.file.write.assert_called_once_with(contents)
1085 1158
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 self.device.WriteFile('/test/file/to write', 'the contents') 1201 self.device.WriteFile('/test/file/to write', 'the contents')
1129 1202
1130 def testWriteFile_withEchoAndSU(self): 1203 def testWriteFile_withEchoAndSU(self):
1131 with self.assertCalls( 1204 with self.assertCalls(
1132 (self.call.device.NeedsSU(), True), 1205 (self.call.device.NeedsSU(), True),
1133 (self.call.adb.Shell("su -c sh -c 'echo -n contents > /test/file'"), 1206 (self.call.adb.Shell("su -c sh -c 'echo -n contents > /test/file'"),
1134 '')): 1207 '')):
1135 self.device.WriteFile('/test/file', 'contents', as_root=True) 1208 self.device.WriteFile('/test/file', 'contents', as_root=True)
1136 1209
1137 1210
1138 class DeviceUtilsLsTest(DeviceUtilsTest): 1211 class DeviceUtilsLsTest(DeviceUtilsNewImplTest):
1139 1212
1140 def testLs_directory(self): 1213 def testLs_directory(self):
1141 result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)), 1214 result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)),
1142 ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)), 1215 ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
1143 ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))] 1216 ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))]
1144 with self.assertCalls( 1217 with self.assertCalls(
1145 (self.call.adb.Ls('/data/local/tmp'), result)): 1218 (self.call.adb.Ls('/data/local/tmp'), result)):
1146 self.assertEquals(result, 1219 self.assertEquals(result,
1147 self.device.Ls('/data/local/tmp')) 1220 self.device.Ls('/data/local/tmp'))
1148 1221
1149 def testLs_nothing(self): 1222 def testLs_nothing(self):
1150 with self.assertCalls( 1223 with self.assertCalls(
1151 (self.call.adb.Ls('/data/local/tmp/testfile.txt'), [])): 1224 (self.call.adb.Ls('/data/local/tmp/testfile.txt'), [])):
1152 self.assertEquals([], 1225 self.assertEquals([],
1153 self.device.Ls('/data/local/tmp/testfile.txt')) 1226 self.device.Ls('/data/local/tmp/testfile.txt'))
1154 1227
1155 1228
1156 class DeviceUtilsStatTest(DeviceUtilsTest): 1229 class DeviceUtilsStatTest(DeviceUtilsNewImplTest):
1157 1230
1158 def testStat_file(self): 1231 def testStat_file(self):
1159 result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)), 1232 result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)),
1160 ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)), 1233 ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
1161 ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))] 1234 ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))]
1162 with self.assertCalls( 1235 with self.assertCalls(
1163 (self.call.adb.Ls('/data/local/tmp'), result)): 1236 (self.call.adb.Ls('/data/local/tmp'), result)):
1164 self.assertEquals(adb_wrapper.DeviceStat(33206, 3, 1417436122), 1237 self.assertEquals(adb_wrapper.DeviceStat(33206, 3, 1417436122),
1165 self.device.Stat('/data/local/tmp/testfile.txt')) 1238 self.device.Stat('/data/local/tmp/testfile.txt'))
1166 1239
1167 def testStat_directory(self): 1240 def testStat_directory(self):
1168 result = [('.', adb_wrapper.DeviceStat(16873, 4096, 12382237)), 1241 result = [('.', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
1169 ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)), 1242 ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
1170 ('tmp', adb_wrapper.DeviceStat(16889, 4096, 1417436123))] 1243 ('tmp', adb_wrapper.DeviceStat(16889, 4096, 1417436123))]
1171 with self.assertCalls( 1244 with self.assertCalls(
1172 (self.call.adb.Ls('/data/local'), result)): 1245 (self.call.adb.Ls('/data/local'), result)):
1173 self.assertEquals(adb_wrapper.DeviceStat(16889, 4096, 1417436123), 1246 self.assertEquals(adb_wrapper.DeviceStat(16889, 4096, 1417436123),
1174 self.device.Stat('/data/local/tmp')) 1247 self.device.Stat('/data/local/tmp'))
1175 1248
1176 def testStat_doesNotExist(self): 1249 def testStat_doesNotExist(self):
1177 result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)), 1250 result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)),
1178 ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)), 1251 ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
1179 ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))] 1252 ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))]
1180 with self.assertCalls( 1253 with self.assertCalls(
1181 (self.call.adb.Ls('/data/local/tmp'), result)): 1254 (self.call.adb.Ls('/data/local/tmp'), result)):
1182 with self.assertRaises(device_errors.CommandFailedError): 1255 with self.assertRaises(device_errors.CommandFailedError):
1183 self.device.Stat('/data/local/tmp/does.not.exist.txt') 1256 self.device.Stat('/data/local/tmp/does.not.exist.txt')
1184 1257
1185 1258
1186 class DeviceUtilsSetJavaAssertsTest(DeviceUtilsTest): 1259 class DeviceUtilsSetJavaAssertsTest(DeviceUtilsNewImplTest):
1187 1260
1188 def testSetJavaAsserts_enable(self): 1261 def testSetJavaAsserts_enable(self):
1189 with self.assertCalls( 1262 with self.assertCalls(
1190 (self.call.device.ReadFile(constants.DEVICE_LOCAL_PROPERTIES_PATH), 1263 (self.call.device.ReadFile(constants.DEVICE_LOCAL_PROPERTIES_PATH),
1191 'some.example.prop=with an example value\n' 1264 'some.example.prop=with an example value\n'
1192 'some.other.prop=value_ok\n'), 1265 'some.other.prop=value_ok\n'),
1193 self.call.device.WriteFile( 1266 self.call.device.WriteFile(
1194 constants.DEVICE_LOCAL_PROPERTIES_PATH, 1267 constants.DEVICE_LOCAL_PROPERTIES_PATH,
1195 'some.example.prop=with an example value\n' 1268 'some.example.prop=with an example value\n'
1196 'some.other.prop=value_ok\n' 1269 'some.other.prop=value_ok\n'
(...skipping 19 matching lines...) Expand all
1216 def testSetJavaAsserts_alreadyEnabled(self): 1289 def testSetJavaAsserts_alreadyEnabled(self):
1217 with self.assertCalls( 1290 with self.assertCalls(
1218 (self.call.device.ReadFile(constants.DEVICE_LOCAL_PROPERTIES_PATH), 1291 (self.call.device.ReadFile(constants.DEVICE_LOCAL_PROPERTIES_PATH),
1219 'some.example.prop=with an example value\n' 1292 'some.example.prop=with an example value\n'
1220 'dalvik.vm.enableassertions=all\n' 1293 'dalvik.vm.enableassertions=all\n'
1221 'some.other.prop=value_ok\n'), 1294 'some.other.prop=value_ok\n'),
1222 (self.call.device.GetProp('dalvik.vm.enableassertions'), 'all')): 1295 (self.call.device.GetProp('dalvik.vm.enableassertions'), 'all')):
1223 self.assertFalse(self.device.SetJavaAsserts(True)) 1296 self.assertFalse(self.device.SetJavaAsserts(True))
1224 1297
1225 1298
1226 class DeviceUtilsGetPropTest(DeviceUtilsTest): 1299 class DeviceUtilsGetPropTest(DeviceUtilsNewImplTest):
1227 1300
1228 def testGetProp_exists(self): 1301 def testGetProp_exists(self):
1229 with self.assertCall( 1302 with self.assertCall(
1230 self.call.adb.Shell('getprop test.property'), 'property_value\n'): 1303 self.call.adb.Shell('getprop test.property'), 'property_value\n'):
1231 self.assertEqual('property_value', 1304 self.assertEqual('property_value',
1232 self.device.GetProp('test.property')) 1305 self.device.GetProp('test.property'))
1233 1306
1234 def testGetProp_doesNotExist(self): 1307 def testGetProp_doesNotExist(self):
1235 with self.assertCall( 1308 with self.assertCall(
1236 self.call.adb.Shell('getprop property.does.not.exist'), '\n'): 1309 self.call.adb.Shell('getprop property.does.not.exist'), '\n'):
(...skipping 13 matching lines...) Expand all
1250 (self.call.adb.Shell('getprop ro.build.type'), self.ShellError()), 1323 (self.call.adb.Shell('getprop ro.build.type'), self.ShellError()),
1251 (self.call.adb.Shell('getprop ro.build.type'), 'userdebug\n')): 1324 (self.call.adb.Shell('getprop ro.build.type'), 'userdebug\n')):
1252 self.assertEqual('userdebug', 1325 self.assertEqual('userdebug',
1253 self.device.GetProp('ro.build.type', 1326 self.device.GetProp('ro.build.type',
1254 cache=True, retries=3)) 1327 cache=True, retries=3))
1255 self.assertEqual('userdebug', 1328 self.assertEqual('userdebug',
1256 self.device.GetProp('ro.build.type', 1329 self.device.GetProp('ro.build.type',
1257 cache=True, retries=3)) 1330 cache=True, retries=3))
1258 1331
1259 1332
1260 class DeviceUtilsSetPropTest(DeviceUtilsTest): 1333 class DeviceUtilsSetPropTest(DeviceUtilsNewImplTest):
1261 1334
1262 def testSetProp(self): 1335 def testSetProp(self):
1263 with self.assertCall( 1336 with self.assertCall(
1264 self.call.adb.Shell("setprop test.property 'test value'"), ''): 1337 self.call.adb.Shell("setprop test.property 'test value'"), ''):
1265 self.device.SetProp('test.property', 'test value') 1338 self.device.SetProp('test.property', 'test value')
1266 1339
1267 def testSetProp_check_succeeds(self): 1340 def testSetProp_check_succeeds(self):
1268 with self.assertCalls( 1341 with self.assertCalls(
1269 (self.call.adb.Shell('setprop test.property new_value'), ''), 1342 (self.call.adb.Shell('setprop test.property new_value'), ''),
1270 (self.call.adb.Shell('getprop test.property'), 'new_value')): 1343 (self.call.adb.Shell('getprop test.property'), 'new_value')):
1271 self.device.SetProp('test.property', 'new_value', check=True) 1344 self.device.SetProp('test.property', 'new_value', check=True)
1272 1345
1273 def testSetProp_check_fails(self): 1346 def testSetProp_check_fails(self):
1274 with self.assertCalls( 1347 with self.assertCalls(
1275 (self.call.adb.Shell('setprop test.property new_value'), ''), 1348 (self.call.adb.Shell('setprop test.property new_value'), ''),
1276 (self.call.adb.Shell('getprop test.property'), 'old_value')): 1349 (self.call.adb.Shell('getprop test.property'), 'old_value')):
1277 with self.assertRaises(device_errors.CommandFailedError): 1350 with self.assertRaises(device_errors.CommandFailedError):
1278 self.device.SetProp('test.property', 'new_value', check=True) 1351 self.device.SetProp('test.property', 'new_value', check=True)
1279 1352
1280 1353
1281 class DeviceUtilsGetPidsTest(DeviceUtilsTest): 1354 class DeviceUtilsGetPidsTest(DeviceUtilsNewImplTest):
1282 1355
1283 def testGetPids_noMatches(self): 1356 def testGetPids_noMatches(self):
1284 with self.assertCall(self.call.adb.Shell('ps'), 1357 with self.assertCall(self.call.adb.Shell('ps'),
1285 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1358 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'
1286 'user 1000 100 1024 1024 ffffffff 00000000 no.match\n'): 1359 'user 1000 100 1024 1024 ffffffff 00000000 no.match\n'):
1287 self.assertEqual({}, self.device.GetPids('does.not.match')) 1360 self.assertEqual({}, self.device.GetPids('does.not.match'))
1288 1361
1289 def testGetPids_oneMatch(self): 1362 def testGetPids_oneMatch(self):
1290 with self.assertCall(self.call.adb.Shell('ps'), 1363 with self.assertCall(self.call.adb.Shell('ps'),
1291 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1364 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'
(...skipping 15 matching lines...) Expand all
1307 def testGetPids_exactMatch(self): 1380 def testGetPids_exactMatch(self):
1308 with self.assertCall(self.call.adb.Shell('ps'), 1381 with self.assertCall(self.call.adb.Shell('ps'),
1309 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1382 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'
1310 'user 1000 100 1024 1024 ffffffff 00000000 not.exact.match\n' 1383 'user 1000 100 1024 1024 ffffffff 00000000 not.exact.match\n'
1311 'user 1234 100 1024 1024 ffffffff 00000000 exact.match\n'): 1384 'user 1234 100 1024 1024 ffffffff 00000000 exact.match\n'):
1312 self.assertEqual( 1385 self.assertEqual(
1313 {'not.exact.match': '1000', 'exact.match': '1234'}, 1386 {'not.exact.match': '1000', 'exact.match': '1234'},
1314 self.device.GetPids('exact.match')) 1387 self.device.GetPids('exact.match'))
1315 1388
1316 1389
1317 class DeviceUtilsTakeScreenshotTest(DeviceUtilsTest): 1390 class DeviceUtilsTakeScreenshotTest(DeviceUtilsNewImplTest):
1318 1391
1319 def testTakeScreenshot_fileNameProvided(self): 1392 def testTakeScreenshot_fileNameProvided(self):
1320 with self.assertCalls( 1393 with self.assertCalls(
1321 (mock.call.pylib.utils.device_temp_file.DeviceTempFile( 1394 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(
1322 self.adb, suffix='.png'), 1395 self.adb, suffix='.png'),
1323 MockTempFile('/tmp/path/temp-123.png')), 1396 MockTempFile('/tmp/path/temp-123.png')),
1324 (self.call.adb.Shell('/system/bin/screencap -p /tmp/path/temp-123.png'), 1397 (self.call.adb.Shell('/system/bin/screencap -p /tmp/path/temp-123.png'),
1325 ''), 1398 ''),
1326 self.call.device.PullFile('/tmp/path/temp-123.png', 1399 self.call.device.PullFile('/tmp/path/temp-123.png',
1327 '/test/host/screenshot.png')): 1400 '/test/host/screenshot.png')):
1328 self.device.TakeScreenshot('/test/host/screenshot.png') 1401 self.device.TakeScreenshot('/test/host/screenshot.png')
1329 1402
1330 1403
1331 class DeviceUtilsGetMemoryUsageForPidTest(DeviceUtilsTest): 1404 class DeviceUtilsGetMemoryUsageForPidTest(DeviceUtilsOldImplTest):
1332 1405
1333 def setUp(self): 1406 def setUp(self):
1334 super(DeviceUtilsGetMemoryUsageForPidTest, self).setUp() 1407 super(DeviceUtilsGetMemoryUsageForPidTest, self).setUp()
1408 self.device.old_interface._privileged_command_runner = (
1409 self.device.old_interface.RunShellCommand)
1410 self.device.old_interface._protected_file_access_method_initialized = True
1335 1411
1336 def testGetMemoryUsageForPid_validPid(self): 1412 def testGetMemoryUsageForPid_validPid(self):
1337 with self.assertCalls( 1413 with self.assertCallsSequence([
1338 (self.call.device.RunShellCommand( 1414 ("adb -s 0123456789abcdef shell 'showmap 1234'",
1339 ['showmap', '1234'], as_root=True, check_return=True), 1415 '100 101 102 103 104 105 106 107 TOTAL\r\n'),
1340 ['100 101 102 103 104 105 106 107 TOTAL']), 1416 ("adb -s 0123456789abcdef shell "
1341 (self.call.device.ReadFile('/proc/1234/status', as_root=True), 1417 "'cat \"/proc/1234/status\" 2> /dev/null'",
1342 'VmHWM: 1024 kB\n')): 1418 'VmHWM: 1024 kB')
1419 ]):
1343 self.assertEqual( 1420 self.assertEqual(
1344 { 1421 {
1345 'Size': 100, 1422 'Size': 100,
1346 'Rss': 101, 1423 'Rss': 101,
1347 'Pss': 102, 1424 'Pss': 102,
1348 'Shared_Clean': 103, 1425 'Shared_Clean': 103,
1349 'Shared_Dirty': 104, 1426 'Shared_Dirty': 104,
1350 'Private_Clean': 105, 1427 'Private_Clean': 105,
1351 'Private_Dirty': 106, 1428 'Private_Dirty': 106,
1352 'VmHWM': 1024 1429 'VmHWM': 1024
1353 }, 1430 },
1354 self.device.GetMemoryUsageForPid(1234)) 1431 self.device.GetMemoryUsageForPid(1234))
1355 1432
1356 def testGetMemoryUsageForPid_noSmaps(self): 1433 def testGetMemoryUsageForPid_invalidPid(self):
1357 with self.assertCalls( 1434 with self.assertCalls(
1358 (self.call.device.RunShellCommand( 1435 "adb -s 0123456789abcdef shell 'showmap 4321'",
1359 ['showmap', '4321'], as_root=True, check_return=True), 1436 'cannot open /proc/4321/smaps: No such file or directory\r\n'):
1360 ['cannot open /proc/4321/smaps: No such file or directory']), 1437 self.assertEqual({}, self.device.GetMemoryUsageForPid(4321))
1361 (self.call.device.ReadFile('/proc/4321/status', as_root=True),
1362 'VmHWM: 1024 kb\n')):
1363 self.assertEquals({'VmHWM': 1024}, self.device.GetMemoryUsageForPid(4321))
1364
1365 def testGetMemoryUsageForPid_noStatus(self):
1366 with self.assertCalls(
1367 (self.call.device.RunShellCommand(
1368 ['showmap', '4321'], as_root=True, check_return=True),
1369 ['100 101 102 103 104 105 106 107 TOTAL']),
1370 (self.call.device.ReadFile('/proc/4321/status', as_root=True),
1371 self.CommandError())):
1372 self.assertEquals(
1373 {
1374 'Size': 100,
1375 'Rss': 101,
1376 'Pss': 102,
1377 'Shared_Clean': 103,
1378 'Shared_Dirty': 104,
1379 'Private_Clean': 105,
1380 'Private_Dirty': 106,
1381 },
1382 self.device.GetMemoryUsageForPid(4321))
1383 1438
1384 1439
1385 class DeviceUtilsStrTest(DeviceUtilsTest): 1440 class DeviceUtilsStrTest(DeviceUtilsNewImplTest):
1386 1441
1387 def testStr_returnsSerial(self): 1442 def testStr_returnsSerial(self):
1388 with self.assertCalls( 1443 with self.assertCalls(
1389 (self.call.adb.GetDeviceSerial(), '0123456789abcdef')): 1444 (self.call.adb.GetDeviceSerial(), '0123456789abcdef')):
1390 self.assertEqual('0123456789abcdef', str(self.device)) 1445 self.assertEqual('0123456789abcdef', str(self.device))
1391 1446
1392 1447
1393 class DeviceUtilsParallelTest(mock_calls.TestCase): 1448 class DeviceUtilsParallelTest(mock_calls.TestCase):
1394 1449
1395 def testParallel_default(self): 1450 def testParallel_default(self):
1396 test_serials = ['0123456789abcdef', 'fedcba9876543210'] 1451 test_serials = ['0123456789abcdef', 'fedcba9876543210']
1397 with self.assertCall( 1452 with self.assertCall(
1398 mock.call.pylib.device.adb_wrapper.AdbWrapper.GetDevices(), 1453 mock.call.pylib.device.adb_wrapper.AdbWrapper.GetDevices(),
1399 [_AdbWrapperMock(serial) for serial in test_serials]): 1454 [_AdbWrapperMock(serial) for serial in test_serials]):
1400 parallel_devices = device_utils.DeviceUtils.parallel() 1455 parallel_devices = device_utils.DeviceUtils.parallel()
1401 for serial, device in zip(test_serials, parallel_devices.pGet(None)): 1456 for serial, device in zip(test_serials, parallel_devices.pGet(None)):
1402 self.assertTrue( 1457 self.assertTrue(
1403 isinstance(device, device_utils.DeviceUtils) 1458 isinstance(device, device_utils.DeviceUtils)
1404 and serial == str(device), 1459 and serial == str(device),
1405 'Expected a DeviceUtils object with serial %s' % serial) 1460 'Expected a DeviceUtils object with serial %s' % serial)
1406 1461
1407 def testParallel_noDevices(self):
1408 with self.assertCall(
1409 mock.call.pylib.device.adb_wrapper.AdbWrapper.GetDevices(), []):
1410 with self.assertRaises(device_errors.NoDevicesError):
1411 device_utils.DeviceUtils.parallel()
1412
1413 1462
1414 if __name__ == '__main__': 1463 if __name__ == '__main__':
1415 logging.getLogger().setLevel(logging.DEBUG) 1464 logging.getLogger().setLevel(logging.DEBUG)
1416 unittest.main(verbosity=2) 1465 unittest.main(verbosity=2)
1417 1466
OLDNEW
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/device/logcat_monitor.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698