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

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

Issue 1077173002: [Android] Tune DeviceUtils commands that are prone to large outputs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View 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 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 (mock.call.pylib.constants.GetOutDirectory(), '/foo/bar'), 635 (mock.call.pylib.constants.GetOutDirectory(), '/foo/bar'),
636 (mock.call.os.path.exists(mock.ANY), True), 636 (mock.call.os.path.exists(mock.ANY), True),
637 (self.call.adb.Push(mock.ANY, mock.ANY), '')): 637 (self.call.adb.Push(mock.ANY, mock.ANY), '')):
638 self.assertNotEqual('', self.device.GetDevicePieWrapper()) 638 self.assertNotEqual('', self.device.GetDevicePieWrapper())
639 639
640 640
641 @mock.patch('time.sleep', mock.Mock()) 641 @mock.patch('time.sleep', mock.Mock())
642 class DeviceUtilsKillAllTest(DeviceUtilsTest): 642 class DeviceUtilsKillAllTest(DeviceUtilsTest):
643 643
644 def testKillAll_noMatchingProcesses(self): 644 def testKillAll_noMatchingProcesses(self):
645 with self.assertCall(self.call.adb.Shell('ps'), 645 with self.assertCall(self.call.device.GetPids('test_process'), []):
646 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'):
647 with self.assertRaises(device_errors.CommandFailedError): 646 with self.assertRaises(device_errors.CommandFailedError):
648 self.device.KillAll('test_process') 647 self.device.KillAll('test_process')
649 648
650 def testKillAll_nonblocking(self): 649 def testKillAll_nonblocking(self):
651 with self.assertCalls( 650 with self.assertCalls(
652 (self.call.adb.Shell('ps'), 651 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
653 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'
654 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'),
655 (self.call.adb.Shell('kill -9 1234'), '')): 652 (self.call.adb.Shell('kill -9 1234'), '')):
656 self.assertEquals(1, 653 self.assertEquals(
657 self.device.KillAll('some.process', blocking=False)) 654 1, self.device.KillAll('some.process', blocking=False))
658 655
659 def testKillAll_blocking(self): 656 def testKillAll_blocking(self):
660 with self.assertCalls( 657 with self.assertCalls(
661 (self.call.adb.Shell('ps'), 658 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
662 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'
663 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'),
664 (self.call.adb.Shell('kill -9 1234'), ''), 659 (self.call.adb.Shell('kill -9 1234'), ''),
665 (self.call.adb.Shell('ps'), 660 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
666 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 661 (self.call.device.GetPids('some.process'), [])):
667 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'), 662 self.assertEquals(
668 (self.call.adb.Shell('ps'), 663 1, self.device.KillAll('some.process', blocking=True))
669 'USER PID PPID VSIZE RSS WCHAN PC NAME\n')):
670 self.assertEquals(1,
671 self.device.KillAll('some.process', blocking=True))
672 664
673 def testKillAll_root(self): 665 def testKillAll_root(self):
674 with self.assertCalls( 666 with self.assertCalls(
675 (self.call.adb.Shell('ps'), 667 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
676 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'
677 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'),
678 (self.call.device.NeedsSU(), True), 668 (self.call.device.NeedsSU(), True),
679 (self.call.adb.Shell("su -c sh -c 'kill -9 1234'"), '')): 669 (self.call.adb.Shell("su -c sh -c 'kill -9 1234'"), '')):
680 self.assertEquals(1, 670 self.assertEquals(
681 self.device.KillAll('some.process', as_root=True)) 671 1, self.device.KillAll('some.process', as_root=True))
682 672
683 def testKillAll_sigterm(self): 673 def testKillAll_sigterm(self):
684 with self.assertCalls( 674 with self.assertCalls(
685 (self.call.adb.Shell('ps'), 675 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
686 'USER PID PPID VSIZE RSS WCHAN PC NAME\n'
687 'u0_a1 1234 174 123456 54321 ffffffff 456789ab some.process\n'),
688 (self.call.adb.Shell('kill -15 1234'), '')): 676 (self.call.adb.Shell('kill -15 1234'), '')):
689 self.assertEquals(1, 677 self.assertEquals(
690 self.device.KillAll('some.process', signum=signal.SIGTERM)) 678 1, self.device.KillAll('some.process', signum=signal.SIGTERM))
691 679
692 680
693 class DeviceUtilsStartActivityTest(DeviceUtilsTest): 681 class DeviceUtilsStartActivityTest(DeviceUtilsTest):
694 682
695 def testStartActivity_actionOnly(self): 683 def testStartActivity_actionOnly(self):
696 test_intent = intent.Intent(action='android.intent.action.VIEW') 684 test_intent = intent.Intent(action='android.intent.action.VIEW')
697 with self.assertCall( 685 with self.assertCall(
698 self.call.adb.Shell('am start ' 686 self.call.adb.Shell('am start '
699 '-a android.intent.action.VIEW'), 687 '-a android.intent.action.VIEW'),
700 'Starting: Intent { act=android.intent.action.VIEW }'): 688 'Starting: Intent { act=android.intent.action.VIEW }'):
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 with self.assertRaises(device_errors.CommandFailedError): 1096 with self.assertRaises(device_errors.CommandFailedError):
1109 self.device._ReadFileWithPull('/path/to/device/file') 1097 self.device._ReadFileWithPull('/path/to/device/file')
1110 1098
1111 def testReadFile_exists(self): 1099 def testReadFile_exists(self):
1112 with self.assertCalls( 1100 with self.assertCalls(
1113 (self.call.device.RunShellCommand( 1101 (self.call.device.RunShellCommand(
1114 ['ls', '-l', '/read/this/test/file'], 1102 ['ls', '-l', '/read/this/test/file'],
1115 as_root=False, check_return=True), 1103 as_root=False, check_return=True),
1116 ['-rw-rw---- root foo 256 1970-01-01 00:00 file']), 1104 ['-rw-rw---- root foo 256 1970-01-01 00:00 file']),
1117 (self.call.device.RunShellCommand( 1105 (self.call.device.RunShellCommand(
1118 ['cat', '/read/this/test/file'], as_root=False, check_return=True), 1106 ['cat', '/read/this/test/file'],
1107 as_root=False, check_return=True, large_output=False),
1119 ['this is a test file'])): 1108 ['this is a test file'])):
1120 self.assertEqual('this is a test file\n', 1109 self.assertEqual('this is a test file\n',
1121 self.device.ReadFile('/read/this/test/file')) 1110 self.device.ReadFile('/read/this/test/file'))
1122 1111
1123 def testReadFile_doesNotExist(self): 1112 def testReadFile_doesNotExist(self):
1124 with self.assertCall( 1113 with self.assertCall(
1125 self.call.device.RunShellCommand( 1114 self.call.device.RunShellCommand(
1126 ['ls', '-l', '/this/file/does.not.exist'], 1115 ['ls', '-l', '/this/file/does.not.exist'],
1127 as_root=False, check_return=True), 1116 as_root=False, check_return=True),
1128 self.CommandError('File does not exist')): 1117 self.CommandError('File does not exist')):
1129 with self.assertRaises(device_errors.CommandFailedError): 1118 with self.assertRaises(device_errors.CommandFailedError):
1130 self.device.ReadFile('/this/file/does.not.exist') 1119 self.device.ReadFile('/this/file/does.not.exist')
1131 1120
1121 def testReadFile_zeroSize(self):
1122 with self.assertCalls(
1123 (self.call.device.RunShellCommand(
1124 ['ls', '-l', '/this/file/has/zero/size'],
1125 as_root=False, check_return=True),
1126 ['-r--r--r-- root foo 0 1970-01-01 00:00 zero_size_file']),
1127 (self.call.device.RunShellCommand(
1128 ['cat', '/this/file/has/zero/size'],
1129 as_root=False, check_return=True, large_output=True),
1130 ['but it has contents'])):
1131 self.assertEqual('but it has contents\n',
1132 self.device.ReadFile('/this/file/has/zero/size'))
1133
1132 def testReadFile_withSU(self): 1134 def testReadFile_withSU(self):
1133 with self.assertCalls( 1135 with self.assertCalls(
1134 (self.call.device.RunShellCommand( 1136 (self.call.device.RunShellCommand(
1135 ['ls', '-l', '/this/file/can.be.read.with.su'], 1137 ['ls', '-l', '/this/file/can.be.read.with.su'],
1136 as_root=True, check_return=True), 1138 as_root=True, check_return=True),
1137 ['-rw------- root root 256 1970-01-01 00:00 can.be.read.with.su']), 1139 ['-rw------- root root 256 1970-01-01 00:00 can.be.read.with.su']),
1138 (self.call.device.RunShellCommand( 1140 (self.call.device.RunShellCommand(
1139 ['cat', '/this/file/can.be.read.with.su'], 1141 ['cat', '/this/file/can.be.read.with.su'],
1140 as_root=True, check_return=True), 1142 as_root=True, check_return=True, large_output=False),
1141 ['this is a test file', 'read with su'])): 1143 ['this is a test file', 'read with su'])):
1142 self.assertEqual( 1144 self.assertEqual(
1143 'this is a test file\nread with su\n', 1145 'this is a test file\nread with su\n',
1144 self.device.ReadFile('/this/file/can.be.read.with.su', 1146 self.device.ReadFile('/this/file/can.be.read.with.su',
1145 as_root=True)) 1147 as_root=True))
1146 1148
1147 def testReadFile_withPull(self): 1149 def testReadFile_withPull(self):
1148 contents = 'a' * 123456 1150 contents = 'a' * 123456
1149 with self.assertCalls( 1151 with self.assertCalls(
1150 (self.call.device.RunShellCommand( 1152 (self.call.device.RunShellCommand(
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 with self.assertCalls( 1382 with self.assertCalls(
1381 (self.call.adb.Shell('setprop test.property new_value'), ''), 1383 (self.call.adb.Shell('setprop test.property new_value'), ''),
1382 (self.call.adb.Shell('getprop test.property'), 'old_value')): 1384 (self.call.adb.Shell('getprop test.property'), 'old_value')):
1383 with self.assertRaises(device_errors.CommandFailedError): 1385 with self.assertRaises(device_errors.CommandFailedError):
1384 self.device.SetProp('test.property', 'new_value', check=True) 1386 self.device.SetProp('test.property', 'new_value', check=True)
1385 1387
1386 1388
1387 class DeviceUtilsGetPidsTest(DeviceUtilsTest): 1389 class DeviceUtilsGetPidsTest(DeviceUtilsTest):
1388 1390
1389 def testGetPids_noMatches(self): 1391 def testGetPids_noMatches(self):
1390 with self.assertCall(self.call.adb.Shell('ps'), 1392 with self.assertCall(
1391 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1393 self.call.device.RunShellCommand(
1392 'user 1000 100 1024 1024 ffffffff 00000000 no.match\n'): 1394 'ps', check_return=True, large_output=True),
1395 ['USER PID PPID VSIZE RSS WCHAN PC NAME',
1396 'user 1000 100 1024 1024 ffffffff 00000000 no.match']):
1393 self.assertEqual({}, self.device.GetPids('does.not.match')) 1397 self.assertEqual({}, self.device.GetPids('does.not.match'))
1394 1398
1395 def testGetPids_oneMatch(self): 1399 def testGetPids_oneMatch(self):
1396 with self.assertCall(self.call.adb.Shell('ps'), 1400 with self.assertCall(
1397 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1401 self.call.device.RunShellCommand(
1398 'user 1000 100 1024 1024 ffffffff 00000000 not.a.match\n' 1402 'ps', check_return=True, large_output=True),
1399 'user 1001 100 1024 1024 ffffffff 00000000 one.match\n'): 1403 ['USER PID PPID VSIZE RSS WCHAN PC NAME',
1404 'user 1000 100 1024 1024 ffffffff 00000000 not.a.match',
1405 'user 1001 100 1024 1024 ffffffff 00000000 one.match']):
1400 self.assertEqual({'one.match': '1001'}, self.device.GetPids('one.match')) 1406 self.assertEqual({'one.match': '1001'}, self.device.GetPids('one.match'))
1401 1407
1402 def testGetPids_mutlipleMatches(self): 1408 def testGetPids_mutlipleMatches(self):
1403 with self.assertCall(self.call.adb.Shell('ps'), 1409 with self.assertCall(
1404 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1410 self.call.device.RunShellCommand(
1405 'user 1000 100 1024 1024 ffffffff 00000000 not\n' 1411 'ps', check_return=True, large_output=True),
1406 'user 1001 100 1024 1024 ffffffff 00000000 one.match\n' 1412 ['USER PID PPID VSIZE RSS WCHAN PC NAME',
1407 'user 1002 100 1024 1024 ffffffff 00000000 two.match\n' 1413 'user 1000 100 1024 1024 ffffffff 00000000 not',
1408 'user 1003 100 1024 1024 ffffffff 00000000 three.match\n'): 1414 'user 1001 100 1024 1024 ffffffff 00000000 one.match',
1415 'user 1002 100 1024 1024 ffffffff 00000000 two.match',
1416 'user 1003 100 1024 1024 ffffffff 00000000 three.match']):
1409 self.assertEqual( 1417 self.assertEqual(
1410 {'one.match': '1001', 'two.match': '1002', 'three.match': '1003'}, 1418 {'one.match': '1001', 'two.match': '1002', 'three.match': '1003'},
1411 self.device.GetPids('match')) 1419 self.device.GetPids('match'))
1412 1420
1413 def testGetPids_exactMatch(self): 1421 def testGetPids_exactMatch(self):
1414 with self.assertCall(self.call.adb.Shell('ps'), 1422 with self.assertCall(
1415 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1423 self.call.device.RunShellCommand(
1416 'user 1000 100 1024 1024 ffffffff 00000000 not.exact.match\n' 1424 'ps', check_return=True, large_output=True),
1417 'user 1234 100 1024 1024 ffffffff 00000000 exact.match\n'): 1425 ['USER PID PPID VSIZE RSS WCHAN PC NAME',
1426 'user 1000 100 1024 1024 ffffffff 00000000 not.exact.match',
1427 'user 1234 100 1024 1024 ffffffff 00000000 exact.match']):
1418 self.assertEqual( 1428 self.assertEqual(
1419 {'not.exact.match': '1000', 'exact.match': '1234'}, 1429 {'not.exact.match': '1000', 'exact.match': '1234'},
1420 self.device.GetPids('exact.match')) 1430 self.device.GetPids('exact.match'))
1421 1431
1422 1432
1423 class DeviceUtilsTakeScreenshotTest(DeviceUtilsTest): 1433 class DeviceUtilsTakeScreenshotTest(DeviceUtilsTest):
1424 1434
1425 def testTakeScreenshot_fileNameProvided(self): 1435 def testTakeScreenshot_fileNameProvided(self):
1426 with self.assertCalls( 1436 with self.assertCalls(
1427 (mock.call.pylib.utils.device_temp_file.DeviceTempFile( 1437 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(
1428 self.adb, suffix='.png'), 1438 self.adb, suffix='.png'),
1429 MockTempFile('/tmp/path/temp-123.png')), 1439 MockTempFile('/tmp/path/temp-123.png')),
1430 (self.call.adb.Shell('/system/bin/screencap -p /tmp/path/temp-123.png'), 1440 (self.call.adb.Shell('/system/bin/screencap -p /tmp/path/temp-123.png'),
1431 ''), 1441 ''),
1432 self.call.device.PullFile('/tmp/path/temp-123.png', 1442 self.call.device.PullFile('/tmp/path/temp-123.png',
1433 '/test/host/screenshot.png')): 1443 '/test/host/screenshot.png')):
1434 self.device.TakeScreenshot('/test/host/screenshot.png') 1444 self.device.TakeScreenshot('/test/host/screenshot.png')
1435 1445
1436 1446
1437 class DeviceUtilsGetMemoryUsageForPidTest(DeviceUtilsTest): 1447 class DeviceUtilsGetMemoryUsageForPidTest(DeviceUtilsTest):
1438 1448
1439 def setUp(self): 1449 def setUp(self):
1440 super(DeviceUtilsGetMemoryUsageForPidTest, self).setUp() 1450 super(DeviceUtilsGetMemoryUsageForPidTest, self).setUp()
1441 1451
1442 def testGetMemoryUsageForPid_validPid(self): 1452 def testGetMemoryUsageForPid_validPid(self):
1443 with self.assertCalls( 1453 with self.assertCalls(
1444 (self.call.device.RunShellCommand( 1454 (self.call.device.RunShellCommand(
1445 ['showmap', '1234'], as_root=True, check_return=True), 1455 ['showmap', '1234'],
1456 as_root=True, check_return=True, large_output=True),
1446 ['100 101 102 103 104 105 106 107 TOTAL']), 1457 ['100 101 102 103 104 105 106 107 TOTAL']),
1447 (self.call.device.ReadFile('/proc/1234/status', as_root=True), 1458 (self.call.device.ReadFile('/proc/1234/status', as_root=True),
1448 'VmHWM: 1024 kB\n')): 1459 'VmHWM: 1024 kB\n')):
1449 self.assertEqual( 1460 self.assertEqual(
1450 { 1461 {
1451 'Size': 100, 1462 'Size': 100,
1452 'Rss': 101, 1463 'Rss': 101,
1453 'Pss': 102, 1464 'Pss': 102,
1454 'Shared_Clean': 103, 1465 'Shared_Clean': 103,
1455 'Shared_Dirty': 104, 1466 'Shared_Dirty': 104,
1456 'Private_Clean': 105, 1467 'Private_Clean': 105,
1457 'Private_Dirty': 106, 1468 'Private_Dirty': 106,
1458 'VmHWM': 1024 1469 'VmHWM': 1024
1459 }, 1470 },
1460 self.device.GetMemoryUsageForPid(1234)) 1471 self.device.GetMemoryUsageForPid(1234))
1461 1472
1462 def testGetMemoryUsageForPid_noSmaps(self): 1473 def testGetMemoryUsageForPid_noSmaps(self):
1463 with self.assertCalls( 1474 with self.assertCalls(
1464 (self.call.device.RunShellCommand( 1475 (self.call.device.RunShellCommand(
1465 ['showmap', '4321'], as_root=True, check_return=True), 1476 ['showmap', '4321'],
1477 as_root=True, check_return=True, large_output=True),
1466 ['cannot open /proc/4321/smaps: No such file or directory']), 1478 ['cannot open /proc/4321/smaps: No such file or directory']),
1467 (self.call.device.ReadFile('/proc/4321/status', as_root=True), 1479 (self.call.device.ReadFile('/proc/4321/status', as_root=True),
1468 'VmHWM: 1024 kb\n')): 1480 'VmHWM: 1024 kb\n')):
1469 self.assertEquals({'VmHWM': 1024}, self.device.GetMemoryUsageForPid(4321)) 1481 self.assertEquals({'VmHWM': 1024}, self.device.GetMemoryUsageForPid(4321))
1470 1482
1471 def testGetMemoryUsageForPid_noStatus(self): 1483 def testGetMemoryUsageForPid_noStatus(self):
1472 with self.assertCalls( 1484 with self.assertCalls(
1473 (self.call.device.RunShellCommand( 1485 (self.call.device.RunShellCommand(
1474 ['showmap', '4321'], as_root=True, check_return=True), 1486 ['showmap', '4321'],
1487 as_root=True, check_return=True, large_output=True),
1475 ['100 101 102 103 104 105 106 107 TOTAL']), 1488 ['100 101 102 103 104 105 106 107 TOTAL']),
1476 (self.call.device.ReadFile('/proc/4321/status', as_root=True), 1489 (self.call.device.ReadFile('/proc/4321/status', as_root=True),
1477 self.CommandError())): 1490 self.CommandError())):
1478 self.assertEquals( 1491 self.assertEquals(
1479 { 1492 {
1480 'Size': 100, 1493 'Size': 100,
1481 'Rss': 101, 1494 'Rss': 101,
1482 'Pss': 102, 1495 'Pss': 102,
1483 'Shared_Clean': 103, 1496 'Shared_Clean': 103,
1484 'Shared_Dirty': 104, 1497 'Shared_Dirty': 104,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 self.assertEqual(client_cache_one, {'test': 1}) 1553 self.assertEqual(client_cache_one, {'test': 1})
1541 self.assertEqual(client_cache_two, {'test': 1}) 1554 self.assertEqual(client_cache_two, {'test': 1})
1542 self.device._ClearCache() 1555 self.device._ClearCache()
1543 self.assertEqual(client_cache_one, {}) 1556 self.assertEqual(client_cache_one, {})
1544 self.assertEqual(client_cache_two, {}) 1557 self.assertEqual(client_cache_two, {})
1545 1558
1546 if __name__ == '__main__': 1559 if __name__ == '__main__':
1547 logging.getLogger().setLevel(logging.DEBUG) 1560 logging.getLogger().setLevel(logging.DEBUG)
1548 unittest.main(verbosity=2) 1561 unittest.main(verbosity=2)
1549 1562
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698