1# Copyright 2014 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.core.platform.power_monitor import android_temperature_monitor 8from telemetry.unittest import simple_mock 9 10_ = simple_mock.DONT_CARE 11 12 13class TemperatureMonitorForTesting( 14 android_temperature_monitor.AndroidTemperatureMonitor): 15 """Overrides interaction with ADB to test the rest.""" 16 17 def __init__(self, power_monitor, expected_temperature): 18 super(TemperatureMonitorForTesting, self).__init__(power_monitor, None) 19 self._expected_temperature = expected_temperature 20 21 def _GetBoardTemperatureCelsius(self): 22 return self._expected_temperature 23 24 def PowerMeasurementsConsistent(self, power_measurements): 25 component_utilization = power_measurements.get('component_utilization', {}) 26 whole_package = component_utilization.get('whole_package', {}) 27 expected_temperature = whole_package.get('average_temperature_c') 28 return expected_temperature == self._expected_temperature 29 30 31class AndroidTemperatureMonitorTest(unittest.TestCase): 32 def testNoAttmptToMonitorIfIncapable(self): 33 mock_power_monitor = simple_mock.MockObject() 34 mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(False) 35 36 temperature_monitor = TemperatureMonitorForTesting(mock_power_monitor, 42.0) 37 self.assertTrue(temperature_monitor.CanMonitorPower()) 38 temperature_monitor.StartMonitoringPower(None) 39 power_results = temperature_monitor.StopMonitoringPower() 40 self.assertTrue( 41 temperature_monitor.PowerMeasurementsConsistent(power_results)) 42 43 def testPowerMonitoringResultsWereUpdated(self): 44 mock_power_monitor = simple_mock.MockObject() 45 mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(True) 46 fake_measurement = {'identifier' : '123'} 47 mock_power_monitor.ExpectCall('StartMonitoringPower', _) 48 mock_power_monitor.ExpectCall('StopMonitoringPower').WillReturn( 49 fake_measurement) 50 51 temperature_monitor = TemperatureMonitorForTesting(mock_power_monitor, 24.0) 52 self.assertTrue(temperature_monitor.CanMonitorPower()) 53 temperature_monitor.StartMonitoringPower(None) 54 measurements = temperature_monitor.StopMonitoringPower() 55 self.assertTrue( 56 temperature_monitor.PowerMeasurementsConsistent(measurements)) 57 self.assertEqual('123', measurements['identifier']) 58 59 def testSysfsReadFailed(self): 60 mock_power_monitor = simple_mock.MockObject() 61 mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(False) 62 mock_adb = simple_mock.MockObject() 63 mock_device_utils = simple_mock.MockObject() 64 mock_device_utils.ExpectCall('ReadFile', _).WillReturn([]) 65 setattr(mock_device_utils, 'old_interface', mock_adb) 66 67 monitor = android_temperature_monitor.AndroidTemperatureMonitor( 68 mock_power_monitor, mock_device_utils) 69 self.assertTrue(monitor.CanMonitorPower()) 70 monitor.StartMonitoringPower(None) 71 measurements = monitor.StopMonitoringPower() 72 self.assertTrue('identifier' in measurements) 73 self.assertTrue('component_utilization' not in measurements) 74