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 |