| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 import logging | 4 import logging |
| 5 import unittest | 5 import unittest |
| 6 | 6 |
| 7 from chrome_remote_control import android_browser_finder | 7 from chrome_remote_control import android_browser_finder |
| 8 from chrome_remote_control import browser_options | 8 from chrome_remote_control import browser_options |
| 9 from chrome_remote_control.system_stub import PopenStub | 9 from chrome_remote_control import system_stub |
| 10 from chrome_remote_control.system_stub import SubprocessModuleStub | |
| 11 | |
| 12 # adb not even found | |
| 13 # android_browser_finder not returning | |
| 14 class ADBCommandsStub(object): | |
| 15 def __init__(self, module, device): | |
| 16 self._module = module | |
| 17 self._device = device | |
| 18 self.is_root_enabled = True | |
| 19 | |
| 20 def RunShellCommand(self, args): | |
| 21 if isinstance(args, basestring): | |
| 22 import shlex | |
| 23 args = shlex.split(args) | |
| 24 handler = self._module.shell_command_handlers[args[0]] | |
| 25 return handler(args) | |
| 26 | |
| 27 def IsRootEnabled(self): | |
| 28 return self.is_root_enabled | |
| 29 | |
| 30 class ADBCommandsModuleStub(object): | |
| 31 def __init__(self): | |
| 32 self.attached_devices = [] | |
| 33 self.shell_command_handlers = {} | |
| 34 | |
| 35 def ADBCommandsStubConstructor(device=None): | |
| 36 return ADBCommandsStub(self, device) | |
| 37 self.ADBCommands = ADBCommandsStubConstructor | |
| 38 | |
| 39 def IsAndroidSupported(self): # pylint: disable=R0201 | |
| 40 return True | |
| 41 | |
| 42 def GetAttachedDevices(self): | |
| 43 return self.attached_devices | |
| 44 | |
| 45 def HasForwarder(self, adb): # pylint: disable=W0613,R0201 | |
| 46 return True | |
| 47 | 10 |
| 48 class AndroidBrowserFinderTest(unittest.TestCase): | 11 class AndroidBrowserFinderTest(unittest.TestCase): |
| 12 def setUp(self): |
| 13 self._stubs = system_stub.Override(android_browser_finder, |
| 14 ['adb_commands', 'subprocess']) |
| 15 |
| 16 def tearDown(self): |
| 17 self._stubs.Restore() |
| 18 |
| 49 def test_no_adb(self): | 19 def test_no_adb(self): |
| 50 options = browser_options.BrowserOptions() | 20 options = browser_options.BrowserOptions() |
| 51 | 21 |
| 52 subprocess_stub = SubprocessModuleStub() | 22 def NoAdb(*args, **kargs): # pylint: disable=W0613 |
| 53 def NoADB(*args, **kargs): # pylint: disable=W0613 | |
| 54 raise OSError('not found') | 23 raise OSError('not found') |
| 55 subprocess_stub.Popen_hook = NoADB | 24 self._stubs.subprocess.Popen = NoAdb |
| 56 browsers = android_browser_finder.FindAllAvailableBrowsers( | 25 browsers = android_browser_finder.FindAllAvailableBrowsers(options) |
| 57 options, subprocess_stub) | |
| 58 self.assertEquals(0, len(browsers)) | 26 self.assertEquals(0, len(browsers)) |
| 59 | 27 |
| 60 def test_adb_no_devices(self): | 28 def test_adb_no_devices(self): |
| 61 options = browser_options.BrowserOptions() | 29 options = browser_options.BrowserOptions() |
| 62 | 30 |
| 63 subprocess_stub = SubprocessModuleStub() | 31 browsers = android_browser_finder.FindAllAvailableBrowsers(options) |
| 64 popen_stub = PopenStub(('', '')) | |
| 65 subprocess_stub.Popen_result = popen_stub | |
| 66 | |
| 67 adb_commands_module_stub = ADBCommandsModuleStub() | |
| 68 browsers = android_browser_finder.FindAllAvailableBrowsers( | |
| 69 options, subprocess_stub, adb_commands_module_stub) | |
| 70 self.assertEquals(0, len(browsers)) | 32 self.assertEquals(0, len(browsers)) |
| 71 | 33 |
| 72 | 34 |
| 73 def test_adb_permissions_error(self): | 35 def test_adb_permissions_error(self): |
| 74 options = browser_options.BrowserOptions() | 36 options = browser_options.BrowserOptions() |
| 75 | 37 |
| 76 subprocess_stub = SubprocessModuleStub() | 38 self._stubs.subprocess.Popen.communicate_result = ( |
| 77 popen_stub = PopenStub(( | |
| 78 """List of devices attached | 39 """List of devices attached |
| 79 ????????????\tno permissions""", | 40 ????????????\tno permissions""", |
| 80 """* daemon not running. starting it now on port 5037 * | 41 """* daemon not running. starting it now on port 5037 * |
| 81 * daemon started successfully * | 42 * daemon started successfully * |
| 82 """)) | 43 """) |
| 83 subprocess_stub.Popen_result = popen_stub | |
| 84 | |
| 85 adb_commands_module_stub = ADBCommandsModuleStub() | |
| 86 | 44 |
| 87 warnings = [] | 45 warnings = [] |
| 88 class TempFilter(logging.Filter): | 46 class TempFilter(logging.Filter): |
| 89 def filter(self, record): | 47 def filter(self, record): |
| 90 warnings.append(record) | 48 warnings.append(record) |
| 91 return 0 | 49 return 0 |
| 92 temp_filter = TempFilter() | 50 temp_filter = TempFilter() |
| 93 | 51 |
| 94 try: | 52 try: |
| 95 logger = logging.getLogger() | 53 logger = logging.getLogger() |
| 96 logger.addFilter(temp_filter) | 54 logger.addFilter(temp_filter) |
| 97 | 55 |
| 98 browsers = android_browser_finder.FindAllAvailableBrowsers( | 56 browsers = android_browser_finder.FindAllAvailableBrowsers(options) |
| 99 options, subprocess_stub, adb_commands_module_stub) | |
| 100 finally: | 57 finally: |
| 101 logger.removeFilter(temp_filter) | 58 logger.removeFilter(temp_filter) |
| 102 self.assertEquals(3, len(warnings)) | 59 self.assertEquals(3, len(warnings)) |
| 103 self.assertEquals(0, len(browsers)) | 60 self.assertEquals(0, len(browsers)) |
| 104 | 61 |
| 105 | 62 |
| 106 def test_adb_two_devices(self): | 63 def test_adb_two_devices(self): |
| 107 options = browser_options.BrowserOptions() | 64 options = browser_options.BrowserOptions() |
| 108 | 65 |
| 109 subprocess_stub = SubprocessModuleStub() | 66 self._stubs.adb_commands.attached_devices = ['015d14fec128220c', |
| 110 popen_stub = PopenStub(('', '')) | |
| 111 subprocess_stub.Popen_result = popen_stub | |
| 112 adb_commands_module_stub = ADBCommandsModuleStub() | |
| 113 adb_commands_module_stub.attached_devices = ['015d14fec128220c', | |
| 114 '015d14fec128220d'] | 67 '015d14fec128220d'] |
| 115 | 68 |
| 116 warnings = [] | 69 warnings = [] |
| 117 class TempFilter(logging.Filter): | 70 class TempFilter(logging.Filter): |
| 118 def filter(self, record): | 71 def filter(self, record): |
| 119 warnings.append(record) | 72 warnings.append(record) |
| 120 return 0 | 73 return 0 |
| 121 temp_filter = TempFilter() | 74 temp_filter = TempFilter() |
| 122 | 75 |
| 123 try: | 76 try: |
| 124 logger = logging.getLogger() | 77 logger = logging.getLogger() |
| 125 logger.addFilter(temp_filter) | 78 logger.addFilter(temp_filter) |
| 126 | 79 |
| 127 browsers = android_browser_finder.FindAllAvailableBrowsers( | 80 browsers = android_browser_finder.FindAllAvailableBrowsers(options) |
| 128 options, subprocess_stub, adb_commands_module_stub) | |
| 129 finally: | 81 finally: |
| 130 logger.removeFilter(temp_filter) | 82 logger.removeFilter(temp_filter) |
| 131 self.assertEquals(1, len(warnings)) | 83 self.assertEquals(1, len(warnings)) |
| 132 self.assertEquals(0, len(browsers)) | 84 self.assertEquals(0, len(browsers)) |
| 133 | 85 |
| 134 def test_adb_one_device(self): | 86 def test_adb_one_device(self): |
| 135 options = browser_options.BrowserOptions() | 87 options = browser_options.BrowserOptions() |
| 136 | 88 |
| 137 subprocess_stub = SubprocessModuleStub() | 89 self._stubs.adb_commands.attached_devices = ['015d14fec128220c'] |
| 138 popen_stub = PopenStub(('', '')) | |
| 139 subprocess_stub.Popen_result = popen_stub | |
| 140 adb_commands_module_stub = ADBCommandsModuleStub() | |
| 141 adb_commands_module_stub.attached_devices = ['015d14fec128220c'] | |
| 142 | 90 |
| 143 def OnPM(args): | 91 def OnPM(args): |
| 144 assert args[0] == 'pm' | 92 assert args[0] == 'pm' |
| 145 assert args[1] == 'list' | 93 assert args[1] == 'list' |
| 146 assert args[2] == 'packages' | 94 assert args[2] == 'packages' |
| 147 return ['package:org.chromium.content_shell', | 95 return ['package:org.chromium.content_shell', |
| 148 'package.com.google.android.setupwizard'] | 96 'package.com.google.android.setupwizard'] |
| 149 | 97 |
| 150 adb_commands_module_stub.shell_command_handlers['pm'] = OnPM | 98 self._stubs.adb_commands.shell_command_handlers['pm'] = OnPM |
| 151 | 99 |
| 152 browsers = android_browser_finder.FindAllAvailableBrowsers( | 100 browsers = android_browser_finder.FindAllAvailableBrowsers(options) |
| 153 options, subprocess_stub, adb_commands_module_stub) | |
| 154 self.assertEquals(1, len(browsers)) | 101 self.assertEquals(1, len(browsers)) |
| OLD | NEW |