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

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: rebase and fix SingleQuote 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
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/utils/mock_calls.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 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 with self.assertCalls( 613 with self.assertCalls(
614 (self.call.adb.Shell(cmd), self.ShellError('', None)), 614 (self.call.adb.Shell(cmd), self.ShellError('', None)),
615 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(self.adb), 615 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(self.adb),
616 temp_file), 616 temp_file),
617 (self.call.adb.Shell(cmd_redirect)), 617 (self.call.adb.Shell(cmd_redirect)),
618 (self.call.device.ReadFile(mock.ANY), 'something')): 618 (self.call.device.ReadFile(mock.ANY), 'something')):
619 self.assertEquals(['something'], 619 self.assertEquals(['something'],
620 self.device.RunShellCommand(cmd, check_return=True)) 620 self.device.RunShellCommand(cmd, check_return=True))
621 621
622 622
623 class DeviceUtilsRunPipedShellCommandTest(DeviceUtilsTest):
624
625 def testRunPipedShellCommand_success(self):
626 with self.assertCall(
627 self.call.device.RunShellCommand(
628 'ps | grep foo; echo "PIPESTATUS: ${PIPESTATUS[@]}"',
629 check_return=True),
630 ['This line contains foo', 'PIPESTATUS: 0 0']):
631 self.assertEquals(['This line contains foo'],
632 self.device._RunPipedShellCommand('ps | grep foo'))
633
634 def testRunPipedShellCommand_firstCommandFails(self):
635 with self.assertCall(
636 self.call.device.RunShellCommand(
637 'ps | grep foo; echo "PIPESTATUS: ${PIPESTATUS[@]}"',
638 check_return=True),
639 ['PIPESTATUS: 1 0']):
640 with self.assertRaises(device_errors.AdbShellCommandFailedError) as ec:
641 self.device._RunPipedShellCommand('ps | grep foo')
642 self.assertEquals([1, 0], ec.exception.status)
643
644 def testRunPipedShellCommand_secondCommandFails(self):
645 with self.assertCall(
646 self.call.device.RunShellCommand(
647 'ps | grep foo; echo "PIPESTATUS: ${PIPESTATUS[@]}"',
648 check_return=True),
649 ['PIPESTATUS: 0 1']):
650 with self.assertRaises(device_errors.AdbShellCommandFailedError) as ec:
651 self.device._RunPipedShellCommand('ps | grep foo')
652 self.assertEquals([0, 1], ec.exception.status)
653
654 def testRunPipedShellCommand_outputCutOff(self):
655 with self.assertCall(
656 self.call.device.RunShellCommand(
657 'ps | grep foo; echo "PIPESTATUS: ${PIPESTATUS[@]}"',
658 check_return=True),
659 ['foo.bar'] * 256 + ['foo.ba']):
660 with self.assertRaises(device_errors.AdbShellCommandFailedError) as ec:
661 self.device._RunPipedShellCommand('ps | grep foo')
662 self.assertIs(None, ec.exception.status)
663
664
623 class DeviceUtilsGetDevicePieWrapper(DeviceUtilsTest): 665 class DeviceUtilsGetDevicePieWrapper(DeviceUtilsTest):
624 666
625 def testGetDevicePieWrapper_jb(self): 667 def testGetDevicePieWrapper_jb(self):
626 with self.assertCall( 668 with self.assertCall(
627 self.call.device.build_version_sdk(), 669 self.call.device.build_version_sdk(),
628 constants.ANDROID_SDK_VERSION_CODES.JELLY_BEAN): 670 constants.ANDROID_SDK_VERSION_CODES.JELLY_BEAN):
629 self.assertEqual('', self.device.GetDevicePieWrapper()) 671 self.assertEqual('', self.device.GetDevicePieWrapper())
630 672
631 def testGetDevicePieWrapper_ics(self): 673 def testGetDevicePieWrapper_ics(self):
632 with self.assertCalls( 674 with self.assertCalls(
(...skipping 14 matching lines...) Expand all
647 self.device.KillAll('test_process') 689 self.device.KillAll('test_process')
648 690
649 def testKillAll_noMatchingProcessesQuiet(self): 691 def testKillAll_noMatchingProcessesQuiet(self):
650 with self.assertCall(self.call.device.GetPids('test_process'), {}): 692 with self.assertCall(self.call.device.GetPids('test_process'), {}):
651 self.assertEqual(0, self.device.KillAll('test_process', quiet=True)) 693 self.assertEqual(0, self.device.KillAll('test_process', quiet=True))
652 694
653 def testKillAll_nonblocking(self): 695 def testKillAll_nonblocking(self):
654 with self.assertCalls( 696 with self.assertCalls(
655 (self.call.device.GetPids('some.process'), {'some.process': '1234'}), 697 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
656 (self.call.adb.Shell('kill -9 1234'), '')): 698 (self.call.adb.Shell('kill -9 1234'), '')):
657 self.assertEquals(1, 699 self.assertEquals(
658 self.device.KillAll('some.process', blocking=False)) 700 1, self.device.KillAll('some.process', blocking=False))
659 701
660 def testKillAll_blocking(self): 702 def testKillAll_blocking(self):
661 with self.assertCalls( 703 with self.assertCalls(
662 (self.call.device.GetPids('some.process'), {'some.process': '1234'}), 704 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
663 (self.call.adb.Shell('kill -9 1234'), ''), 705 (self.call.adb.Shell('kill -9 1234'), ''),
664 (self.call.device.GetPids('some.process'), {'some.process': '1234'}), 706 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
665 (self.call.device.GetPids('some.process'), {})): 707 (self.call.device.GetPids('some.process'), [])):
666 self.assertEquals(1, 708 self.assertEquals(
667 self.device.KillAll('some.process', blocking=True)) 709 1, self.device.KillAll('some.process', blocking=True))
668 710
669 def testKillAll_root(self): 711 def testKillAll_root(self):
670 with self.assertCalls( 712 with self.assertCalls(
671 (self.call.device.GetPids('some.process'), {'some.process': '1234'}), 713 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
672 (self.call.device.NeedsSU(), True), 714 (self.call.device.NeedsSU(), True),
673 (self.call.adb.Shell("su -c sh -c 'kill -9 1234'"), '')): 715 (self.call.adb.Shell("su -c sh -c 'kill -9 1234'"), '')):
674 self.assertEquals(1, 716 self.assertEquals(
675 self.device.KillAll('some.process', as_root=True)) 717 1, self.device.KillAll('some.process', as_root=True))
676 718
677 def testKillAll_sigterm(self): 719 def testKillAll_sigterm(self):
678 with self.assertCalls( 720 with self.assertCalls(
679 (self.call.device.GetPids('some.process'), {'some.process': '1234'}), 721 (self.call.device.GetPids('some.process'), {'some.process': '1234'}),
680 (self.call.adb.Shell('kill -15 1234'), '')): 722 (self.call.adb.Shell('kill -15 1234'), '')):
681 self.assertEquals(1, 723 self.assertEquals(
682 self.device.KillAll('some.process', signum=device_signal.SIGTERM)) 724 1, self.device.KillAll('some.process', signum=device_signal.SIGTERM))
683 725
684 726
685 class DeviceUtilsStartActivityTest(DeviceUtilsTest): 727 class DeviceUtilsStartActivityTest(DeviceUtilsTest):
686 728
687 def testStartActivity_actionOnly(self): 729 def testStartActivity_actionOnly(self):
688 test_intent = intent.Intent(action='android.intent.action.VIEW') 730 test_intent = intent.Intent(action='android.intent.action.VIEW')
689 with self.assertCall( 731 with self.assertCall(
690 self.call.adb.Shell('am start ' 732 self.call.adb.Shell('am start '
691 '-a android.intent.action.VIEW'), 733 '-a android.intent.action.VIEW'),
692 'Starting: Intent { act=android.intent.action.VIEW }'): 734 'Starting: Intent { act=android.intent.action.VIEW }'):
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 with self.assertRaises(device_errors.CommandFailedError): 1142 with self.assertRaises(device_errors.CommandFailedError):
1101 self.device._ReadFileWithPull('/path/to/device/file') 1143 self.device._ReadFileWithPull('/path/to/device/file')
1102 1144
1103 def testReadFile_exists(self): 1145 def testReadFile_exists(self):
1104 with self.assertCalls( 1146 with self.assertCalls(
1105 (self.call.device.RunShellCommand( 1147 (self.call.device.RunShellCommand(
1106 ['ls', '-l', '/read/this/test/file'], 1148 ['ls', '-l', '/read/this/test/file'],
1107 as_root=False, check_return=True), 1149 as_root=False, check_return=True),
1108 ['-rw-rw---- root foo 256 1970-01-01 00:00 file']), 1150 ['-rw-rw---- root foo 256 1970-01-01 00:00 file']),
1109 (self.call.device.RunShellCommand( 1151 (self.call.device.RunShellCommand(
1110 ['cat', '/read/this/test/file'], as_root=False, check_return=True), 1152 ['cat', '/read/this/test/file'],
1153 as_root=False, check_return=True),
1111 ['this is a test file'])): 1154 ['this is a test file'])):
1112 self.assertEqual('this is a test file\n', 1155 self.assertEqual('this is a test file\n',
1113 self.device.ReadFile('/read/this/test/file')) 1156 self.device.ReadFile('/read/this/test/file'))
1114 1157
1115 def testReadFile_doesNotExist(self): 1158 def testReadFile_doesNotExist(self):
1116 with self.assertCall( 1159 with self.assertCall(
1117 self.call.device.RunShellCommand( 1160 self.call.device.RunShellCommand(
1118 ['ls', '-l', '/this/file/does.not.exist'], 1161 ['ls', '-l', '/this/file/does.not.exist'],
1119 as_root=False, check_return=True), 1162 as_root=False, check_return=True),
1120 self.CommandError('File does not exist')): 1163 self.CommandError('File does not exist')):
1121 with self.assertRaises(device_errors.CommandFailedError): 1164 with self.assertRaises(device_errors.CommandFailedError):
1122 self.device.ReadFile('/this/file/does.not.exist') 1165 self.device.ReadFile('/this/file/does.not.exist')
1123 1166
1167 def testReadFile_zeroSize(self):
1168 with self.assertCalls(
1169 (self.call.device.RunShellCommand(
1170 ['ls', '-l', '/this/file/has/zero/size'],
1171 as_root=False, check_return=True),
1172 ['-r--r--r-- root foo 0 1970-01-01 00:00 zero_size_file']),
1173 (self.call.device._ReadFileWithPull('/this/file/has/zero/size'),
1174 'but it has contents\n')):
1175 self.assertEqual('but it has contents\n',
1176 self.device.ReadFile('/this/file/has/zero/size'))
1177
1124 def testReadFile_withSU(self): 1178 def testReadFile_withSU(self):
1125 with self.assertCalls( 1179 with self.assertCalls(
1126 (self.call.device.RunShellCommand( 1180 (self.call.device.RunShellCommand(
1127 ['ls', '-l', '/this/file/can.be.read.with.su'], 1181 ['ls', '-l', '/this/file/can.be.read.with.su'],
1128 as_root=True, check_return=True), 1182 as_root=True, check_return=True),
1129 ['-rw------- root root 256 1970-01-01 00:00 can.be.read.with.su']), 1183 ['-rw------- root root 256 1970-01-01 00:00 can.be.read.with.su']),
1130 (self.call.device.RunShellCommand( 1184 (self.call.device.RunShellCommand(
1131 ['cat', '/this/file/can.be.read.with.su'], 1185 ['cat', '/this/file/can.be.read.with.su'],
1132 as_root=True, check_return=True), 1186 as_root=True, check_return=True),
1133 ['this is a test file', 'read with su'])): 1187 ['this is a test file', 'read with su'])):
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 with self.assertCalls( 1426 with self.assertCalls(
1373 (self.call.adb.Shell('setprop test.property new_value'), ''), 1427 (self.call.adb.Shell('setprop test.property new_value'), ''),
1374 (self.call.adb.Shell('getprop test.property'), 'old_value')): 1428 (self.call.adb.Shell('getprop test.property'), 'old_value')):
1375 with self.assertRaises(device_errors.CommandFailedError): 1429 with self.assertRaises(device_errors.CommandFailedError):
1376 self.device.SetProp('test.property', 'new_value', check=True) 1430 self.device.SetProp('test.property', 'new_value', check=True)
1377 1431
1378 1432
1379 class DeviceUtilsGetPidsTest(DeviceUtilsTest): 1433 class DeviceUtilsGetPidsTest(DeviceUtilsTest):
1380 1434
1381 def testGetPids_noMatches(self): 1435 def testGetPids_noMatches(self):
1382 with self.assertCall(self.call.adb.Shell('ps'), 1436 with self.assertCall(
1383 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1437 self.call.device._RunPipedShellCommand('ps | grep -F does.not.match'),
1384 'user 1000 100 1024 1024 ffffffff 00000000 no.match\n'): 1438 []):
1385 self.assertEqual({}, self.device.GetPids('does.not.match')) 1439 self.assertEqual({}, self.device.GetPids('does.not.match'))
1386 1440
1387 def testGetPids_oneMatch(self): 1441 def testGetPids_oneMatch(self):
1388 with self.assertCall(self.call.adb.Shell('ps'), 1442 with self.assertCall(
1389 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1443 self.call.device._RunPipedShellCommand('ps | grep -F one.match'),
1390 'user 1000 100 1024 1024 ffffffff 00000000 not.a.match\n' 1444 ['user 1001 100 1024 1024 ffffffff 00000000 one.match']):
1391 'user 1001 100 1024 1024 ffffffff 00000000 one.match\n'):
1392 self.assertEqual({'one.match': '1001'}, self.device.GetPids('one.match')) 1445 self.assertEqual({'one.match': '1001'}, self.device.GetPids('one.match'))
1393 1446
1394 def testGetPids_mutlipleMatches(self): 1447 def testGetPids_mutlipleMatches(self):
1395 with self.assertCall(self.call.adb.Shell('ps'), 1448 with self.assertCall(
1396 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1449 self.call.device._RunPipedShellCommand('ps | grep -F match'),
1397 'user 1000 100 1024 1024 ffffffff 00000000 not\n' 1450 ['user 1001 100 1024 1024 ffffffff 00000000 one.match',
1398 'user 1001 100 1024 1024 ffffffff 00000000 one.match\n' 1451 'user 1002 100 1024 1024 ffffffff 00000000 two.match',
1399 'user 1002 100 1024 1024 ffffffff 00000000 two.match\n' 1452 'user 1003 100 1024 1024 ffffffff 00000000 three.match']):
1400 'user 1003 100 1024 1024 ffffffff 00000000 three.match\n'):
1401 self.assertEqual( 1453 self.assertEqual(
1402 {'one.match': '1001', 'two.match': '1002', 'three.match': '1003'}, 1454 {'one.match': '1001', 'two.match': '1002', 'three.match': '1003'},
1403 self.device.GetPids('match')) 1455 self.device.GetPids('match'))
1404 1456
1405 def testGetPids_exactMatch(self): 1457 def testGetPids_exactMatch(self):
1406 with self.assertCall(self.call.adb.Shell('ps'), 1458 with self.assertCall(
1407 'USER PID PPID VSIZE RSS WCHAN PC NAME\n' 1459 self.call.device._RunPipedShellCommand('ps | grep -F exact.match'),
1408 'user 1000 100 1024 1024 ffffffff 00000000 not.exact.match\n' 1460 ['user 1000 100 1024 1024 ffffffff 00000000 not.exact.match',
1409 'user 1234 100 1024 1024 ffffffff 00000000 exact.match\n'): 1461 'user 1234 100 1024 1024 ffffffff 00000000 exact.match']):
1410 self.assertEqual( 1462 self.assertEqual(
1411 {'not.exact.match': '1000', 'exact.match': '1234'}, 1463 {'not.exact.match': '1000', 'exact.match': '1234'},
1412 self.device.GetPids('exact.match')) 1464 self.device.GetPids('exact.match'))
1413 1465
1466 def testGetPids_quotable(self):
1467 with self.assertCall(
1468 self.call.device._RunPipedShellCommand("ps | grep -F 'my$process'"),
1469 ['user 1234 100 1024 1024 ffffffff 00000000 my$process']):
1470 self.assertEqual(
1471 {'my$process': '1234'}, self.device.GetPids('my$process'))
1472
1414 1473
1415 class DeviceUtilsTakeScreenshotTest(DeviceUtilsTest): 1474 class DeviceUtilsTakeScreenshotTest(DeviceUtilsTest):
1416 1475
1417 def testTakeScreenshot_fileNameProvided(self): 1476 def testTakeScreenshot_fileNameProvided(self):
1418 with self.assertCalls( 1477 with self.assertCalls(
1419 (mock.call.pylib.utils.device_temp_file.DeviceTempFile( 1478 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(
1420 self.adb, suffix='.png'), 1479 self.adb, suffix='.png'),
1421 MockTempFile('/tmp/path/temp-123.png')), 1480 MockTempFile('/tmp/path/temp-123.png')),
1422 (self.call.adb.Shell('/system/bin/screencap -p /tmp/path/temp-123.png'), 1481 (self.call.adb.Shell('/system/bin/screencap -p /tmp/path/temp-123.png'),
1423 ''), 1482 ''),
1424 self.call.device.PullFile('/tmp/path/temp-123.png', 1483 self.call.device.PullFile('/tmp/path/temp-123.png',
1425 '/test/host/screenshot.png')): 1484 '/test/host/screenshot.png')):
1426 self.device.TakeScreenshot('/test/host/screenshot.png') 1485 self.device.TakeScreenshot('/test/host/screenshot.png')
1427 1486
1428 1487
1429 class DeviceUtilsGetMemoryUsageForPidTest(DeviceUtilsTest): 1488 class DeviceUtilsGetMemoryUsageForPidTest(DeviceUtilsTest):
1430 1489
1431 def setUp(self): 1490 def setUp(self):
1432 super(DeviceUtilsGetMemoryUsageForPidTest, self).setUp() 1491 super(DeviceUtilsGetMemoryUsageForPidTest, self).setUp()
1433 1492
1434 def testGetMemoryUsageForPid_validPid(self): 1493 def testGetMemoryUsageForPid_validPid(self):
1435 with self.assertCalls( 1494 with self.assertCalls(
1436 (self.call.device.RunShellCommand( 1495 (self.call.device._RunPipedShellCommand(
1437 ['showmap', '1234'], as_root=True, check_return=True), 1496 'showmap 1234 | grep TOTAL', as_root=True),
1438 ['100 101 102 103 104 105 106 107 TOTAL']), 1497 ['100 101 102 103 104 105 106 107 TOTAL']),
1439 (self.call.device.ReadFile('/proc/1234/status', as_root=True), 1498 (self.call.device.ReadFile('/proc/1234/status', as_root=True),
1440 'VmHWM: 1024 kB\n')): 1499 'VmHWM: 1024 kB\n')):
1441 self.assertEqual( 1500 self.assertEqual(
1442 { 1501 {
1443 'Size': 100, 1502 'Size': 100,
1444 'Rss': 101, 1503 'Rss': 101,
1445 'Pss': 102, 1504 'Pss': 102,
1446 'Shared_Clean': 103, 1505 'Shared_Clean': 103,
1447 'Shared_Dirty': 104, 1506 'Shared_Dirty': 104,
1448 'Private_Clean': 105, 1507 'Private_Clean': 105,
1449 'Private_Dirty': 106, 1508 'Private_Dirty': 106,
1450 'VmHWM': 1024 1509 'VmHWM': 1024
1451 }, 1510 },
1452 self.device.GetMemoryUsageForPid(1234)) 1511 self.device.GetMemoryUsageForPid(1234))
1453 1512
1454 def testGetMemoryUsageForPid_noSmaps(self): 1513 def testGetMemoryUsageForPid_noSmaps(self):
1455 with self.assertCalls( 1514 with self.assertCalls(
1456 (self.call.device.RunShellCommand( 1515 (self.call.device._RunPipedShellCommand(
1457 ['showmap', '4321'], as_root=True, check_return=True), 1516 'showmap 4321 | grep TOTAL', as_root=True),
1458 ['cannot open /proc/4321/smaps: No such file or directory']), 1517 ['cannot open /proc/4321/smaps: No such file or directory']),
1459 (self.call.device.ReadFile('/proc/4321/status', as_root=True), 1518 (self.call.device.ReadFile('/proc/4321/status', as_root=True),
1460 'VmHWM: 1024 kb\n')): 1519 'VmHWM: 1024 kb\n')):
1461 self.assertEquals({'VmHWM': 1024}, self.device.GetMemoryUsageForPid(4321)) 1520 self.assertEquals({'VmHWM': 1024}, self.device.GetMemoryUsageForPid(4321))
1462 1521
1463 def testGetMemoryUsageForPid_noStatus(self): 1522 def testGetMemoryUsageForPid_noStatus(self):
1464 with self.assertCalls( 1523 with self.assertCalls(
1465 (self.call.device.RunShellCommand( 1524 (self.call.device._RunPipedShellCommand(
1466 ['showmap', '4321'], as_root=True, check_return=True), 1525 'showmap 4321 | grep TOTAL', as_root=True),
1467 ['100 101 102 103 104 105 106 107 TOTAL']), 1526 ['100 101 102 103 104 105 106 107 TOTAL']),
1468 (self.call.device.ReadFile('/proc/4321/status', as_root=True), 1527 (self.call.device.ReadFile('/proc/4321/status', as_root=True),
1469 self.CommandError())): 1528 self.CommandError())):
1470 self.assertEquals( 1529 self.assertEquals(
1471 { 1530 {
1472 'Size': 100, 1531 'Size': 100,
1473 'Rss': 101, 1532 'Rss': 101,
1474 'Pss': 102, 1533 'Pss': 102,
1475 'Shared_Clean': 103, 1534 'Shared_Clean': 103,
1476 'Shared_Dirty': 104, 1535 'Shared_Dirty': 104,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1532 self.assertEqual(client_cache_one, {'test': 1}) 1591 self.assertEqual(client_cache_one, {'test': 1})
1533 self.assertEqual(client_cache_two, {'test': 1}) 1592 self.assertEqual(client_cache_two, {'test': 1})
1534 self.device._ClearCache() 1593 self.device._ClearCache()
1535 self.assertEqual(client_cache_one, {}) 1594 self.assertEqual(client_cache_one, {})
1536 self.assertEqual(client_cache_two, {}) 1595 self.assertEqual(client_cache_two, {})
1537 1596
1538 if __name__ == '__main__': 1597 if __name__ == '__main__':
1539 logging.getLogger().setLevel(logging.DEBUG) 1598 logging.getLogger().setLevel(logging.DEBUG)
1540 unittest.main(verbosity=2) 1599 unittest.main(verbosity=2)
1541 1600
OLDNEW
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/utils/mock_calls.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698