• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Control file generation for the autoupdate_EndToEnd server-side test."""
6
7import os
8import re
9
10import common
11from autotest_lib.client.common_lib import control_data
12
13
14_name_re = re.compile('\s*NAME\s*=')
15_autotest_test_name = 'autoupdate_EndToEndTest'
16
17
18def generate_full_control_file(test, env, orig_control_code):
19    """Returns the parameterized control file for the test config.
20
21    @param test: the test config object (TestConfig)
22    @param env: the test environment parameters (TestEnv or None)
23    @param orig_control_code: string containing the template control code
24
25    @returns Parameterized control file based on args (string)
26
27    """
28    orig_name = control_data.parse_control_string(orig_control_code).name
29    code_lines = orig_control_code.splitlines()
30    for i, line in enumerate(code_lines):
31        if _name_re.match(line):
32            new_name = '%s_%s' % (orig_name, test.unique_name_suffix())
33            code_lines[i] = line.replace(orig_name, new_name)
34            break
35
36    env_code_args = env.get_code_args() if env else ''
37    return test.get_code_args() + env_code_args + '\n'.join(code_lines) + '\n'
38
39
40def dump_autotest_control_file(test, env, control_code, directory):
41    """Creates control file for test and returns the path to created file.
42
43    @param test: the test config object (TestConfig)
44    @param env: the test environment parameters (TestEnv)
45    @param control_code: string containing the template control code
46    @param directory: the directory to dump the control file to
47
48    @returns Path to the newly dumped control file
49
50    """
51    if not os.path.exists(directory):
52        os.makedirs(directory)
53
54    parametrized_control_code = generate_full_control_file(
55            test, env, control_code)
56
57    control_file = os.path.join(directory,
58                                test.get_control_file_name())
59    with open(control_file, 'w') as fh:
60        fh.write(parametrized_control_code)
61
62    return control_file
63
64
65def get_test_name():
66  """Returns the name of the server side test."""
67  return _autotest_test_name
68
69
70def get_control_file_name():
71  """Returns the path of the end-to-end base control file."""
72  return os.path.join(
73      common.autotest_dir, 'server', 'site_tests',
74      get_test_name(), 'control')
75