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 import test
7 from telemetry.core import browser_options
8 from telemetry.core.backends.chrome import android_browser_finder
9 from telemetry.unittest import system_stub
11 class LoggingStub(object):
15 def info(self, msg, *args):
18 def warn(self, msg, *args):
19 self.warnings.append(msg % args)
21 class AndroidBrowserFinderTest(unittest.TestCase):
23 self._stubs = system_stub.Override(android_browser_finder,
24 ['adb_commands', 'subprocess'])
25 android_browser_finder.adb_works = None # Blow cache between runs.
30 def test_no_adb(self):
31 finder_options = browser_options.BrowserFinderOptions()
33 def NoAdb(*args, **kargs): # pylint: disable=W0613
34 raise OSError('not found')
35 self._stubs.subprocess.Popen = NoAdb
36 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
37 self.assertEquals(0, len(browsers))
39 def test_adb_no_devices(self):
40 finder_options = browser_options.BrowserFinderOptions()
42 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
43 self.assertEquals(0, len(browsers))
46 def test_adb_permissions_error(self):
47 finder_options = browser_options.BrowserFinderOptions()
49 self._stubs.subprocess.Popen.communicate_result = (
50 """List of devices attached
51 ????????????\tno permissions""",
52 """* daemon not running. starting it now on port 5037 *
53 * daemon started successfully *
56 log_stub = LoggingStub()
57 browsers = android_browser_finder.FindAllAvailableBrowsers(
58 finder_options, log_stub)
59 self.assertEquals(3, len(log_stub.warnings))
60 self.assertEquals(0, len(browsers))
63 def test_adb_two_devices(self):
64 finder_options = browser_options.BrowserFinderOptions()
66 self._stubs.adb_commands.attached_devices = ['015d14fec128220c',
69 log_stub = LoggingStub()
70 browsers = android_browser_finder.FindAllAvailableBrowsers(
71 finder_options, log_stub)
72 self.assertEquals(1, len(log_stub.warnings))
73 self.assertEquals(0, len(browsers))
75 @test.Disabled('chromeos')
76 def test_adb_one_device(self):
77 finder_options = browser_options.BrowserFinderOptions()
79 self._stubs.adb_commands.attached_devices = ['015d14fec128220c']
82 assert args[0] == 'pm'
83 assert args[1] == 'list'
84 assert args[2] == 'packages'
85 return ['package:org.chromium.content_shell_apk',
86 'package.com.google.android.setupwizard']
88 self._stubs.adb_commands.shell_command_handlers['pm'] = OnPM
90 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
91 self.assertEquals(1, len(browsers))