Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / backends / chrome / android_browser_finder_unittest.py
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.
4
5 import unittest
6
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
13
14
15 class AndroidBrowserFinderTest(unittest.TestCase):
16   def setUp(self):
17     self._stubs = system_stub.Override(android_browser_finder,
18                                        ['adb_commands', 'os', 'subprocess',
19                                         'logging'])
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
26
27   def tearDown(self):
28     self._stubs.Restore()
29     self._android_device_stub.Restore()
30     self._apb_stub.Restore()
31     android_browser_finder.psutil = self._actual_ps_util
32
33   def test_no_adb(self):
34     finder_options = browser_options.BrowserFinderOptions()
35
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))
41
42   def test_adb_no_devices(self):
43     finder_options = browser_options.BrowserFinderOptions()
44
45     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
46     self.assertEquals(0, len(browsers))
47
48   def test_adb_permissions_error(self):
49     finder_options = browser_options.BrowserFinderOptions()
50
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 *
56 """)
57     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
58     self.assertEquals(3, len(self._stubs.logging.warnings))
59     self.assertEquals(0, len(browsers))
60
61   def test_adb_two_devices(self):
62     finder_options = browser_options.BrowserFinderOptions()
63
64     self._android_device_stub.adb_commands.attached_devices = [
65         '015d14fec128220c', '015d14fec128220d']
66
67     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
68     self.assertEquals(1, len(self._stubs.logging.warnings))
69     self.assertEquals(0, len(browsers))
70
71   @benchmark.Disabled('chromeos')
72   def test_adb_one_device(self):
73     finder_options = browser_options.BrowserFinderOptions()
74
75     self._android_device_stub.adb_commands.attached_devices = (
76         ['015d14fec128220c'])
77
78     def OnPM(args):
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']
84
85     def OnLs(_):
86       return ['/sys/devices/system/cpu/cpu0']
87
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
90
91     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
92     self.assertEquals(1, len(browsers))
93
94
95 class FakePossibleBrowser(object):
96   def __init__(self, last_modification_time):
97     self._last_modification_time = last_modification_time
98
99   def last_modification_time(self):
100     return self._last_modification_time
101
102
103 class SelectDefaultBrowserTest(unittest.TestCase):
104   def testEmptyListGivesNone(self):
105     self.assertIsNone(android_browser_finder.SelectDefaultBrowser([]))
106
107   def testSinglePossibleReturnsSame(self):
108     possible_browsers = [FakePossibleBrowser(last_modification_time=1)]
109     self.assertIs(
110       possible_browsers[0],
111       android_browser_finder.SelectDefaultBrowser(possible_browsers))
112
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),
118         ]
119     self.assertIs(
120       possible_browsers[1],
121       android_browser_finder.SelectDefaultBrowser(possible_browsers))