| 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=protected-access | 10 # pylint: disable=protected-access |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 return self.file | 135 return self.file |
| 136 | 136 |
| 137 def __exit__(self, exc_type, exc_val, exc_tb): | 137 def __exit__(self, exc_type, exc_val, exc_tb): |
| 138 pass | 138 pass |
| 139 | 139 |
| 140 @property | 140 @property |
| 141 def name(self): | 141 def name(self): |
| 142 return self.file.name | 142 return self.file.name |
| 143 | 143 |
| 144 | 144 |
| 145 class MockLogger(mock.Mock): |
| 146 def __init__(self, *args, **kwargs): |
| 147 super(MockLogger, self).__init__(*args, **kwargs) |
| 148 # TODO(perezju): Consider adding traps for error, info, etc. |
| 149 self.warnings = [] |
| 150 |
| 151 def warning(self, message, *args): |
| 152 self.warnings.append(message % args) |
| 153 |
| 154 |
| 155 def PatchLogger(): |
| 156 return mock.patch( |
| 157 'devil.android.device_utils.logger', new_callable=MockLogger) |
| 158 |
| 159 |
| 145 class _PatchedFunction(object): | 160 class _PatchedFunction(object): |
| 146 | 161 |
| 147 def __init__(self, patched=None, mocked=None): | 162 def __init__(self, patched=None, mocked=None): |
| 148 self.patched = patched | 163 self.patched = patched |
| 149 self.mocked = mocked | 164 self.mocked = mocked |
| 150 | 165 |
| 151 | 166 |
| 152 def _AdbWrapperMock(test_serial, is_ready=True): | 167 def _AdbWrapperMock(test_serial, is_ready=True): |
| 153 adb = mock.Mock(spec=adb_wrapper.AdbWrapper) | 168 adb = mock.Mock(spec=adb_wrapper.AdbWrapper) |
| 154 adb.__str__ = mock.Mock(return_value=test_serial) | 169 adb.__str__ = mock.Mock(return_value=test_serial) |
| (...skipping 2596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2751 (mock.call.devil.android.device_temp_file.DeviceTempFile( | 2766 (mock.call.devil.android.device_temp_file.DeviceTempFile( |
| 2752 self.adb, suffix='.sh'), MockTempFile(mock_temp_file)), | 2767 self.adb, suffix='.sh'), MockTempFile(mock_temp_file)), |
| 2753 self.call.device.WriteFile(mock.ANY, mock.ANY), | 2768 self.call.device.WriteFile(mock.ANY, mock.ANY), |
| 2754 (self.call.device.RunShellCommand( | 2769 (self.call.device.RunShellCommand( |
| 2755 ['source', mock_temp_file], check_return=True, as_root=True)), | 2770 ['source', mock_temp_file], check_return=True, as_root=True)), |
| 2756 self.call.adb.WaitForDevice()): | 2771 self.call.adb.WaitForDevice()): |
| 2757 self.device.RestartAdbd() | 2772 self.device.RestartAdbd() |
| 2758 | 2773 |
| 2759 | 2774 |
| 2760 class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest): | 2775 class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest): |
| 2776 def _PmGrantShellCall(self, package, permissions): |
| 2777 fragment = 'p=%s;for q in %s;' % (package, ' '.join(sorted(permissions))) |
| 2778 results = [] |
| 2779 for permission, result in permissions.iteritems(): |
| 2780 if result: |
| 2781 output, status = result + '\n', 1 |
| 2782 else: |
| 2783 output, status = '', 0 |
| 2784 results.append( |
| 2785 '{output}{sep}{permission}{sep}{status}{sep}\n'.format( |
| 2786 output=output, |
| 2787 permission=permission, |
| 2788 status=status, |
| 2789 sep=device_utils._SHELL_OUTPUT_SEPARATOR |
| 2790 )) |
| 2791 return ( |
| 2792 self.call.device.RunShellCommand( |
| 2793 AnyStringWith(fragment), |
| 2794 shell=True, raw_output=True, check_return=True), |
| 2795 ''.join(results)) |
| 2761 | 2796 |
| 2762 def testGrantPermissions_none(self): | 2797 def testGrantPermissions_none(self): |
| 2763 self.device.GrantPermissions('package', []) | 2798 self.device.GrantPermissions('package', []) |
| 2764 | 2799 |
| 2765 def testGrantPermissions_underM(self): | 2800 def testGrantPermissions_underM(self): |
| 2766 with self.patch_call(self.call.device.build_version_sdk, | 2801 with self.patch_call(self.call.device.build_version_sdk, |
| 2767 return_value=version_codes.LOLLIPOP): | 2802 return_value=version_codes.LOLLIPOP): |
| 2768 self.device.GrantPermissions('package', ['p1']) | 2803 self.device.GrantPermissions('package', ['p1']) |
| 2769 | 2804 |
| 2770 def testGrantPermissions_one(self): | 2805 def testGrantPermissions_one(self): |
| 2771 permissions_cmd = 'pm grant package p1' | |
| 2772 with self.patch_call(self.call.device.build_version_sdk, | 2806 with self.patch_call(self.call.device.build_version_sdk, |
| 2773 return_value=version_codes.MARSHMALLOW): | 2807 return_value=version_codes.MARSHMALLOW): |
| 2774 with self.assertCalls( | 2808 with self.assertCalls( |
| 2775 (self.call.device.RunShellCommand( | 2809 self._PmGrantShellCall('package', {'p1': 0})): |
| 2776 permissions_cmd, shell=True, check_return=True), [])): | |
| 2777 self.device.GrantPermissions('package', ['p1']) | 2810 self.device.GrantPermissions('package', ['p1']) |
| 2778 | 2811 |
| 2779 def testGrantPermissions_multiple(self): | 2812 def testGrantPermissions_multiple(self): |
| 2780 permissions_cmd = 'pm grant package p1&&pm grant package p2' | |
| 2781 with self.patch_call(self.call.device.build_version_sdk, | 2813 with self.patch_call(self.call.device.build_version_sdk, |
| 2782 return_value=version_codes.MARSHMALLOW): | 2814 return_value=version_codes.MARSHMALLOW): |
| 2783 with self.assertCalls( | 2815 with self.assertCalls( |
| 2784 (self.call.device.RunShellCommand( | 2816 self._PmGrantShellCall('package', {'p1': 0, 'p2': 0})): |
| 2785 permissions_cmd, shell=True, check_return=True), [])): | |
| 2786 self.device.GrantPermissions('package', ['p1', 'p2']) | 2817 self.device.GrantPermissions('package', ['p1', 'p2']) |
| 2787 | 2818 |
| 2788 def testGrantPermissions_WriteExtrnalStorage(self): | 2819 def testGrantPermissions_WriteExtrnalStorage(self): |
| 2789 permissions_cmd = ( | 2820 WRITE = 'android.permission.WRITE_EXTERNAL_STORAGE' |
| 2790 'pm grant package android.permission.WRITE_EXTERNAL_STORAGE&&' | 2821 READ = 'android.permission.READ_EXTERNAL_STORAGE' |
| 2791 'pm grant package android.permission.READ_EXTERNAL_STORAGE') | 2822 with PatchLogger() as logger: |
| 2792 with self.patch_call(self.call.device.build_version_sdk, | 2823 with self.patch_call(self.call.device.build_version_sdk, |
| 2793 return_value=version_codes.MARSHMALLOW): | 2824 return_value=version_codes.MARSHMALLOW): |
| 2794 with self.assertCalls( | 2825 with self.assertCalls( |
| 2795 (self.call.device.RunShellCommand( | 2826 self._PmGrantShellCall('package', {READ: 0, WRITE: 0})): |
| 2796 permissions_cmd, shell=True, check_return=True), [])): | 2827 self.device.GrantPermissions('package', [WRITE]) |
| 2797 self.device.GrantPermissions( | 2828 self.assertEqual(logger.warnings, []) |
| 2798 'package', ['android.permission.WRITE_EXTERNAL_STORAGE']) | |
| 2799 | 2829 |
| 2800 def testGrantPermissions_BlackList(self): | 2830 def testGrantPermissions_BlackList(self): |
| 2801 with self.patch_call(self.call.device.build_version_sdk, | 2831 with PatchLogger() as logger: |
| 2802 return_value=version_codes.MARSHMALLOW): | 2832 with self.patch_call(self.call.device.build_version_sdk, |
| 2803 self.device.GrantPermissions( | 2833 return_value=version_codes.MARSHMALLOW): |
| 2804 'package', ['android.permission.ACCESS_MOCK_LOCATION']) | 2834 with self.assertCalls( |
| 2835 self._PmGrantShellCall('package', {'p1': 0})): |
| 2836 self.device.GrantPermissions( |
| 2837 'package', ['p1', 'foo.permission.C2D_MESSAGE']) |
| 2838 self.assertEqual(logger.warnings, []) |
| 2839 |
| 2840 def testGrantPermissions_unchangeablePermision(self): |
| 2841 error_message = ( |
| 2842 'Operation not allowed: java.lang.SecurityException: ' |
| 2843 'Permission UNCHANGEABLE is not a changeable permission type') |
| 2844 with PatchLogger() as logger: |
| 2845 with self.patch_call(self.call.device.build_version_sdk, |
| 2846 return_value=version_codes.MARSHMALLOW): |
| 2847 with self.assertCalls( |
| 2848 self._PmGrantShellCall('package', {'UNCHANGEABLE': error_message})): |
| 2849 self.device.GrantPermissions('package', ['UNCHANGEABLE']) |
| 2850 self.assertEqual( |
| 2851 logger.warnings, [mock.ANY, AnyStringWith('UNCHANGEABLE')]) |
| 2805 | 2852 |
| 2806 | 2853 |
| 2807 class DeviecUtilsIsScreenOn(DeviceUtilsTest): | 2854 class DeviecUtilsIsScreenOn(DeviceUtilsTest): |
| 2808 | 2855 |
| 2809 _L_SCREEN_ON = ['test=test mInteractive=true'] | 2856 _L_SCREEN_ON = ['test=test mInteractive=true'] |
| 2810 _K_SCREEN_ON = ['test=test mScreenOn=true'] | 2857 _K_SCREEN_ON = ['test=test mScreenOn=true'] |
| 2811 _L_SCREEN_OFF = ['mInteractive=false'] | 2858 _L_SCREEN_OFF = ['mInteractive=false'] |
| 2812 _K_SCREEN_OFF = ['mScreenOn=false'] | 2859 _K_SCREEN_OFF = ['mScreenOn=false'] |
| 2813 | 2860 |
| 2814 def testIsScreenOn_onPreL(self): | 2861 def testIsScreenOn_onPreL(self): |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2948 (self.call.device.GetProp('ro.build.version.sdk', cache=True), '24'), | 2995 (self.call.device.GetProp('ro.build.version.sdk', cache=True), '24'), |
| 2949 (self.call.adb.Shell('service call iphonesubinfo 1'), | 2996 (self.call.adb.Shell('service call iphonesubinfo 1'), |
| 2950 self.ShellError())): | 2997 self.ShellError())): |
| 2951 with self.assertRaises(device_errors.CommandFailedError): | 2998 with self.assertRaises(device_errors.CommandFailedError): |
| 2952 self.device.GetIMEI() | 2999 self.device.GetIMEI() |
| 2953 | 3000 |
| 2954 | 3001 |
| 2955 if __name__ == '__main__': | 3002 if __name__ == '__main__': |
| 2956 logging.getLogger().setLevel(logging.DEBUG) | 3003 logging.getLogger().setLevel(logging.DEBUG) |
| 2957 unittest.main(verbosity=2) | 3004 unittest.main(verbosity=2) |
| OLD | NEW |