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.platform import android_device
10 from telemetry.core.platform import android_platform_backend
11 from telemetry.core.backends.chrome import android_browser_finder
12 from telemetry.unittest import system_stub
15 class AndroidBrowserFinderTest(unittest.TestCase):
17 self._stubs = system_stub.Override(android_browser_finder,
18 ['adb_commands', 'os', 'subprocess',
20 self._android_device_stub = system_stub.Override(
21 android_device, ['adb_commands'])
22 self._apb_stub = system_stub.Override(
23 android_platform_backend, ['adb_commands'])
24 self._actual_ps_util = android_browser_finder.psutil
25 android_browser_finder.psutil = None
29 self._android_device_stub.Restore()
30 self._apb_stub.Restore()
31 android_browser_finder.psutil = self._actual_ps_util
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(finder_options)
40 self.assertEquals(0, len(browsers))
42 def test_adb_no_devices(self):
43 finder_options = browser_options.BrowserFinderOptions()
45 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
46 self.assertEquals(0, len(browsers))
48 def test_adb_permissions_error(self):
49 finder_options = browser_options.BrowserFinderOptions()
51 self._stubs.subprocess.Popen.communicate_result = (
52 """List of devices attached
53 ????????????\tno permissions""",
54 """* daemon not running. starting it now on port 5037 *
55 * daemon started successfully *
57 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
58 self.assertEquals(3, len(self._stubs.logging.warnings))
59 self.assertEquals(0, len(browsers))
61 def test_adb_two_devices(self):
62 finder_options = browser_options.BrowserFinderOptions()
64 self._android_device_stub.adb_commands.attached_devices = [
65 '015d14fec128220c', '015d14fec128220d']
67 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
68 self.assertEquals(1, len(self._stubs.logging.warnings))
69 self.assertEquals(0, len(browsers))
71 @benchmark.Disabled('chromeos')
72 def test_adb_one_device(self):
73 finder_options = browser_options.BrowserFinderOptions()
75 self._android_device_stub.adb_commands.attached_devices = (
79 assert args[0] == 'pm'
80 assert args[1] == 'list'
81 assert args[2] == 'packages'
82 return ['package:org.chromium.content_shell_apk',
83 'package.com.google.android.setupwizard']
86 return ['/sys/devices/system/cpu/cpu0']
88 self._apb_stub.adb_commands.adb_device.shell_command_handlers['pm'] = OnPM
89 self._apb_stub.adb_commands.adb_device.shell_command_handlers['ls'] = OnLs
91 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
92 self.assertEquals(1, len(browsers))
95 class FakePossibleBrowser(object):
96 def __init__(self, last_modification_time):
97 self._last_modification_time = last_modification_time
99 def last_modification_time(self):
100 return self._last_modification_time
103 class SelectDefaultBrowserTest(unittest.TestCase):
104 def testEmptyListGivesNone(self):
105 self.assertIsNone(android_browser_finder.SelectDefaultBrowser([]))
107 def testSinglePossibleReturnsSame(self):
108 possible_browsers = [FakePossibleBrowser(last_modification_time=1)]
110 possible_browsers[0],
111 android_browser_finder.SelectDefaultBrowser(possible_browsers))
113 def testListGivesNewest(self):
114 possible_browsers = [
115 FakePossibleBrowser(last_modification_time=2),
116 FakePossibleBrowser(last_modification_time=3), # newest
117 FakePossibleBrowser(last_modification_time=1),
120 possible_browsers[1],
121 android_browser_finder.SelectDefaultBrowser(possible_browsers))