61 lines
2.4 KiB
Python
61 lines
2.4 KiB
Python
# Copyright (c) 2012 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 ast, os, random
|
|
|
|
from autotest_lib.client.common_lib.cros import dev_server
|
|
from autotest_lib.server import frontend
|
|
from autotest_lib.server.cros.dynamic_suite import constants, tools
|
|
|
|
"""A wrapper around a dynamic suite control file to enable local testing.
|
|
|
|
usage: server/autoserv test_suites/dev_harness.py
|
|
|
|
dev_harness.py pulls in a suite control file from disk and injects all the
|
|
variables that are normally injected by the create_suite_job() RPC, without
|
|
which the suite cannot be successfully executed.
|
|
|
|
This file can be passed directly to autoserv and executed locally,
|
|
allowing for the testing of test suite control file changes without
|
|
staging them in the context of a build. It also means that one can
|
|
test code changes in the dynamic_suite infrastructure without being
|
|
forced to reimage the DUTs every time (by setting SKIP_IMAGE to
|
|
False).
|
|
"""
|
|
|
|
# __file__ is not defined when this is run by autoserv, so hard-code :-/
|
|
CONF_FILE = '/usr/local/autotest/test_suites/dev_harness_conf'
|
|
SUITE_CONTROL_FILE = 'test_suites/control.dummy'
|
|
config_dict = {}
|
|
new_globals = globals()
|
|
if os.path.exists(CONF_FILE):
|
|
with open(CONF_FILE, 'r') as config:
|
|
config_dict.update(ast.literal_eval(config.read()))
|
|
else:
|
|
# Default values. Put a raw dict into CONF_FILE to override.
|
|
config_dict = {'build': 'x86-mario-release/R23-2814.0.0',
|
|
'board': 'x86-mario',
|
|
'check_hosts': True,
|
|
'pool': None,
|
|
'num': 2,
|
|
'file_bugs': False,
|
|
'SKIP_IMAGE': False}
|
|
new_globals.update(config_dict)
|
|
|
|
ds = dev_server.ImageServer.resolve(new_globals['build'])
|
|
if new_globals['SKIP_IMAGE']:
|
|
AFE = frontend.AFE(debug=True)
|
|
|
|
repo_url = tools.package_url_pattern() % (ds.url(), new_globals['build'])
|
|
m = random.choice(AFE.get_hostnames(label='board:'+new_globals['board']))
|
|
|
|
label = AFE.get_labels(
|
|
name=constants.VERSION_PREFIX+new_globals['build'])[0]
|
|
label.add_hosts([m])
|
|
AFE.set_host_attribute(constants.JOB_REPO_URL, repo_url, hostname=m)
|
|
else:
|
|
ds.trigger_download(new_globals['build'])
|
|
new_globals['devserver_url'] = ds.url()
|
|
|
|
execfile(os.path.join(job.autodir, SUITE_CONTROL_FILE), new_globals, locals())
|