3f55666890000c818bc47e42ba74345fa36a0846
[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 import unittest
5
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
10
11 class LoggingStub(object):
12   def __init__(self):
13     self.warnings = []
14
15   def info(self, msg, *args):
16     pass
17
18   def warn(self, msg, *args):
19     self.warnings.append(msg % args)
20
21 class AndroidBrowserFinderTest(unittest.TestCase):
22   def setUp(self):
23     self._stubs = system_stub.Override(android_browser_finder,
24                                        ['adb_commands', 'subprocess'])
25     android_browser_finder.adb_works = None  # Blow cache between runs.
26
27   def tearDown(self):
28     self._stubs.Restore()
29
30   def test_no_adb(self):
31     finder_options = browser_options.BrowserFinderOptions()
32
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))
38
39   def test_adb_no_devices(self):
40     finder_options = browser_options.BrowserFinderOptions()
41
42     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
43     self.assertEquals(0, len(browsers))
44
45
46   def test_adb_permissions_error(self):
47     finder_options = browser_options.BrowserFinderOptions()
48
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 *
54 """)
55
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))
61
62
63   def test_adb_two_devices(self):
64     finder_options = browser_options.BrowserFinderOptions()
65
66     self._stubs.adb_commands.attached_devices = ['015d14fec128220c',
67                                                  '015d14fec128220d']
68
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))
74
75   @test.Disabled('chromeos')
76   def test_adb_one_device(self):
77     finder_options = browser_options.BrowserFinderOptions()
78
79     self._stubs.adb_commands.attached_devices = ['015d14fec128220c']
80
81     def OnPM(args):
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']
87
88     self._stubs.adb_commands.shell_command_handlers['pm'] = OnPM
89
90     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
91     self.assertEquals(1, len(browsers))