| # 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']) |
| |
| execfile(os.path.join(job.autodir, SUITE_CONTROL_FILE), new_globals, locals()) |