1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport unittest
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry.core.platform.power_monitor import cros_power_monitor
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CrosPowerMonitorMonitorTest(unittest.TestCase):
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  initial_power = ('''Device: Line Power
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  path:                    /sys/class/power_supply/AC
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  online:                  no
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  type:                    Mains
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  enum type:               Disconnected
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  model name:
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  voltage (V):             0
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  current (A):             0
19116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDevice: Battery
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  path:                    /sys/class/power_supply/BAT0
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  vendor:                  SANYO
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  model name:              AP13J3K
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  serial number:           0061
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  state:                   Discharging
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  voltage (V):             11.816
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  energy (Wh):             31.8262
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  energy rate (W):         12.7849
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  current (A):             1.082
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  charge (Ah):             2.829
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  full charge (Ah):        4.03
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  full charge design (Ah): 4.03
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  percentage:              70.1985
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  display percentage:      73.9874
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  technology:              Li-ion''')
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  final_power = ('''Device: Line Power
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  path:                    /sys/class/power_supply/AC
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  online:                  yes
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  type:                    Mains
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  enum type:               Disconnected
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  model name:
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  voltage (V):             0
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  current (A):             0
43116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDevice: Battery
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  path:                    /sys/class/power_supply/BAT0
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  vendor:                  SANYO
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  model name:              AP13J3K
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  serial number:           0061
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  state:                   Discharging
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  voltage (V):             12.238
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  energy (Wh):             31.8262
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  energy rate (W):         12.7993
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  current (A):             1.082
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  charge (Ah):             2.827
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  full charge (Ah):        4.03
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  full charge design (Ah): 4.03
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  percentage:              70.1985
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  display percentage:      73.9874
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  technology:              Li-ion''')
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  expected_parsing_power = {
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'Line Power': {
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'path': '/sys/class/power_supply/AC',
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'online': 'no',
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'type': 'Mains',
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'enum type': 'Disconnected',
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'voltage': '0',
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'current': '0'
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    },
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'Battery': {
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'path': '/sys/class/power_supply/BAT0',
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'vendor': 'SANYO',
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'model name': 'AP13J3K',
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'serial number': '0061',
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'state': 'Discharging',
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'voltage': '11.816',
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'energy': '31.8262',
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'energy rate': '12.7849',
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'current': '1.082',
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'charge': '2.829',
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'full charge': '4.03',
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'full charge design': '4.03',
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'percentage': '70.1985',
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'display percentage': '73.9874',
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'technology': 'Li-ion'
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  expected_power = {
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'energy_consumption_mwh': 2558.42,
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'power_samples_mw': [12784.9, 12799.3],
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'component_utilization': {
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'battery': {
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'charge_full': 4.03,
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'charge_full_design': 4.03,
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'charge_now': 2.827,
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'current_now': 1.082,
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'energy': 31.8262,
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'energy_rate': 12.7993,
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'voltage_now': 12.238
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      }
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  expected_cpu = {
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'whole_package': {
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'frequency_percent': {
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1700000000: 3.29254111574526,
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1600000000: 0.0,
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1500000000: 0.0,
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1400000000: 0.15926805099535601,
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1300000000: 0.47124116307273645,
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1200000000: 0.818756100807525,
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1100000000: 1.099381692400982,
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1000000000: 2.5942528544384302,
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        900000000: 5.68661122326737,
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        800000000: 3.850545467654628,
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        700000000: 2.409691872245393,
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        600000000: 1.4693702487650486,
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        500000000: 2.4623575553879373,
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        400000000: 2.672038150383057,
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        300000000: 3.415770495015825,
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        200000000: 69.59817400982045
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      },
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'cstate_residency_percent': {
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C0': 83.67623835616438535,
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C1': 0.2698609589041096,
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C2': 0.2780191780821918,
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C3': 15.77588150684931505
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      }
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    },
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'cpu0': {
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'frequency_percent': {
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1700000000: 4.113700564971752,
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1600000000: 0.0,
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1500000000: 0.0,
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1400000000: 0.1765536723163842,
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1300000000: 0.4943502824858757,
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1200000000: 0.7944915254237288,
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1100000000: 1.2226341807909604,
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1000000000: 3.0632062146892656,
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        900000000: 5.680614406779661,
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        800000000: 3.6679025423728815,
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        700000000: 2.379060734463277,
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        600000000: 1.4124293785310735,
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        500000000: 2.599752824858757,
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        400000000: 3.0102401129943503,
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        300000000: 3.650247175141243,
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        200000000: 67.73481638418079
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      },
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'cstate_residency_percent': {
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C0': 76.76226164383562,
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C1': 0.3189164383561644,
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C2': 0.4544301369863014,
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C3': 22.4643917808219178
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      }
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    },
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'cpu1': {
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'frequency_percent': {
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1700000000: 2.4713816665187682,
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1600000000: 0.0,
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1500000000: 0.0,
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1400000000: 0.1419824296743278,
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1300000000: 0.44813204365959713,
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1200000000: 0.8430206761913214,
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1100000000: 0.9761292040110037,
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        1000000000: 2.1252994941875945,
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        900000000: 5.69260803975508,
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        800000000: 4.033188392936374,
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        700000000: 2.4403230100275093,
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        600000000: 1.526311118999024,
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        500000000: 2.3249622859171177,
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        400000000: 2.3338361877717633,
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        300000000: 3.1812938148904073,
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        200000000: 71.46153163546012
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      },
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'cstate_residency_percent': {
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C0': 90.5902150684931507,
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C1': 0.2208054794520548,
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C2': 0.1016082191780822,
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'C3': 9.0873712328767123
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      }
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def testParsePowerSupplyInfo(self):
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    result = cros_power_monitor.CrosPowerMonitor.ParsePowerSupplyInfo(
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.initial_power)
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertDictEqual(result, self.expected_parsing_power)
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def testParsePower(self):
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results = cros_power_monitor.CrosPowerMonitor.ParsePower(
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.initial_power, self.final_power, 0.2)
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    for value in results['component_utilization']['battery']:
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      self.assertAlmostEqual(
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          results['component_utilization']['battery'][value],
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          self.expected_power['component_utilization']['battery'][value])
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertAlmostEqual(results['energy_consumption_mwh'],
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                           self.expected_power['energy_consumption_mwh'])
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertAlmostEqual(results['power_samples_mw'][0],
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                           self.expected_power['power_samples_mw'][0])
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertAlmostEqual(results['power_samples_mw'][1],
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                           self.expected_power['power_samples_mw'][1])
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  def testSplitSample(self):
20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    sample = self.initial_power + '\n1408739546\n'
20203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    power, time = cros_power_monitor.CrosPowerMonitor.SplitSample(sample)
20303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.assertEqual(power, self.initial_power)
20403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.assertEqual(time, 1408739546)
20503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def testCombineResults(self):
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    result = cros_power_monitor.CrosPowerMonitor.CombineResults(
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.expected_cpu, self.expected_power)
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    comp_util = result['component_utilization']
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Test power values.
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertEqual(result['energy_consumption_mwh'],
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     self.expected_power['energy_consumption_mwh'])
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertEqual(result['power_samples_mw'],
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     self.expected_power['power_samples_mw'])
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertEqual(comp_util['battery'],
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     self.expected_power['component_utilization']['battery'])
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Test frequency values.
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertDictEqual(
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        comp_util['whole_package']['frequency_percent'],
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.expected_cpu['whole_package']['frequency_percent'])
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertDictEqual(
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        comp_util['cpu0']['frequency_percent'],
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.expected_cpu['cpu0']['frequency_percent'])
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertDictEqual(
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        comp_util['cpu1']['frequency_percent'],
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.expected_cpu['cpu1']['frequency_percent'])
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Test c-state residency values.
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertDictEqual(
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        comp_util['whole_package']['cstate_residency_percent'],
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.expected_cpu['whole_package']['cstate_residency_percent'])
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertDictEqual(
2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        comp_util['cpu0']['cstate_residency_percent'],
2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.expected_cpu['cpu0']['cstate_residency_percent'])
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertDictEqual(
2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        comp_util['cpu1']['cstate_residency_percent'],
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.expected_cpu['cpu1']['cstate_residency_percent'])
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  def testCanMonitorPower(self):
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # TODO(tmandel): Add a test here where the device cannot monitor power.
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    initial_status = cros_power_monitor.CrosPowerMonitor.ParsePowerSupplyInfo(
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.initial_power)
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    final_status = cros_power_monitor.CrosPowerMonitor.ParsePowerSupplyInfo(
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self.final_power)
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertTrue(cros_power_monitor.CrosPowerMonitor.IsOnBatteryPower(
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        initial_status, 'peppy'))
246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    self.assertTrue(cros_power_monitor.CrosPowerMonitor.IsOnBatteryPower(
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        final_status, 'butterfly'))
248