# Copyright (c) 2013 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. """Control file generation for the autoupdate_EndToEnd server-side test. This library is used by chromite/lib/paygen/paygen_build_lib.py to generate the paygen_au_* control files during the PaygenBuild* builder phase. """ import os import re import common from autotest_lib.client.common_lib import control_data _name_re = re.compile('\s*NAME\s*=') _autotest_test_name = 'autoupdate_EndToEndTest' def generate_full_control_file(test, env, orig_control_code): """Returns the parameterized control file for the test config. @param test: the test config object (TestConfig) @param env: the test environment parameters (TestEnv or None) @param orig_control_code: string containing the template control code @returns Parameterized control file based on args (string) """ orig_name = control_data.parse_control_string(orig_control_code).name code_lines = orig_control_code.splitlines() for i, line in enumerate(code_lines): if _name_re.match(line): new_name = '%s_%s' % (orig_name, test.unique_name_suffix()) code_lines[i] = line.replace(orig_name, new_name) break env_code_args = env.get_code_args() if env else '' return test.get_code_args() + env_code_args + '\n'.join(code_lines) + '\n' def dump_autotest_control_file(test, env, control_code, directory): """Creates control file for test and returns the path to created file. @param test: the test config object (TestConfig) @param env: the test environment parameters (TestEnv) @param control_code: string containing the template control code @param directory: the directory to dump the control file to @returns Path to the newly dumped control file """ if not os.path.exists(directory): os.makedirs(directory) parametrized_control_code = generate_full_control_file( test, env, control_code) control_file = os.path.join(directory, test.get_control_file_name()) with open(control_file, 'w') as fh: fh.write(parametrized_control_code) return control_file def get_test_name(): """Returns the name of the server side test.""" return _autotest_test_name def get_control_file_name(): """Returns the path of the end-to-end base control file.""" return os.path.join( common.autotest_dir, 'server', 'site_tests', get_test_name(), 'control')