blob: 5e94ce00a71014ef82ef88458622fcc4ddc2de1c [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import print_function
import os
import subprocess
import sys
from telemetry.core import util
def ProcessConfig(project_config, args=None):
args = args or []
assert '--top-level-dir' not in args, (
'Top level directory for running tests should be specified through '
'the instance of telemetry.project_config.ProjectConfig.')
assert '--client-config' not in args, (
'Client config file to be used for telemetry should be specified through '
'the instance of telemetry.project_config.ProjectConfig.')
assert project_config.top_level_dir, 'Must specify top level dir for project'
args.extend(['--top-level-dir', project_config.top_level_dir])
for c in project_config.client_configs:
args.extend(['--client-config', c])
for s in project_config.start_dirs:
args.extend(['--start-dir', s])
for e in project_config.expectations_files:
args.extend(['--expectations-file', e])
if project_config.default_chrome_root and not '--chrome-root' in args:
args.extend(['--chrome-root', project_config.default_chrome_root])
return args
def Run(project_config, args):
args = ProcessConfig(project_config, args)
env = os.environ.copy()
telemetry_dir = util.GetTelemetryDir()
if 'PYTHONPATH' in env:
env['PYTHONPATH'] = os.pathsep.join([env['PYTHONPATH'], telemetry_dir])
else:
env['PYTHONPATH'] = telemetry_dir
path_to_run_tests = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'run_browser_tests.py')
exit_code = subprocess.call([sys.executable, path_to_run_tests] + args,
env=env)
if exit_code:
print('**Non zero exit code**')
print('If you don\'t see any error stack, this could have been a '
'native crash. Consider installing faulthandler '
'(https://faulthandler.readthedocs.io/) for more useful error '
'message')
return exit_code