1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
7 from telemetry import benchmark
8 from telemetry.core import browser_options
9 from telemetry.core.backends.chrome import android_browser_finder
10 from telemetry.unittest import system_stub
13 class LoggingStub(object):
17 def info(self, msg, *args):
20 def warn(self, msg, *args):
21 self.warnings.append(msg % args)
24 class AndroidBrowserFinderTest(unittest.TestCase):
26 self._stubs = system_stub.Override(android_browser_finder,
27 ['adb_commands', 'os', 'subprocess'])
28 self._log_stub = LoggingStub()
33 def test_no_adb(self):
34 finder_options = browser_options.BrowserFinderOptions()
36 def NoAdb(*args, **kargs): # pylint: disable=W0613
37 raise OSError('not found')
38 self._stubs.subprocess.Popen = NoAdb
39 browsers = android_browser_finder.FindAllAvailableBrowsers(
40 finder_options, self._log_stub)
41 self.assertEquals(0, len(browsers))
43 def test_adb_no_devices(self):
44 finder_options = browser_options.BrowserFinderOptions()
46 browsers = android_browser_finder.FindAllAvailableBrowsers(
47 finder_options, self._log_stub)
48 self.assertEquals(0, len(browsers))
50 def test_adb_permissions_error(self):
51 finder_options = browser_options.BrowserFinderOptions()
53 self._stubs.subprocess.Popen.communicate_result = (
54 """List of devices attached
55 ????????????\tno permissions""",
56 """* daemon not running. starting it now on port 5037 *
57 * daemon started successfully *
60 browsers = android_browser_finder.FindAllAvailableBrowsers(
61 finder_options, self._log_stub)
62 self.assertEquals(3, len(self._log_stub.warnings))
63 self.assertEquals(0, len(browsers))
65 def test_adb_two_devices(self):
66 finder_options = browser_options.BrowserFinderOptions()
68 self._stubs.adb_commands.attached_devices = ['015d14fec128220c',
71 browsers = android_browser_finder.FindAllAvailableBrowsers(
72 finder_options, self._log_stub)
73 self.assertEquals(1, len(self._log_stub.warnings))
74 self.assertEquals(0, len(browsers))
76 @benchmark.Disabled('chromeos')
77 def test_adb_one_device(self):
78 finder_options = browser_options.BrowserFinderOptions()
80 self._stubs.adb_commands.attached_devices = ['015d14fec128220c']
83 assert args[0] == 'pm'
84 assert args[1] == 'list'
85 assert args[2] == 'packages'
86 return ['package:org.chromium.content_shell_apk',
87 'package.com.google.android.setupwizard']
89 self._stubs.adb_commands.shell_command_handlers['pm'] = OnPM
91 browsers = android_browser_finder.FindAllAvailableBrowsers(
92 finder_options, self._log_stub)
93 self.assertEquals(1, len(browsers))