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.
6 from telemetry.core import browser_options
7 from telemetry.core.backends.chrome import android_browser_finder
8 from telemetry.unittest import system_stub
10 class LoggingStub(object):
14 def info(self, msg, *args):
17 def warn(self, msg, *args):
18 self.warnings.append(msg % args)
20 class AndroidBrowserFinderTest(unittest.TestCase):
22 self._stubs = system_stub.Override(android_browser_finder,
23 ['adb_commands', 'subprocess'])
24 android_browser_finder.adb_works = None # Blow cache between runs.
29 def test_no_adb(self):
30 finder_options = browser_options.BrowserFinderOptions()
32 def NoAdb(*args, **kargs): # pylint: disable=W0613
33 raise OSError('not found')
34 self._stubs.subprocess.Popen = NoAdb
35 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
36 self.assertEquals(0, len(browsers))
38 def test_adb_no_devices(self):
39 finder_options = browser_options.BrowserFinderOptions()
41 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
42 self.assertEquals(0, len(browsers))
45 def test_adb_permissions_error(self):
46 finder_options = browser_options.BrowserFinderOptions()
48 self._stubs.subprocess.Popen.communicate_result = (
49 """List of devices attached
50 ????????????\tno permissions""",
51 """* daemon not running. starting it now on port 5037 *
52 * daemon started successfully *
55 log_stub = LoggingStub()
56 browsers = android_browser_finder.FindAllAvailableBrowsers(
57 finder_options, log_stub)
58 self.assertEquals(3, len(log_stub.warnings))
59 self.assertEquals(0, len(browsers))
62 def test_adb_two_devices(self):
63 finder_options = browser_options.BrowserFinderOptions()
65 self._stubs.adb_commands.attached_devices = ['015d14fec128220c',
68 log_stub = LoggingStub()
69 browsers = android_browser_finder.FindAllAvailableBrowsers(
70 finder_options, log_stub)
71 self.assertEquals(1, len(log_stub.warnings))
72 self.assertEquals(0, len(browsers))
74 def test_adb_one_device(self):
75 finder_options = browser_options.BrowserFinderOptions()
77 self._stubs.adb_commands.attached_devices = ['015d14fec128220c']
80 assert args[0] == 'pm'
81 assert args[1] == 'list'
82 assert args[2] == 'packages'
83 return ['package:org.chromium.content_shell_apk',
84 'package.com.google.android.setupwizard']
86 self._stubs.adb_commands.shell_command_handlers['pm'] = OnPM
88 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
89 self.assertEquals(1, len(browsers))