| # Copyright (c) 2020 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. |
| |
| import json |
| import logging |
| import os |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.server import autotest |
| from autotest_lib.server import test |
| from autotest_lib.server.cros.crosperf import device_setup_utils |
| |
| WAIT_TIME_LOG = 'wait_time.log' |
| |
| class crosperf_Wrapper(test.test): |
| """ |
| Client test wrapper for crosperf. |
| |
| This is a class to run client tests under the crosperf script. |
| |
| """ |
| version = 1 |
| |
| def run_once(self, test_name, test_args, dut_config_str, dut=None): |
| """ |
| Run a single telemetry test. |
| |
| @param test_name: Name of the client test. |
| @param test_args: Arguments need to be passed to test. |
| @param dut_config_str: A string dumped from json representing DUT |
| configurations. |
| @param dut: The autotest host object representing DUT. |
| |
| @returns A result of this execution. |
| |
| """ |
| if not test_name: |
| raise RuntimeError('Missing client test name to run.') |
| |
| if dut_config_str: |
| dut_config = json.loads(dut_config_str) |
| # Setup device with dut_config arguments before running test. |
| wait_time = device_setup_utils.setup_device(dut, dut_config) |
| # Wait time can be used to accumulate cooldown time in Crosperf. |
| with open(os.path.join(self.resultsdir, WAIT_TIME_LOG), 'w') as f: |
| f.write(str(wait_time)) |
| |
| try: |
| # Execute the client side test. |
| client_at = autotest.Autotest(dut) |
| result = client_at.run_test(test_name, args=test_args) |
| except (error.TestFail, error.TestWarn): |
| logging.debug('Test did not succeed while executing client test.') |
| raise |
| except: |
| logging.debug('Unexpected failure on client test %s.', test_name) |
| raise |
| |
| return result |