| OLD | NEW |
| 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 25 matching lines...) Expand all Loading... |
| 36 sys.path.append(os.path.join( | 36 sys.path.append(os.path.join( |
| 37 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock')) | 37 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock')) |
| 38 import mock # pylint: disable=F0401 | 38 import mock # pylint: disable=F0401 |
| 39 | 39 |
| 40 | 40 |
| 41 class DeviceUtilsTest(unittest.TestCase): | 41 class DeviceUtilsTest(unittest.TestCase): |
| 42 | 42 |
| 43 def testInitWithStr(self): | 43 def testInitWithStr(self): |
| 44 serial_as_str = str('0123456789abcdef') | 44 serial_as_str = str('0123456789abcdef') |
| 45 d = device_utils.DeviceUtils('0123456789abcdef') | 45 d = device_utils.DeviceUtils('0123456789abcdef') |
| 46 self.assertEqual(serial_as_str, d.old_interface.GetDevice()) | 46 self.assertEqual(serial_as_str, d.adb.GetDeviceSerial()) |
| 47 | 47 |
| 48 def testInitWithUnicode(self): | 48 def testInitWithUnicode(self): |
| 49 serial_as_unicode = unicode('fedcba9876543210') | 49 serial_as_unicode = unicode('fedcba9876543210') |
| 50 d = device_utils.DeviceUtils(serial_as_unicode) | 50 d = device_utils.DeviceUtils(serial_as_unicode) |
| 51 self.assertEqual(serial_as_unicode, d.old_interface.GetDevice()) | 51 self.assertEqual(serial_as_unicode, d.adb.GetDeviceSerial()) |
| 52 | 52 |
| 53 def testInitWithAdbWrapper(self): | 53 def testInitWithAdbWrapper(self): |
| 54 serial = '123456789abcdef0' | 54 serial = '123456789abcdef0' |
| 55 a = adb_wrapper.AdbWrapper(serial) | 55 a = adb_wrapper.AdbWrapper(serial) |
| 56 d = device_utils.DeviceUtils(a) | 56 d = device_utils.DeviceUtils(a) |
| 57 self.assertEqual(serial, d.old_interface.GetDevice()) | 57 self.assertEqual(serial, d.adb.GetDeviceSerial()) |
| 58 | 58 |
| 59 def testInitWithAndroidCommands(self): | 59 def testInitWithAndroidCommands(self): |
| 60 serial = '0fedcba987654321' | 60 serial = '0fedcba987654321' |
| 61 a = android_commands.AndroidCommands(device=serial) | 61 a = android_commands.AndroidCommands(device=serial) |
| 62 d = device_utils.DeviceUtils(a) | 62 d = device_utils.DeviceUtils(a) |
| 63 self.assertEqual(serial, d.old_interface.GetDevice()) | 63 self.assertEqual(serial, d.adb.GetDeviceSerial()) |
| 64 | 64 |
| 65 def testInitWithNone(self): | 65 def testInitWithMissing_fails(self): |
| 66 d = device_utils.DeviceUtils(None) | 66 with self.assertRaises(ValueError): |
| 67 self.assertIsNone(d.old_interface.GetDevice()) | 67 device_utils.DeviceUtils(None) |
| 68 with self.assertRaises(ValueError): |
| 69 device_utils.DeviceUtils('') |
| 68 | 70 |
| 69 | 71 |
| 70 class MockTempFile(object): | 72 class MockTempFile(object): |
| 71 | 73 |
| 72 def __init__(self, name='/tmp/some/file'): | 74 def __init__(self, name='/tmp/some/file'): |
| 73 self.file = mock.MagicMock(spec=file) | 75 self.file = mock.MagicMock(spec=file) |
| 74 self.file.name = name | 76 self.file.name = name |
| 75 | 77 |
| 76 def __enter__(self): | 78 def __enter__(self): |
| 77 return self.file | 79 return self.file |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 | 241 |
| 240 class DeviceUtilsNewImplTest(mock_calls.TestCase): | 242 class DeviceUtilsNewImplTest(mock_calls.TestCase): |
| 241 | 243 |
| 242 def setUp(self): | 244 def setUp(self): |
| 243 test_serial = '0123456789abcdef' | 245 test_serial = '0123456789abcdef' |
| 244 self.adb = mock.Mock(spec=adb_wrapper.AdbWrapper) | 246 self.adb = mock.Mock(spec=adb_wrapper.AdbWrapper) |
| 245 self.adb.__str__ = mock.Mock(return_value=test_serial) | 247 self.adb.__str__ = mock.Mock(return_value=test_serial) |
| 246 self.adb.GetDeviceSerial.return_value = test_serial | 248 self.adb.GetDeviceSerial.return_value = test_serial |
| 247 self.device = device_utils.DeviceUtils( | 249 self.device = device_utils.DeviceUtils( |
| 248 self.adb, default_timeout=10, default_retries=0) | 250 self.adb, default_timeout=10, default_retries=0) |
| 249 self.watchMethodCalls(self.call.adb) | 251 self.watchMethodCalls(self.call.adb, ignore=['GetDeviceSerial']) |
| 250 | 252 |
| 251 def ShellError(self, output=None, exit_code=1): | 253 def ShellError(self, output=None, exit_code=1): |
| 252 def action(cmd, *args, **kwargs): | 254 def action(cmd, *args, **kwargs): |
| 253 raise device_errors.AdbShellCommandFailedError( | 255 raise device_errors.AdbCommandFailedError( |
| 254 cmd, exit_code, output, str(self.device)) | 256 cmd, output, exit_code, str(self.device)) |
| 255 if output is None: | 257 if output is None: |
| 256 output = 'Permission denied\n' | 258 output = 'Permission denied\n' |
| 257 return action | 259 return action |
| 258 | 260 |
| 259 def TimeoutError(self, msg=None): | 261 def TimeoutError(self, msg=None): |
| 260 if msg is None: | 262 if msg is None: |
| 261 msg = 'Operation timed out' | 263 msg = 'Operation timed out' |
| 262 return mock.Mock(side_effect=device_errors.CommandTimeoutError( | 264 return mock.Mock(side_effect=device_errors.CommandTimeoutError( |
| 263 msg, str(self.device))) | 265 msg, str(self.device))) |
| 264 | 266 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 288 | 290 |
| 289 def testHasRoot_true(self): | 291 def testHasRoot_true(self): |
| 290 with self.assertCall(self.call.adb.Shell('ls /root'), 'foo\n'): | 292 with self.assertCall(self.call.adb.Shell('ls /root'), 'foo\n'): |
| 291 self.assertTrue(self.device.HasRoot()) | 293 self.assertTrue(self.device.HasRoot()) |
| 292 | 294 |
| 293 def testHasRoot_false(self): | 295 def testHasRoot_false(self): |
| 294 with self.assertCall(self.call.adb.Shell('ls /root'), self.ShellError()): | 296 with self.assertCall(self.call.adb.Shell('ls /root'), self.ShellError()): |
| 295 self.assertFalse(self.device.HasRoot()) | 297 self.assertFalse(self.device.HasRoot()) |
| 296 | 298 |
| 297 | 299 |
| 298 class DeviceUtilsEnableRootTest(DeviceUtilsOldImplTest): | 300 class DeviceUtilsEnableRootTest(DeviceUtilsNewImplTest): |
| 299 | 301 |
| 300 def testEnableRoot_succeeds(self): | 302 def testEnableRoot_succeeds(self): |
| 301 with self.assertCallsSequence([ | 303 with self.assertCalls( |
| 302 ('adb -s 0123456789abcdef shell getprop ro.build.type', | 304 (self.call.device.IsUserBuild(), False), |
| 303 'userdebug\r\n'), | 305 self.call.adb.Root(), |
| 304 ('adb -s 0123456789abcdef root', 'restarting adbd as root\r\n'), | 306 self.call.adb.WaitForDevice()): |
| 305 ('adb -s 0123456789abcdef wait-for-device', ''), | |
| 306 ('adb -s 0123456789abcdef wait-for-device', '')]): | |
| 307 self.device.EnableRoot() | 307 self.device.EnableRoot() |
| 308 | 308 |
| 309 def testEnableRoot_userBuild(self): | 309 def testEnableRoot_userBuild(self): |
| 310 with self.assertCallsSequence([ | 310 with self.assertCalls( |
| 311 ('adb -s 0123456789abcdef shell getprop ro.build.type', 'user\r\n')]): | 311 (self.call.device.IsUserBuild(), True)): |
| 312 with self.assertRaises(device_errors.CommandFailedError): | 312 with self.assertRaises(device_errors.CommandFailedError): |
| 313 self.device.EnableRoot() | 313 self.device.EnableRoot() |
| 314 | 314 |
| 315 def testEnableRoot_rootFails(self): | 315 def testEnableRoot_rootFails(self): |
| 316 with self.assertCallsSequence([ | 316 with self.assertCalls( |
| 317 ('adb -s 0123456789abcdef shell getprop ro.build.type', | 317 (self.call.device.IsUserBuild(), False), |
| 318 'userdebug\r\n'), | 318 (self.call.adb.Root(), self.CommandError())): |
| 319 ('adb -s 0123456789abcdef root', 'no\r\n'), | |
| 320 ('adb -s 0123456789abcdef wait-for-device', '')]): | |
| 321 with self.assertRaises(device_errors.CommandFailedError): | 319 with self.assertRaises(device_errors.CommandFailedError): |
| 322 self.device.EnableRoot() | 320 self.device.EnableRoot() |
| 323 | 321 |
| 324 | 322 |
| 325 class DeviceUtilsIsUserBuildTest(DeviceUtilsNewImplTest): | 323 class DeviceUtilsIsUserBuildTest(DeviceUtilsNewImplTest): |
| 326 | 324 |
| 327 def testIsUserBuild_yes(self): | 325 def testIsUserBuild_yes(self): |
| 328 with self.assertCall( | 326 with self.assertCall( |
| 329 self.call.device.GetProp('ro.build.type', cache=True), 'user'): | 327 self.call.device.GetProp('ro.build.type', cache=True), 'user'): |
| 330 self.assertTrue(self.device.IsUserBuild()) | 328 self.assertTrue(self.device.IsUserBuild()) |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 cmd = 'echo $ANDROID_DATA' | 666 cmd = 'echo $ANDROID_DATA' |
| 669 output = '/data\n' | 667 output = '/data\n' |
| 670 with self.assertCall(self.call.adb.Shell(cmd), output): | 668 with self.assertCall(self.call.adb.Shell(cmd), output): |
| 671 self.assertEquals([output.rstrip()], | 669 self.assertEquals([output.rstrip()], |
| 672 self.device.RunShellCommand(cmd, check_return=True)) | 670 self.device.RunShellCommand(cmd, check_return=True)) |
| 673 | 671 |
| 674 def testRunShellCommand_checkReturn_failure(self): | 672 def testRunShellCommand_checkReturn_failure(self): |
| 675 cmd = 'ls /root' | 673 cmd = 'ls /root' |
| 676 output = 'opendir failed, Permission denied\n' | 674 output = 'opendir failed, Permission denied\n' |
| 677 with self.assertCall(self.call.adb.Shell(cmd), self.ShellError(output)): | 675 with self.assertCall(self.call.adb.Shell(cmd), self.ShellError(output)): |
| 678 with self.assertRaises(device_errors.AdbShellCommandFailedError): | 676 with self.assertRaises(device_errors.AdbCommandFailedError): |
| 679 self.device.RunShellCommand(cmd, check_return=True) | 677 self.device.RunShellCommand(cmd, check_return=True) |
| 680 | 678 |
| 681 def testRunShellCommand_checkReturn_disabled(self): | 679 def testRunShellCommand_checkReturn_disabled(self): |
| 682 cmd = 'ls /root' | 680 cmd = 'ls /root' |
| 683 output = 'opendir failed, Permission denied\n' | 681 output = 'opendir failed, Permission denied\n' |
| 684 with self.assertCall(self.call.adb.Shell(cmd), self.ShellError(output)): | 682 with self.assertCall(self.call.adb.Shell(cmd), self.ShellError(output)): |
| 685 self.assertEquals([output.rstrip()], | 683 self.assertEquals([output.rstrip()], |
| 686 self.device.RunShellCommand(cmd, check_return=False)) | 684 self.device.RunShellCommand(cmd, check_return=False)) |
| 687 | 685 |
| 688 | 686 |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1077 def testPushChangedFilesZipped_single(self): | 1075 def testPushChangedFilesZipped_single(self): |
| 1078 self._testPushChangedFilesZipped_spec( | 1076 self._testPushChangedFilesZipped_spec( |
| 1079 [('/test/host/path/file1', '/test/device/path/file1')]) | 1077 [('/test/host/path/file1', '/test/device/path/file1')]) |
| 1080 | 1078 |
| 1081 def testPushChangedFilesZipped_multiple(self): | 1079 def testPushChangedFilesZipped_multiple(self): |
| 1082 self._testPushChangedFilesZipped_spec( | 1080 self._testPushChangedFilesZipped_spec( |
| 1083 [('/test/host/path/file1', '/test/device/path/file1'), | 1081 [('/test/host/path/file1', '/test/device/path/file1'), |
| 1084 ('/test/host/path/file2', '/test/device/path/file2')]) | 1082 ('/test/host/path/file2', '/test/device/path/file2')]) |
| 1085 | 1083 |
| 1086 | 1084 |
| 1087 class DeviceUtilsFileExistsTest(DeviceUtilsOldImplTest): | 1085 class DeviceUtilsFileExistsTest(DeviceUtilsNewImplTest): |
| 1088 | 1086 |
| 1089 def testFileExists_usingTest_fileExists(self): | 1087 def testFileExists_usingTest_fileExists(self): |
| 1090 with self.assertCalls( | 1088 with self.assertCall( |
| 1091 "adb -s 0123456789abcdef shell " | 1089 self.call.device.RunShellCommand( |
| 1092 "'test -e \"/data/app/test.file.exists\"; echo $?'", | 1090 ['test', '-e', '/path/file.exists'], check_return=True), ''): |
| 1093 '0\r\n'): | 1091 self.assertTrue(self.device.FileExists('/path/file.exists')) |
| 1094 self.assertTrue(self.device.FileExists('/data/app/test.file.exists')) | |
| 1095 | 1092 |
| 1096 def testFileExists_usingTest_fileDoesntExist(self): | 1093 def testFileExists_usingTest_fileDoesntExist(self): |
| 1097 with self.assertCalls( | 1094 with self.assertCall( |
| 1098 "adb -s 0123456789abcdef shell " | 1095 self.call.device.RunShellCommand( |
| 1099 "'test -e \"/data/app/test.file.does.not.exist\"; echo $?'", | 1096 ['test', '-e', '/does/not/exist'], check_return=True), |
| 1100 '1\r\n'): | 1097 self.ShellError('', 1)): |
| 1101 self.assertFalse(self.device.FileExists( | 1098 self.assertFalse(self.device.FileExists('/does/not/exist')) |
| 1102 '/data/app/test.file.does.not.exist')) | |
| 1103 | |
| 1104 def testFileExists_usingLs_fileExists(self): | |
| 1105 with self.assertCallsSequence([ | |
| 1106 ("adb -s 0123456789abcdef shell " | |
| 1107 "'test -e \"/data/app/test.file.exists\"; echo $?'", | |
| 1108 'test: not found\r\n'), | |
| 1109 ("adb -s 0123456789abcdef shell " | |
| 1110 "'ls \"/data/app/test.file.exists\" >/dev/null 2>&1; echo $?'", | |
| 1111 '0\r\n')]): | |
| 1112 self.assertTrue(self.device.FileExists('/data/app/test.file.exists')) | |
| 1113 | |
| 1114 def testFileExists_usingLs_fileDoesntExist(self): | |
| 1115 with self.assertCallsSequence([ | |
| 1116 ("adb -s 0123456789abcdef shell " | |
| 1117 "'test -e \"/data/app/test.file.does.not.exist\"; echo $?'", | |
| 1118 'test: not found\r\n'), | |
| 1119 ("adb -s 0123456789abcdef shell " | |
| 1120 "'ls \"/data/app/test.file.does.not.exist\" " | |
| 1121 ">/dev/null 2>&1; echo $?'", | |
| 1122 '1\r\n')]): | |
| 1123 self.assertFalse(self.device.FileExists( | |
| 1124 '/data/app/test.file.does.not.exist')) | |
| 1125 | 1099 |
| 1126 | 1100 |
| 1127 class DeviceUtilsPullFileTest(DeviceUtilsOldImplTest): | 1101 class DeviceUtilsPullFileTest(DeviceUtilsOldImplTest): |
| 1128 | 1102 |
| 1129 def testPullFile_existsOnDevice(self): | 1103 def testPullFile_existsOnDevice(self): |
| 1130 with mock.patch('os.path.exists', return_value=True): | 1104 with mock.patch('os.path.exists', return_value=True): |
| 1131 with self.assertCallsSequence([ | 1105 with self.assertCallsSequence([ |
| 1132 ('adb -s 0123456789abcdef shell ' | 1106 ('adb -s 0123456789abcdef shell ' |
| 1133 'ls /data/app/test.file.exists', | 1107 'ls /data/app/test.file.exists', |
| 1134 '/data/app/test.file.exists'), | 1108 '/data/app/test.file.exists'), |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1545 }, | 1519 }, |
| 1546 self.device.GetMemoryUsageForPid(1234)) | 1520 self.device.GetMemoryUsageForPid(1234)) |
| 1547 | 1521 |
| 1548 def testGetMemoryUsageForPid_invalidPid(self): | 1522 def testGetMemoryUsageForPid_invalidPid(self): |
| 1549 with self.assertCalls( | 1523 with self.assertCalls( |
| 1550 "adb -s 0123456789abcdef shell 'showmap 4321'", | 1524 "adb -s 0123456789abcdef shell 'showmap 4321'", |
| 1551 'cannot open /proc/4321/smaps: No such file or directory\r\n'): | 1525 'cannot open /proc/4321/smaps: No such file or directory\r\n'): |
| 1552 self.assertEqual({}, self.device.GetMemoryUsageForPid(4321)) | 1526 self.assertEqual({}, self.device.GetMemoryUsageForPid(4321)) |
| 1553 | 1527 |
| 1554 | 1528 |
| 1555 class DeviceUtilsStrTest(DeviceUtilsOldImplTest): | 1529 class DeviceUtilsStrTest(DeviceUtilsNewImplTest): |
| 1556 | 1530 |
| 1557 def testStr_noAdbCalls(self): | 1531 def testStr_returnsSerial(self): |
| 1558 with self.assertNoAdbCalls(): | 1532 with self.assertCalls( |
| 1533 (self.call.adb.GetDeviceSerial(), '0123456789abcdef')): |
| 1559 self.assertEqual('0123456789abcdef', str(self.device)) | 1534 self.assertEqual('0123456789abcdef', str(self.device)) |
| 1560 | 1535 |
| 1561 def testStr_noSerial(self): | |
| 1562 self.device = device_utils.DeviceUtils(None) | |
| 1563 with self.assertCalls('adb get-serialno', '0123456789abcdef'): | |
| 1564 self.assertEqual('0123456789abcdef', str(self.device)) | |
| 1565 | |
| 1566 def testStr_noSerial_noDevices(self): | |
| 1567 self.device = device_utils.DeviceUtils(None) | |
| 1568 with self.assertCalls('adb get-serialno', 'unknown'), ( | |
| 1569 self.assertRaises(device_errors.NoDevicesError)): | |
| 1570 str(self.device) | |
| 1571 | |
| 1572 | 1536 |
| 1573 if __name__ == '__main__': | 1537 if __name__ == '__main__': |
| 1574 logging.getLogger().setLevel(logging.DEBUG) | 1538 logging.getLogger().setLevel(logging.DEBUG) |
| 1575 unittest.main(verbosity=2) | 1539 unittest.main(verbosity=2) |
| 1576 | 1540 |
| OLD | NEW |