133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# Copyright 2014 The Chromium Authors. All rights reserved. 233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# Use of this source code is governed by a BSD-style license that can be 333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# found in the LICENSE file. 433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport unittest 633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom telemetry import decorators 833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom telemetry.internal.browser import browser_options 933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom telemetry.internal.platform import android_device 1033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom telemetry.internal.platform import remote_platform_options 1133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom telemetry.testing import system_stub 1233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport mock 1333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 1433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom devil.android import device_utils 1533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom devil.android import device_blacklist 1633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 1733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 1833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass _BaseAndroidDeviceTest(unittest.TestCase): 1933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 2033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def check_blacklist_arg(blacklist): 2133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(blacklist is None 2233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck or isinstance(blacklist, device_blacklist.Blacklist)) 2333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return mock.DEFAULT 2433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 2533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_patcher = mock.patch( 2633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 'devil.android.device_utils.DeviceUtils.HealthyDevices') 2733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock = self._healthy_device_patcher.start() 2833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.side_effect = check_blacklist_arg 2933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._android_device_stub = system_stub.Override( 3033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck android_device, ['subprocess', 'logging']) 3133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 3233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def _GetMockDeviceUtils(self, device_serial): 3333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck device = device_utils.DeviceUtils(device_serial) 3433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return device 3533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 3633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def tearDown(self): 3733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_patcher.stop() 3833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._android_device_stub.Restore() 3933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 4033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 4133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass AndroidDeviceTest(_BaseAndroidDeviceTest): 4233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Enabled('android') 4333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testGetAllAttachedAndroidDevices(self): 4433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.return_value = [ 4533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('01'), 4633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('02')] 4733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals( 4833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck set(['01', '02']), 4933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck set(device.device_id for device in 5033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck android_device.AndroidDevice.GetAllConnectedDevices(None))) 5133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 5233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Enabled('android') 5333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNoAdbReturnsNone(self): 5433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options = browser_options.BrowserFinderOptions() 5533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck with ( 5633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock.patch('os.path.isabs', return_value=True)), ( 5733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock.patch('os.path.exists', return_value=False)): 5833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals([], self._android_device_stub.logging.warnings) 5933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertIsNone(android_device.GetDevice(finder_options)) 6033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 6133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # https://github.com/catapult-project/catapult/issues/3099 (Android) 6233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Disabled('all') 6333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdbNoDevicesReturnsNone(self): 6433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options = browser_options.BrowserFinderOptions() 6533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck with mock.patch('os.path.isabs', return_value=False): 6633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.return_value = [] 6733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals([], self._android_device_stub.logging.warnings) 6833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertIsNone(android_device.GetDevice(finder_options)) 6933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 7033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # https://github.com/catapult-project/catapult/issues/3099 (Android) 7133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Disabled('all') 7233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdbTwoDevicesReturnsNone(self): 7333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options = browser_options.BrowserFinderOptions() 7433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck with mock.patch('os.path.isabs', return_value=False): 7533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.return_value = [ 7633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('015d14fec128220c'), 7733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('015d14fec128220d')] 7833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck device = android_device.GetDevice(finder_options) 7933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals([ 8033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 'Multiple devices attached. Please specify one of the following:\n' 8133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck ' --device=015d14fec128220c\n' 8233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck ' --device=015d14fec128220d'], 8333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._android_device_stub.logging.warnings) 8433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertIsNone(device) 8533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 8633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Enabled('android') 8733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdbPickOneDeviceReturnsDeviceInstance(self): 8833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options = browser_options.BrowserFinderOptions() 8933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck platform_options = remote_platform_options.AndroidPlatformOptions( 9033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck device='555d14fecddddddd') # pick one 9133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options.remote_platform_options = platform_options 9233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck with mock.patch('os.path.isabs', return_value=False): 9333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.return_value = [ 9433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('015d14fec128220c'), 9533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('555d14fecddddddd')] 9633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck device = android_device.GetDevice(finder_options) 9733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals([], self._android_device_stub.logging.warnings) 9833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals('555d14fecddddddd', device.device_id) 9933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 10033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # https://github.com/catapult-project/catapult/issues/3099 (Android) 10133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Disabled('all') 10233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdbOneDeviceReturnsDeviceInstance(self): 10333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options = browser_options.BrowserFinderOptions() 10433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck with mock.patch('os.path.isabs', return_value=False): 10533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.return_value = [ 10633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('015d14fec128220c')] 10733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck device = android_device.GetDevice(finder_options) 10833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals([], self._android_device_stub.logging.warnings) 10933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals('015d14fec128220c', device.device_id) 11033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 11133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 11233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass FindAllAvailableDevicesTest(_BaseAndroidDeviceTest): 11333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # https://github.com/catapult-project/catapult/issues/3099 (Android) 11433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Disabled('all') 11533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdbNoDeviceReturnsEmptyList(self): 11633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options = browser_options.BrowserFinderOptions() 11733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck with mock.patch('os.path.isabs', return_value=False): 11833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.return_value = [] 11933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck devices = android_device.FindAllAvailableDevices(finder_options) 12033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals([], self._android_device_stub.logging.warnings) 12133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertIsNotNone(devices) 12233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals(len(devices), 0) 12333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 12433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # https://github.com/catapult-project/catapult/issues/3099 (Android) 12533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Disabled('all') 12633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdbOneDeviceReturnsListWithOneDeviceInstance(self): 12733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options = browser_options.BrowserFinderOptions() 12833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck with mock.patch('os.path.isabs', return_value=False): 12933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.return_value = [ 13033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('015d14fec128220c')] 13133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck devices = android_device.FindAllAvailableDevices(finder_options) 13233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals([], self._android_device_stub.logging.warnings) 13333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertIsNotNone(devices) 13433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals(len(devices), 1) 13533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals('015d14fec128220c', devices[0].device_id) 13633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 13733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # https://github.com/catapult-project/catapult/issues/3099 (Android) 13833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @decorators.Disabled('all') 13933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdbMultipleDevicesReturnsListWithAllDeviceInstances(self): 14033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck finder_options = browser_options.BrowserFinderOptions() 14133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck with mock.patch('os.path.isabs', return_value=False): 14233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._healthy_device_mock.return_value = [ 14333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('015d14fec128220c'), 14433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('015d14fec128220d'), 14533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._GetMockDeviceUtils('015d14fec128220e')] 14633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck devices = android_device.FindAllAvailableDevices(finder_options) 14733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals([], self._android_device_stub.logging.warnings) 14833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertIsNotNone(devices) 14933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals(len(devices), 3) 15033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals(devices[0].guid, '015d14fec128220c') 15133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals(devices[1].guid, '015d14fec128220d') 15233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEquals(devices[2].guid, '015d14fec128220e') 153