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

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

Issue 683113005: Update from chromium https://crrev.com/302282 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/gtest/setup.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 278
279 class _ShellError: 279 class _ShellError:
280 def __init__(self, output=None, return_code=1): 280 def __init__(self, output=None, return_code=1):
281 if output is None: 281 if output is None:
282 self.output = 'Permission denied\r\n' 282 self.output = 'Permission denied\r\n'
283 else: 283 else:
284 self.output = output 284 self.output = output
285 self.return_code = return_code 285 self.return_code = return_code
286 286
287 287
288 class _CmdTimeout:
289 def __init__(self, msg=None):
290 if msg is None:
291 self.msg = 'Operation timed out'
292 else:
293 self.msg = msg
294
295
288 class DeviceUtilsNewImplTest(unittest.TestCase): 296 class DeviceUtilsNewImplTest(unittest.TestCase):
289 297
290 def setUp(self): 298 def setUp(self):
291 test_serial = '0123456789abcdef' 299 test_serial = '0123456789abcdef'
292 self.adb = mock.Mock(spec=adb_wrapper.AdbWrapper) 300 self.adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
293 self.adb.__str__ = mock.Mock(return_value=test_serial) 301 self.adb.__str__ = mock.Mock(return_value=test_serial)
294 self.adb.GetDeviceSerial.return_value = test_serial 302 self.adb.GetDeviceSerial.return_value = test_serial
295 self.device = device_utils.DeviceUtils( 303 self.device = device_utils.DeviceUtils(
296 self.adb, default_timeout=1, default_retries=0) 304 self.adb, default_timeout=10, default_retries=0)
297 305
298 def assertShellCallSequence(self, calls): 306 def assertShellCallSequence(self, calls):
299 '''Assert that we expect a sequence of calls to adb.Shell. 307 '''Assert that we expect a sequence of calls to adb.Shell.
300 308
301 Args: 309 Args:
302 calls: a sequence of (cmd, return_value) pairs, where |cmd| is the 310 calls: a sequence of (cmd, return_value) pairs, where |cmd| is the
303 expected shell command to run on the device (with any quoting already 311 expected shell command to run on the device (with any quoting already
304 applied), and |return_value| is either a string to give as mock output 312 applied), and |return_value| is either a string to give as mock output
305 or a _ShellError object to raise an AdbShellCommandFailedError. 313 or a _ShellError object to raise an AdbShellCommandFailedError.
306 ''' 314 '''
307 def mk_expected_call(cmd, return_value): 315 def mk_expected_call(cmd, return_value):
308 expected_args = Args(cmd, expect_rc=0, timeout=1, retries=0) 316 expected_args = Args(cmd, expect_rc=0, timeout=10, retries=0)
309 if isinstance(return_value, _ShellError): 317 if isinstance(return_value, _ShellError):
310 return_value = device_errors.AdbShellCommandFailedError(cmd, 318 return_value = device_errors.AdbShellCommandFailedError(cmd,
311 return_value.return_code, return_value.output, str(self.device)) 319 return_value.return_code, return_value.output, str(self.device))
320 elif isinstance(return_value, _CmdTimeout):
321 return_value = device_errors.CommandTimeoutError(return_value.msg,
322 str(self.device))
312 return (expected_args, return_value) 323 return (expected_args, return_value)
313 324
314 expected_calls = (mk_expected_call(a, r) for a, r in calls) 325 expected_calls = (mk_expected_call(a, r) for a, r in calls)
315 return MockCallSequence(self, self.adb, 'Shell', expected_calls) 326 return MockCallSequence(self, self.adb, 'Shell', expected_calls)
316 327
317 def assertShellCall(self, cmd, return_value=''): 328 def assertShellCall(self, cmd, return_value=''):
318 return self.assertShellCallSequence([(cmd, return_value)]) 329 return self.assertShellCallSequence([(cmd, return_value)])
319 330
320 331
321 class DeviceUtilsHybridImplTest(DeviceUtilsOldImplTest): 332 class DeviceUtilsHybridImplTest(DeviceUtilsOldImplTest):
322 333
323 def setUp(self): 334 def setUp(self):
324 super(DeviceUtilsHybridImplTest, self).setUp() 335 super(DeviceUtilsHybridImplTest, self).setUp()
325 self.device.adb = self.adb = mock.Mock(spec=adb_wrapper.AdbWrapper) 336 self.device.adb = self.adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
326 337
327 338
328 class DeviceUtilsIsOnlineTest(DeviceUtilsOldImplTest): 339 class DeviceUtilsIsOnlineTest(DeviceUtilsNewImplTest):
329 340
330 def testIsOnline_true(self): 341 def testIsOnline_true(self):
331 with self.assertCalls('adb -s 0123456789abcdef devices', 342 self.adb.GetState = mock.Mock(return_value='device')
332 '00123456789abcdef device\r\n'): 343 self.assertTrue(self.device.IsOnline())
333 self.assertTrue(self.device.IsOnline()) 344 self.adb.GetState.assert_called_once_with()
334 345
335 def testIsOnline_false(self): 346 def testIsOnline_false(self):
336 with self.assertCalls('adb -s 0123456789abcdef devices', '\r\n'): 347 self.adb.GetState = mock.Mock(return_value='offline')
337 self.assertFalse(self.device.IsOnline()) 348 self.assertFalse(self.device.IsOnline())
349 self.adb.GetState.assert_called_once_with()
338 350
339 351
340 class DeviceUtilsHasRootTest(DeviceUtilsNewImplTest): 352 class DeviceUtilsHasRootTest(DeviceUtilsNewImplTest):
341 353
342 def testHasRoot_true(self): 354 def testHasRoot_true(self):
343 with self.assertShellCall('ls /root', 'foo\r\n'): 355 with self.assertShellCall('ls /root', 'foo\r\n'):
344 self.assertTrue(self.device.HasRoot()) 356 self.assertTrue(self.device.HasRoot())
345 357
346 def testHasRoot_false(self): 358 def testHasRoot_false(self):
347 with self.assertShellCall('ls /root', _ShellError()): 359 with self.assertShellCall('ls /root', _ShellError()):
(...skipping 20 matching lines...) Expand all
368 def testEnableRoot_rootFails(self): 380 def testEnableRoot_rootFails(self):
369 with self.assertCallsSequence([ 381 with self.assertCallsSequence([
370 ('adb -s 0123456789abcdef shell getprop ro.build.type', 382 ('adb -s 0123456789abcdef shell getprop ro.build.type',
371 'userdebug\r\n'), 383 'userdebug\r\n'),
372 ('adb -s 0123456789abcdef root', 'no\r\n'), 384 ('adb -s 0123456789abcdef root', 'no\r\n'),
373 ('adb -s 0123456789abcdef wait-for-device', '')]): 385 ('adb -s 0123456789abcdef wait-for-device', '')]):
374 with self.assertRaises(device_errors.CommandFailedError): 386 with self.assertRaises(device_errors.CommandFailedError):
375 self.device.EnableRoot() 387 self.device.EnableRoot()
376 388
377 389
378 class DeviceUtilsIsUserBuildTest(DeviceUtilsOldImplTest): 390 class DeviceUtilsIsUserBuildTest(DeviceUtilsNewImplTest):
379 391
380 def testIsUserBuild_yes(self): 392 def testIsUserBuild_yes(self):
381 with self.assertCalls( 393 with self.assertShellCall('getprop ro.build.type', 'user\r\n'):
382 'adb -s 0123456789abcdef shell getprop ro.build.type',
383 'user\r\n'):
384 self.assertTrue(self.device.IsUserBuild()) 394 self.assertTrue(self.device.IsUserBuild())
385 395
386 def testIsUserBuild_no(self): 396 def testIsUserBuild_no(self):
387 with self.assertCalls( 397 with self.assertShellCall('getprop ro.build.type', 'userdebug\r\n'):
388 'adb -s 0123456789abcdef shell getprop ro.build.type',
389 'userdebug\r\n'):
390 self.assertFalse(self.device.IsUserBuild()) 398 self.assertFalse(self.device.IsUserBuild())
391 399
392 400
393 class DeviceUtilsGetExternalStoragePathTest(DeviceUtilsNewImplTest): 401 class DeviceUtilsGetExternalStoragePathTest(DeviceUtilsNewImplTest):
394 402
395 def testGetExternalStoragePath_succeeds(self): 403 def testGetExternalStoragePath_succeeds(self):
396 fakeStoragePath = '/fake/storage/path' 404 fakeStoragePath = '/fake/storage/path'
397 with self.assertShellCall('echo $EXTERNAL_STORAGE', 405 with self.assertShellCall('echo $EXTERNAL_STORAGE',
398 '%s\r\n' % fakeStoragePath): 406 '%s\r\n' % fakeStoragePath):
399 self.assertEquals(fakeStoragePath, 407 self.assertEquals(fakeStoragePath,
400 self.device.GetExternalStoragePath()) 408 self.device.GetExternalStoragePath())
401 409
402 def testGetExternalStoragePath_fails(self): 410 def testGetExternalStoragePath_fails(self):
403 with self.assertShellCall('echo $EXTERNAL_STORAGE', '\r\n'): 411 with self.assertShellCall('echo $EXTERNAL_STORAGE', '\r\n'):
404 with self.assertRaises(device_errors.CommandFailedError): 412 with self.assertRaises(device_errors.CommandFailedError):
405 self.device.GetExternalStoragePath() 413 self.device.GetExternalStoragePath()
406 414
407 415
408 class DeviceUtilsWaitUntilFullyBootedTest(DeviceUtilsOldImplTest): 416 class DeviceUtilsGetApplicationPathTest(DeviceUtilsNewImplTest):
417
418 def testGetApplicationPath_exists(self):
419 with self.assertShellCall('pm path android',
420 'package:/path/to/android.apk\n'):
421 self.assertEquals('/path/to/android.apk',
422 self.device.GetApplicationPath('android'))
423
424 def testGetApplicationPath_notExists(self):
425 with self.assertShellCall('pm path not.installed.app',
426 ''):
427 self.assertEquals(None,
428 self.device.GetApplicationPath('not.installed.app'))
429
430 def testGetApplicationPath_fails(self):
431 with self.assertShellCall('pm path android',
432 'ERROR. Is package manager running?\n'):
433 with self.assertRaises(device_errors.CommandFailedError):
434 self.device.GetApplicationPath('android')
435
436
437 class DeviceUtilsWaitUntilFullyBootedTest(DeviceUtilsNewImplTest):
409 438
410 def testWaitUntilFullyBooted_succeedsNoWifi(self): 439 def testWaitUntilFullyBooted_succeedsNoWifi(self):
411 with self.assertCallsSequence([ 440 with self.assertShellCallSequence([
412 # AndroidCommands.WaitForSystemBootCompleted 441 # sc_card_ready
413 ('adb -s 0123456789abcdef wait-for-device', ''), 442 ('echo $EXTERNAL_STORAGE', '/fake/storage/path\r\n'),
414 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', '1\r\n'), 443 ('ls /fake/storage/path', '/fake/storage/path\r\n'),
415 # AndroidCommands.WaitForDevicePm 444 # pm_ready
416 ('adb -s 0123456789abcdef wait-for-device', ''), 445 ('pm path android', 'package:this.is.a.test.package\r\n'),
417 ('adb -s 0123456789abcdef shell pm path android', 446 # boot_completed
418 'package:this.is.a.test.package'), 447 ('getprop sys.boot_completed', '1\r\n')]):
419 # AndroidCommands.WaitForSdCardReady
420 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'",
421 '/fake/storage/path'),
422 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'",
423 'nothing\r\n')
424 ]):
425 self.device.WaitUntilFullyBooted(wifi=False) 448 self.device.WaitUntilFullyBooted(wifi=False)
449 self.adb.WaitForDevice.assert_called_once_with()
426 450
427 def testWaitUntilFullyBooted_succeedsWithWifi(self): 451 def testWaitUntilFullyBooted_succeedsWithWifi(self):
428 with self.assertCallsSequence([ 452 with self.assertShellCallSequence([
429 # AndroidCommands.WaitForSystemBootCompleted 453 # sc_card_ready
430 ('adb -s 0123456789abcdef wait-for-device', ''), 454 ('echo $EXTERNAL_STORAGE', '/fake/storage/path\r\n'),
431 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', '1\r\n'), 455 ('ls /fake/storage/path', '/fake/storage/path\r\n'),
432 # AndroidCommands.WaitForDevicePm 456 # pm_ready
433 ('adb -s 0123456789abcdef wait-for-device', ''), 457 ('pm path android', 'package:this.is.a.test.package\r\n'),
434 ('adb -s 0123456789abcdef shell pm path android', 458 # boot_completed
435 'package:this.is.a.test.package'), 459 ('getprop sys.boot_completed', '1\r\n'),
436 # AndroidCommands.WaitForSdCardReady 460 # wifi_enabled
437 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", 461 ('dumpsys wifi', 'stuff\r\nWi-Fi is enabled\r\nmore stuff\r\n')]):
438 '/fake/storage/path'),
439 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'",
440 'nothing\r\n'),
441 # wait for wifi
442 ("adb -s 0123456789abcdef shell 'dumpsys wifi'", 'Wi-Fi is enabled')]):
443 self.device.WaitUntilFullyBooted(wifi=True) 462 self.device.WaitUntilFullyBooted(wifi=True)
463 self.adb.WaitForDevice.assert_called_once_with()
444 464
445 def testWaitUntilFullyBooted_bootFails(self): 465 def testWaitUntilFullyBooted_sdCardReadyFails_noPath(self):
466 with self.assertShellCallSequence([
467 # sc_card_ready
468 ('echo $EXTERNAL_STORAGE', '\r\n')]):
469 with self.assertRaises(device_errors.CommandFailedError):
470 self.device.WaitUntilFullyBooted(wifi=False)
471
472 def testWaitUntilFullyBooted_sdCardReadyFails_emptyPath(self):
446 with mock.patch('time.sleep'): 473 with mock.patch('time.sleep'):
447 with self.assertCallsSequence([ 474 with self.assertShellCallSequence([
448 # AndroidCommands.WaitForSystemBootCompleted 475 # sc_card_ready
449 ('adb -s 0123456789abcdef wait-for-device', ''), 476 ('echo $EXTERNAL_STORAGE', '/fake/storage/path\r\n'),
450 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', 477 ('ls /fake/storage/path', '\r\n'),
451 '0\r\n')]): 478 # sc_card_ready
479 ('ls /fake/storage/path', '\r\n'),
480 # sc_card_ready
481 ('ls /fake/storage/path', _CmdTimeout())]):
452 with self.assertRaises(device_errors.CommandTimeoutError): 482 with self.assertRaises(device_errors.CommandTimeoutError):
453 self.device.WaitUntilFullyBooted(wifi=False) 483 self.device.WaitUntilFullyBooted(wifi=False)
454 484
455 def testWaitUntilFullyBooted_devicePmFails(self): 485 def testWaitUntilFullyBooted_devicePmFails(self):
456 with mock.patch('time.sleep'): 486 with mock.patch('time.sleep'):
457 with self.assertCallsSequence([ 487 with self.assertShellCallSequence([
458 # AndroidCommands.WaitForSystemBootCompleted 488 # sc_card_ready
459 ('adb -s 0123456789abcdef wait-for-device', ''), 489 ('echo $EXTERNAL_STORAGE', '/fake/storage/path\r\n'),
460 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', 490 ('ls /fake/storage/path', '/fake/storage/path\r\n'),
461 '1\r\n')] 491 # pm_ready
462 # AndroidCommands.WaitForDevicePm 492 ('pm path android', 'Error. Is package manager running?\r\n'),
463 + 3 * ([('adb -s 0123456789abcdef wait-for-device', '')] 493 # pm_ready
464 + 24 * [('adb -s 0123456789abcdef shell pm path android', '\r\n')] 494 ('pm path android', 'Error. Is package manager running?\r\n'),
465 + [("adb -s 0123456789abcdef shell 'stop'", '\r\n'), 495 # pm_ready
466 ("adb -s 0123456789abcdef shell 'start'", '\r\n')])): 496 ('pm path android', _CmdTimeout())]):
467 with self.assertRaises(device_errors.CommandTimeoutError): 497 with self.assertRaises(device_errors.CommandTimeoutError):
468 self.device.WaitUntilFullyBooted(wifi=False) 498 self.device.WaitUntilFullyBooted(wifi=False)
469 499
470 def testWaitUntilFullyBooted_sdCardReadyFails_noPath(self): 500 def testWaitUntilFullyBooted_bootFails(self):
471 with mock.patch('time.sleep'): 501 with mock.patch('time.sleep'):
472 with self.assertCallsSequence([ 502 with self.assertShellCallSequence([
473 # AndroidCommands.WaitForSystemBootCompleted 503 # sc_card_ready
474 ('adb -s 0123456789abcdef wait-for-device', ''), 504 ('echo $EXTERNAL_STORAGE', '/fake/storage/path\r\n'),
475 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', 505 ('ls /fake/storage/path', '/fake/storage/path\r\n'),
476 '1\r\n'), 506 # pm_ready
477 # AndroidCommands.WaitForDevicePm 507 ('pm path android', 'package:this.is.a.test.package\r\n'),
478 ('adb -s 0123456789abcdef wait-for-device', ''), 508 # boot_completed
479 ('adb -s 0123456789abcdef shell pm path android', 509 ('getprop sys.boot_completed', '0\r\n'),
480 'package:this.is.a.test.package'), 510 # boot_completed
481 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", '\r\n')]): 511 ('getprop sys.boot_completed', '0\r\n'),
482 with self.assertRaises(device_errors.CommandFailedError): 512 # boot_completed
483 self.device.WaitUntilFullyBooted(wifi=False) 513 ('getprop sys.boot_completed', _CmdTimeout())]):
484
485 def testWaitUntilFullyBooted_sdCardReadyFails_emptyPath(self):
486 with mock.patch('time.sleep'):
487 with self.assertCallsSequence([
488 # AndroidCommands.WaitForSystemBootCompleted
489 ('adb -s 0123456789abcdef wait-for-device', ''),
490 ('adb -s 0123456789abcdef shell getprop sys.boot_completed',
491 '1\r\n'),
492 # AndroidCommands.WaitForDevicePm
493 ('adb -s 0123456789abcdef wait-for-device', ''),
494 ('adb -s 0123456789abcdef shell pm path android',
495 'package:this.is.a.test.package'),
496 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'",
497 '/fake/storage/path\r\n'),
498 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", '')]):
499 with self.assertRaises(device_errors.CommandTimeoutError): 514 with self.assertRaises(device_errors.CommandTimeoutError):
500 self.device.WaitUntilFullyBooted(wifi=False) 515 self.device.WaitUntilFullyBooted(wifi=False)
501 516
517 def testWaitUntilFullyBooted_wifiFails(self):
518 with mock.patch('time.sleep'):
519 with self.assertShellCallSequence([
520 # sc_card_ready
521 ('echo $EXTERNAL_STORAGE', '/fake/storage/path\r\n'),
522 ('ls /fake/storage/path', '/fake/storage/path\r\n'),
523 # pm_ready
524 ('pm path android', 'package:this.is.a.test.package\r\n'),
525 # boot_completed
526 ('getprop sys.boot_completed', '1\r\n'),
527 # wifi_enabled
528 ('dumpsys wifi', 'stuff\r\nmore stuff\r\n'),
529 # wifi_enabled
530 ('dumpsys wifi', 'stuff\r\nmore stuff\r\n'),
531 # wifi_enabled
532 ('dumpsys wifi', _CmdTimeout())]):
533 with self.assertRaises(device_errors.CommandTimeoutError):
534 self.device.WaitUntilFullyBooted(wifi=True)
502 535
503 class DeviceUtilsRebootTest(DeviceUtilsOldImplTest): 536
537 class DeviceUtilsRebootTest(DeviceUtilsNewImplTest):
504 538
505 def testReboot_nonBlocking(self): 539 def testReboot_nonBlocking(self):
506 with mock.patch('time.sleep'): 540 self.adb.Reboot = mock.Mock()
507 with self.assertCallsSequence([ 541 self.device.IsOnline = mock.Mock(return_value=False)
508 ('adb -s 0123456789abcdef reboot', ''), 542 self.device.Reboot(block=False)
509 ('adb -s 0123456789abcdef devices', 'unknown\r\n'), 543 self.adb.Reboot.assert_called_once_with()
510 ('adb -s 0123456789abcdef wait-for-device', ''), 544 self.device.IsOnline.assert_called_once_with()
511 ('adb -s 0123456789abcdef shell pm path android',
512 'package:this.is.a.test.package'),
513 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'",
514 '/fake/storage/path\r\n'),
515 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'",
516 'nothing\r\n')]):
517 self.device.Reboot(block=False)
518 545
519 def testReboot_blocking(self): 546 def testReboot_blocking(self):
520 with mock.patch('time.sleep'): 547 self.adb.Reboot = mock.Mock()
521 with self.assertCallsSequence([ 548 self.device.IsOnline = mock.Mock(return_value=False)
522 ('adb -s 0123456789abcdef reboot', ''), 549 with self.assertShellCallSequence([
523 ('adb -s 0123456789abcdef devices', 'unknown\r\n'), 550 # sc_card_ready
524 ('adb -s 0123456789abcdef wait-for-device', ''), 551 ('echo $EXTERNAL_STORAGE', '/fake/storage/path\r\n'),
525 ('adb -s 0123456789abcdef shell pm path android', 552 ('ls /fake/storage/path', '/fake/storage/path\r\n'),
526 'package:this.is.a.test.package'), 553 # pm_ready
527 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", 554 ('pm path android', 'package:this.is.a.test.package\r\n'),
528 '/fake/storage/path\r\n'), 555 # boot_completed
529 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", 556 ('getprop sys.boot_completed', '1\r\n')]):
530 'nothing\r\n'), 557 self.device.Reboot(block=True)
531 ('adb -s 0123456789abcdef wait-for-device', ''), 558 self.adb.Reboot.assert_called_once_with()
532 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', 559 self.device.IsOnline.assert_called_once_with()
533 '1\r\n'), 560 self.adb.WaitForDevice.assert_called_once_with()
534 ('adb -s 0123456789abcdef wait-for-device', ''),
535 ('adb -s 0123456789abcdef shell pm path android',
536 'package:this.is.a.test.package'),
537 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'",
538 'nothing\r\n')]):
539 self.device.Reboot(block=True)
540 561
541 562
542 class DeviceUtilsInstallTest(DeviceUtilsOldImplTest): 563 class DeviceUtilsInstallTest(DeviceUtilsOldImplTest):
543 564
544 def testInstall_noPriorInstall(self): 565 def testInstall_noPriorInstall(self):
545 with mock.patch('os.path.isfile', return_value=True), ( 566 with mock.patch('os.path.isfile', return_value=True), (
546 mock.patch('pylib.utils.apk_helper.GetPackageName', 567 mock.patch('pylib.utils.apk_helper.GetPackageName',
547 return_value='this.is.a.test.package')): 568 return_value='this.is.a.test.package')):
548 with self.assertCallsSequence([ 569 with self.assertCallsSequence([
549 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", 570 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'",
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 with self.assertShellCall(cmd, '\r\n'): 712 with self.assertShellCall(cmd, '\r\n'):
692 self.assertEquals('', 713 self.assertEquals('',
693 self.device.RunShellCommand(cmd, single_line=True)) 714 self.device.RunShellCommand(cmd, single_line=True))
694 715
695 def testRunShellCommand_singleLine_successWithoutEndLine(self): 716 def testRunShellCommand_singleLine_successWithoutEndLine(self):
696 cmd = 'echo -n $VALUE' 717 cmd = 'echo -n $VALUE'
697 with self.assertShellCall(cmd, 'some value'): 718 with self.assertShellCall(cmd, 'some value'):
698 self.assertEquals('some value', 719 self.assertEquals('some value',
699 self.device.RunShellCommand(cmd, single_line=True)) 720 self.device.RunShellCommand(cmd, single_line=True))
700 721
701 def testRunShellCommand_singleLine_failNoLines(self): 722 def testRunShellCommand_singleLine_successNoOutput(self):
702 cmd = 'echo $VALUE' 723 cmd = 'echo -n $VALUE'
703 with self.assertShellCall(cmd, ''): 724 with self.assertShellCall(cmd, ''):
704 with self.assertRaises(device_errors.CommandFailedError): 725 self.assertEquals('',
705 self.device.RunShellCommand(cmd, single_line=True) 726 self.device.RunShellCommand(cmd, single_line=True))
706 727
707 def testRunShellCommand_singleLine_failTooManyLines(self): 728 def testRunShellCommand_singleLine_failTooManyLines(self):
708 cmd = 'echo $VALUE' 729 cmd = 'echo $VALUE'
709 with self.assertShellCall(cmd, 'some value\r\nanother value\r\n'): 730 with self.assertShellCall(cmd, 'some value\r\nanother value\r\n'):
710 with self.assertRaises(device_errors.CommandFailedError): 731 with self.assertRaises(device_errors.CommandFailedError):
711 self.device.RunShellCommand(cmd, single_line=True) 732 self.device.RunShellCommand(cmd, single_line=True)
712 733
713 def testRunShellCommand_checkReturn_success(self): 734 def testRunShellCommand_checkReturn_success(self):
714 cmd = 'echo $ANDROID_DATA' 735 cmd = 'echo $ANDROID_DATA'
715 output = '/data\r\n' 736 output = '/data\r\n'
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 def testPushChangedFilesZipped_empty(self): 1082 def testPushChangedFilesZipped_empty(self):
1062 test_files = [] 1083 test_files = []
1063 self.device._PushChangedFilesZipped(test_files) 1084 self.device._PushChangedFilesZipped(test_files)
1064 self.assertEqual(0, self.adb.Push.call_count) 1085 self.assertEqual(0, self.adb.Push.call_count)
1065 1086
1066 def testPushChangedFilesZipped_single(self): 1087 def testPushChangedFilesZipped_single(self):
1067 test_files = [('/test/host/path/file1', '/test/device/path/file1')] 1088 test_files = [('/test/host/path/file1', '/test/device/path/file1')]
1068 1089
1069 self.device._GetExternalStoragePathImpl = mock.Mock( 1090 self.device._GetExternalStoragePathImpl = mock.Mock(
1070 return_value='/test/device/external_dir') 1091 return_value='/test/device/external_dir')
1071 self.device._IsOnlineImpl = mock.Mock(return_value=True) 1092 self.device.IsOnline = mock.Mock(return_value=True)
1072 self.device._RunShellCommandImpl = mock.Mock() 1093 self.device._RunShellCommandImpl = mock.Mock()
1073 mock_zip_temp = mock.mock_open() 1094 mock_zip_temp = mock.mock_open()
1074 mock_zip_temp.return_value.name = '/test/temp/file/tmp.zip' 1095 mock_zip_temp.return_value.name = '/test/temp/file/tmp.zip'
1075 with mock.patch('multiprocessing.Process') as mock_zip_proc, ( 1096 with mock.patch('multiprocessing.Process') as mock_zip_proc, (
1076 mock.patch('tempfile.NamedTemporaryFile', mock_zip_temp)): 1097 mock.patch('tempfile.NamedTemporaryFile', mock_zip_temp)):
1077 self.device._PushChangedFilesZipped(test_files) 1098 self.device._PushChangedFilesZipped(test_files)
1078 1099
1079 mock_zip_proc.assert_called_once_with( 1100 mock_zip_proc.assert_called_once_with(
1080 target=device_utils.DeviceUtils._CreateDeviceZip, 1101 target=device_utils.DeviceUtils._CreateDeviceZip,
1081 args=('/test/temp/file/tmp.zip', test_files)) 1102 args=('/test/temp/file/tmp.zip', test_files))
1082 self.adb.Push.assert_called_once_with( 1103 self.adb.Push.assert_called_once_with(
1083 '/test/temp/file/tmp.zip', '/test/device/external_dir/tmp.zip') 1104 '/test/temp/file/tmp.zip', '/test/device/external_dir/tmp.zip')
1084 self.assertEqual(2, self.device._RunShellCommandImpl.call_count) 1105 self.assertEqual(2, self.device._RunShellCommandImpl.call_count)
1085 self.device._RunShellCommandImpl.assert_any_call( 1106 self.device._RunShellCommandImpl.assert_any_call(
1086 ['unzip', '/test/device/external_dir/tmp.zip'], 1107 ['unzip', '/test/device/external_dir/tmp.zip'],
1087 as_root=True, 1108 as_root=True,
1088 env={'PATH': '$PATH:/data/local/tmp/bin'}, 1109 env={'PATH': '$PATH:/data/local/tmp/bin'},
1089 check_return=True) 1110 check_return=True)
1090 self.device._RunShellCommandImpl.assert_any_call( 1111 self.device._RunShellCommandImpl.assert_any_call(
1091 ['rm', '/test/device/external_dir/tmp.zip'], check_return=True) 1112 ['rm', '/test/device/external_dir/tmp.zip'], check_return=True)
1092 1113
1093 def testPushChangedFilesZipped_multiple(self): 1114 def testPushChangedFilesZipped_multiple(self):
1094 test_files = [('/test/host/path/file1', '/test/device/path/file1'), 1115 test_files = [('/test/host/path/file1', '/test/device/path/file1'),
1095 ('/test/host/path/file2', '/test/device/path/file2')] 1116 ('/test/host/path/file2', '/test/device/path/file2')]
1096 1117
1097 self.device._GetExternalStoragePathImpl = mock.Mock( 1118 self.device._GetExternalStoragePathImpl = mock.Mock(
1098 return_value='/test/device/external_dir') 1119 return_value='/test/device/external_dir')
1099 self.device._IsOnlineImpl = mock.Mock(return_value=True) 1120 self.device.IsOnline = mock.Mock(return_value=True)
1100 self.device._RunShellCommandImpl = mock.Mock() 1121 self.device._RunShellCommandImpl = mock.Mock()
1101 mock_zip_temp = mock.mock_open() 1122 mock_zip_temp = mock.mock_open()
1102 mock_zip_temp.return_value.name = '/test/temp/file/tmp.zip' 1123 mock_zip_temp.return_value.name = '/test/temp/file/tmp.zip'
1103 with mock.patch('multiprocessing.Process') as mock_zip_proc, ( 1124 with mock.patch('multiprocessing.Process') as mock_zip_proc, (
1104 mock.patch('tempfile.NamedTemporaryFile', mock_zip_temp)): 1125 mock.patch('tempfile.NamedTemporaryFile', mock_zip_temp)):
1105 self.device._PushChangedFilesZipped(test_files) 1126 self.device._PushChangedFilesZipped(test_files)
1106 1127
1107 mock_zip_proc.assert_called_once_with( 1128 mock_zip_proc.assert_called_once_with(
1108 target=device_utils.DeviceUtils._CreateDeviceZip, 1129 target=device_utils.DeviceUtils._CreateDeviceZip,
1109 args=('/test/temp/file/tmp.zip', test_files)) 1130 args=('/test/temp/file/tmp.zip', test_files))
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 '%s\r\n' % constants.DEVICE_LOCAL_PROPERTIES_PATH), 1497 '%s\r\n' % constants.DEVICE_LOCAL_PROPERTIES_PATH),
1477 ('adb -s 0123456789abcdef pull %s %s' % 1498 ('adb -s 0123456789abcdef pull %s %s' %
1478 (constants.DEVICE_LOCAL_PROPERTIES_PATH, mock_file.name), 1499 (constants.DEVICE_LOCAL_PROPERTIES_PATH, mock_file.name),
1479 '100 B/s (100 bytes in 1.000s)\r\n'), 1500 '100 B/s (100 bytes in 1.000s)\r\n'),
1480 ('adb -s 0123456789abcdef shell ' 1501 ('adb -s 0123456789abcdef shell '
1481 'getprop dalvik.vm.enableassertions', 1502 'getprop dalvik.vm.enableassertions',
1482 'all\r\n')]): 1503 'all\r\n')]):
1483 self.assertFalse(self.device.SetJavaAsserts(True)) 1504 self.assertFalse(self.device.SetJavaAsserts(True))
1484 1505
1485 1506
1486 class DeviceUtilsGetPropTest(DeviceUtilsOldImplTest): 1507 class DeviceUtilsGetPropTest(DeviceUtilsNewImplTest):
1487 1508
1488 def testGetProp_exists(self): 1509 def testGetProp_exists(self):
1489 with self.assertCalls( 1510 with self.assertShellCall('getprop this.is.a.test.property',
1490 'adb -s 0123456789abcdef shell getprop this.is.a.test.property', 1511 'test_property_value\r\n'):
1491 'test_property_value\r\n'):
1492 self.assertEqual('test_property_value', 1512 self.assertEqual('test_property_value',
1493 self.device.GetProp('this.is.a.test.property')) 1513 self.device.GetProp('this.is.a.test.property'))
1494 1514
1495 def testGetProp_doesNotExist(self): 1515 def testGetProp_doesNotExist(self):
1496 with self.assertCalls( 1516 with self.assertShellCall('getprop this.property.does.not.exist',
1497 'adb -s 0123456789abcdef shell ' 1517 '\r\n'):
1498 'getprop this.property.does.not.exist', ''):
1499 self.assertEqual('', self.device.GetProp('this.property.does.not.exist')) 1518 self.assertEqual('', self.device.GetProp('this.property.does.not.exist'))
1500 1519
1501 def testGetProp_cachedRoProp(self): 1520 def testGetProp_cachedRoProp(self):
1502 with self.assertCalls( 1521 with self.assertShellCall('getprop ro.build.type',
1503 'adb -s 0123456789abcdef shell ' 1522 'userdebug\r\n'):
1504 'getprop ro.build.type', 'userdebug'): 1523 self.assertEqual('userdebug',
1505 self.assertEqual('userdebug', self.device.GetProp('ro.build.type')) 1524 self.device.GetProp('ro.build.type', cache=True))
1506 self.assertEqual('userdebug', self.device.GetProp('ro.build.type')) 1525 self.assertEqual('userdebug',
1526 self.device.GetProp('ro.build.type', cache=True))
1527
1528 def testGetProp_retryAndCache(self):
1529 with self.assertShellCallSequence([
1530 ('getprop ro.build.type', _ShellError()),
1531 ('getprop ro.build.type', _ShellError()),
1532 ('getprop ro.build.type', 'userdebug\r\n')]):
1533 self.assertEqual('userdebug',
1534 self.device.GetProp('ro.build.type',
1535 cache=True, retries=3))
1536 self.assertEqual('userdebug',
1537 self.device.GetProp('ro.build.type',
1538 cache=True, retries=3))
1507 1539
1508 1540
1509 class DeviceUtilsSetPropTest(DeviceUtilsOldImplTest): 1541 class DeviceUtilsSetPropTest(DeviceUtilsNewImplTest):
1510 1542
1511 def testSetProp(self): 1543 def testSetProp(self):
1512 with self.assertCalls( 1544 with self.assertShellCall(
1513 'adb -s 0123456789abcdef shell ' 1545 "setprop this.is.a.test.property 'test property value'"):
1514 'setprop this.is.a.test.property "test_property_value"', 1546 self.device.SetProp('this.is.a.test.property', 'test property value')
1515 ''):
1516 self.device.SetProp('this.is.a.test.property', 'test_property_value')
1517 1547
1518 1548
1519 class DeviceUtilsGetPidsTest(DeviceUtilsNewImplTest): 1549 class DeviceUtilsGetPidsTest(DeviceUtilsNewImplTest):
1520 1550
1521 def testGetPids_noMatches(self): 1551 def testGetPids_noMatches(self):
1522 with self.assertShellCall( 1552 with self.assertShellCall(
1523 'ps', 1553 'ps',
1524 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' 1554 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n'
1525 'user 1000 100 1024 1024 ffffffff 00000000 no.match\r\n'): 1555 'user 1000 100 1024 1024 ffffffff 00000000 no.match\r\n'):
1526 self.assertEqual({}, self.device.GetPids('does.not.match')) 1556 self.assertEqual({}, self.device.GetPids('does.not.match'))
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1646 self.device = device_utils.DeviceUtils(None) 1676 self.device = device_utils.DeviceUtils(None)
1647 with self.assertCalls('adb get-serialno', 'unknown'), ( 1677 with self.assertCalls('adb get-serialno', 'unknown'), (
1648 self.assertRaises(device_errors.NoDevicesError)): 1678 self.assertRaises(device_errors.NoDevicesError)):
1649 str(self.device) 1679 str(self.device)
1650 1680
1651 1681
1652 if __name__ == '__main__': 1682 if __name__ == '__main__':
1653 logging.getLogger().setLevel(logging.DEBUG) 1683 logging.getLogger().setLevel(logging.DEBUG)
1654 unittest.main(verbosity=2) 1684 unittest.main(verbosity=2)
1655 1685
OLDNEW
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/gtest/setup.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698