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 5import unittest 6 7from telemetry import benchmark 8from telemetry.core import browser_options 9from telemetry.core.platform import android_device 10from telemetry.core.platform import android_platform_backend 11from telemetry.core.backends.chrome import android_browser_finder 12from telemetry.unittest import system_stub 13 14 15class 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 25 def tearDown(self): 26 self._stubs.Restore() 27 self._android_device_stub.Restore() 28 self._apb_stub.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 def test_adb_permissions_error(self): 46 finder_options = browser_options.BrowserFinderOptions() 47 48 self._stubs.subprocess.Popen.communicate_result = ( 49 """List of devices attached 50????????????\tno permissions""", 51 """* daemon not running. starting it now on port 5037 * 52* daemon started successfully * 53""") 54 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options) 55 self.assertEquals(3, len(self._stubs.logging.warnings)) 56 self.assertEquals(0, len(browsers)) 57 58 def test_adb_two_devices(self): 59 finder_options = browser_options.BrowserFinderOptions() 60 61 self._android_device_stub.adb_commands.attached_devices = [ 62 '015d14fec128220c', '015d14fec128220d'] 63 64 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options) 65 self.assertEquals(1, len(self._stubs.logging.warnings)) 66 self.assertEquals(0, len(browsers)) 67 68 @benchmark.Disabled('chromeos') 69 def test_adb_one_device(self): 70 finder_options = browser_options.BrowserFinderOptions() 71 72 self._android_device_stub.adb_commands.attached_devices = ( 73 ['015d14fec128220c']) 74 75 def OnPM(args): 76 assert args[0] == 'pm' 77 assert args[1] == 'list' 78 assert args[2] == 'packages' 79 return ['package:org.chromium.content_shell_apk', 80 'package.com.google.android.setupwizard'] 81 82 def OnLs(_): 83 return ['/sys/devices/system/cpu/cpu0'] 84 85 self._apb_stub.adb_commands.adb_device.shell_command_handlers['pm'] = OnPM 86 self._apb_stub.adb_commands.adb_device.shell_command_handlers['ls'] = OnLs 87 88 browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options) 89 self.assertEquals(1, len(browsers)) 90