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