blob: 40a1794fcb27e1f4c90f90bf2a427b14912b9924 [file] [log] [blame]
# Copyright 2021 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import os
import sys
import tempfile
import shutil
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib import utils
from autotest_lib.server import test
from autotest_lib.server.cros import chrome_sideloader
class chromium(test.test):
"""Run Chromium tests built on a Skylab DUT."""
version = 1
def initialize(self, host=None, args=None):
self.host = host
args_dict = utils.args_to_dict(args)
self.exe_rel_path = args_dict.get('exe_rel_path', '')
self.server_pkg = tempfile.mkdtemp()
self.executable = os.path.join(self.server_pkg, self.exe_rel_path)
self.test_args = chrome_sideloader.get_test_args(
args_dict, 'test_args')
with tempfile.TemporaryDirectory() as tmp_archive_dir:
archive_file_path = chrome_sideloader.download_gs(
args_dict.get('lacros_gcs_path'), tmp_archive_dir)
chrome_sideloader.unsquashfs(archive_file_path, self.server_pkg,
**args_dict)
cmd = ['chmod', '-R', '755', self.server_pkg]
try:
utils.run(cmd, stdout_tee=sys.stdout, stderr_tee=sys.stderr)
except error.CmdError as e:
raise Exception('Error changing file permissions', e)
self.shard_number = args_dict.get('shard_number', 1)
self.shard_index = args_dict.get('shard_index', 0)
self.max_run_sec = int(args_dict.get('max_run_sec', 3600))
def cleanup(self):
shutil.rmtree(self.server_pkg)
def run_once(self):
cmd = [
'vpython3',
'-vpython-spec',
f'{self.server_pkg}/.vpython3',
self.executable,
'--test-launcher-summary-output',
f'{self.resultsdir}/output.json',
'--test-launcher-shard-index',
f'{self.shard_index}',
'--test-launcher-total-shards',
f'{self.shard_number}',
'--board',
self.host.host_info_store.get().board,
'--path-to-outdir',
f'{self.server_pkg}/out/Release',
]
if self.host.port:
cmd.extend(['--device', f'{self.host.hostname}:{self.host.port}'])
else:
cmd.extend(['--device', self.host.hostname])
cmd_str = (' ').join(cmd)
# Test args from chromium builders are unknown to the autotest wrapper,
# so just append whatever received here to the command string.
if self.test_args:
cmd_str += ' ' + self.test_args
logging.info('Running: %s', cmd_str)
exit_code = 0
try:
result = utils.run(
cmd_str,
stdout_tee=sys.stdout,
stderr_tee=sys.stderr,
timeout=self.max_run_sec,
extra_paths=['/opt/infra-tools', '/opt/browser-tools'])
exit_code = result.exit_status
except error.CmdError as e:
logging.debug('Error occurred executing gtest tests.')
exit_code = e.result_obj.exit_status
if exit_code:
raise error.TestFail(
f'Chromium Test failed to run. Exit code: {exit_code}')