15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import logging
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport time
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import unittest
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from telemetry.core import platform as platform_module
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PlatformBackendTest(unittest.TestCase):
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def testPowerMonitoringSync(self):
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # Tests that the act of monitoring power doesn't blow up.
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    platform = platform_module.GetHostPlatform()
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    can_monitor_power = platform.CanMonitorPower()
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertIsInstance(can_monitor_power, bool)
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if not can_monitor_power:
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      logging.warning('Test not supported on this platform.')
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    browser_mock = lambda: None
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    # Android needs to access the package of the monitored app.
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if platform.GetOSName() == 'android':
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      # pylint: disable=W0212
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      browser_mock._browser_backend = lambda: None
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      # Monitor the launcher, which is always present.
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      browser_mock._browser_backend.package = 'com.android.launcher'
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    platform.StartMonitoringPower(browser_mock)
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    time.sleep(0.001)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    output = platform.StopMonitoringPower()
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertTrue(output.has_key('energy_consumption_mwh'))
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self.assertTrue(output.has_key('identifier'))
35