Upstream version 9.38.198.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.backends.chrome import android_browser_finder
10 from telemetry.unittest import system_stub
11
12
13 class LoggingStub(object):
14   def __init__(self):
15     self.warnings = []
16
17   def info(self, msg, *args):
18     pass
19
20   def warn(self, msg, *args):
21     self.warnings.append(msg % args)
22
23
24 class AndroidBrowserFinderTest(unittest.TestCase):
25   def setUp(self):
26     self._stubs = system_stub.Override(android_browser_finder,
27                                        ['adb_commands', 'os', 'subprocess'])
28     self._log_stub = LoggingStub()
29
30   def tearDown(self):
31     self._stubs.Restore()
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(
40         finder_options, self._log_stub)
41     self.assertEquals(0, len(browsers))
42
43   def test_adb_no_devices(self):
44     finder_options = browser_options.BrowserFinderOptions()
45
46     browsers = android_browser_finder.FindAllAvailableBrowsers(
47         finder_options, self._log_stub)
48     self.assertEquals(0, len(browsers))
49
50   def test_adb_permissions_error(self):
51     finder_options = browser_options.BrowserFinderOptions()
52
53     self._stubs.subprocess.Popen.communicate_result = (
54         """List of devices attached
55 ????????????\tno permissions""",
56         """* daemon not running. starting it now on port 5037 *
57 * daemon started successfully *
58 """)
59
60     browsers = android_browser_finder.FindAllAvailableBrowsers(
61         finder_options, self._log_stub)
62     self.assertEquals(3, len(self._log_stub.warnings))
63     self.assertEquals(0, len(browsers))
64
65   def test_adb_two_devices(self):
66     finder_options = browser_options.BrowserFinderOptions()
67
68     self._stubs.adb_commands.attached_devices = ['015d14fec128220c',
69                                                  '015d14fec128220d']
70
71     browsers = android_browser_finder.FindAllAvailableBrowsers(
72         finder_options, self._log_stub)
73     self.assertEquals(1, len(self._log_stub.warnings))
74     self.assertEquals(0, len(browsers))
75
76   @benchmark.Disabled('chromeos')
77   def test_adb_one_device(self):
78     finder_options = browser_options.BrowserFinderOptions()
79
80     self._stubs.adb_commands.attached_devices = ['015d14fec128220c']
81
82     def OnPM(args):
83       assert args[0] == 'pm'
84       assert args[1] == 'list'
85       assert args[2] == 'packages'
86       return ['package:org.chromium.content_shell_apk',
87               'package.com.google.android.setupwizard']
88
89     self._stubs.adb_commands.shell_command_handlers['pm'] = OnPM
90
91     browsers = android_browser_finder.FindAllAvailableBrowsers(
92         finder_options, self._log_stub)
93     self.assertEquals(1, len(browsers))