You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.4 KiB
60 lines
2.4 KiB
# Copyright 2018 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Base class for power measurement tests with telemetry devices."""
|
|
|
|
import os
|
|
|
|
from autotest_lib.server import test
|
|
from autotest_lib.server.cros.power import wrapper_test_runner
|
|
|
|
|
|
class PowerBaseWrapper(test.test):
|
|
"""Base class for a wrapper test around a client test.
|
|
|
|
This wrapper test runs 1 client test given by user, and measures DUT power
|
|
with external power measurement tools.
|
|
"""
|
|
version = 1
|
|
|
|
def run_once(self, host, config):
|
|
"""Measure power while running the client side test.
|
|
|
|
@param host: CrosHost object representing the DUT.
|
|
@param config: the args argument from test_that in a dict.
|
|
required data: {'test': 'test_TestName.tag'}
|
|
"""
|
|
test_runner = wrapper_test_runner.WrapperTestRunner(
|
|
config, self.autodir)
|
|
client_test_name = test_runner.get_tagged_test_name()
|
|
ptl = self._get_power_telemetry_logger(host, config, self.resultsdir)
|
|
try:
|
|
ptl.start_measurement()
|
|
test_runner.run_test(host)
|
|
finally:
|
|
client_test_dir = os.path.join(self.outputdir, client_test_name)
|
|
# If client test name is not tagged in its own control file.
|
|
if not os.path.isdir(client_test_dir):
|
|
client_test_name = client_test_name.split('.', 1)[0]
|
|
client_test_dir = os.path.join(self.outputdir, client_test_name)
|
|
ptl.end_measurement(client_test_dir)
|
|
|
|
return
|
|
|
|
def _get_power_telemetry_logger(self, host, config, resultsdir):
|
|
"""Return the corresponding power telemetry logger.
|
|
|
|
@param host: CrosHost object representing the DUT.
|
|
@param config: the args argument from test_that in a dict. Settings for
|
|
power telemetry devices.
|
|
required data: {'test': 'test_TestName.tag'}
|
|
@param resultsdir: path to directory where current autotest results are
|
|
stored, e.g. /tmp/test_that_results/
|
|
results-1-test_TestName.tag/test_TestName.tag/
|
|
results/
|
|
"""
|
|
raise NotImplementedError('Subclasses must implement '
|
|
'_get_power_telemetry_logger and return the corresponding '
|
|
'power telemetry logger.')
|