blob: 7b2d7bd2a969e2ca988c54c252bac48080ee71df [file] [log] [blame]
mblighe8819cd2008-02-15 16:48:40 +00001"""\
2Logic for control file generation.
3"""
4
5__author__ = 'showard@google.com (Steve Howard)'
6
7import os
8import frontend.settings
9
10AUTOTEST_DIR = os.path.abspath(os.path.join(
11 os.path.dirname(frontend.settings.__file__), '..'))
12
13
14KERNEL_INSTALL_TEMPLATE = """\
15def step_init():
16 job.next_step([step_test])
17 testkernel = job.kernel('%(kernel)s')
18 %(kernel_config_line)s
19 testkernel.install()
20 testkernel.boot(args='%(kernel_args)s')
21
22def step_test():
23"""
24
25def kernel_config_line(kernel, platform):
26 if (not kernel.endswith('.rpm') and platform and
27 platform.kernel_config):
28 return "testkernel.config('%s')" % platform.kernel_config
29 return ''
30
31
32def read_control_file(test):
33 control_file = open(os.path.join(AUTOTEST_DIR, test.path))
34 control_contents = control_file.read()
35 control_file.close()
36 return control_contents
37
38
39def get_kernel_stanza(kernel, platform, kernel_args):
40 return KERNEL_INSTALL_TEMPLATE % {
41 'kernel' : kernel,
42 'kernel_config_line' : kernel_config_line(kernel, platform),
43 'kernel_args' : kernel_args}
44
45
46def get_tests_stanza(tests):
47 return ''.join(read_control_file(test) for test in tests)
48
49
50def indent_text(text, indent):
51 lines = [indent + line for line in text.splitlines()]
52 return '\n'.join(lines)
53
54
55def generate_client_control(tests, kernel=None, platform=None):
56 control_file = ''
57 indent = ''
58 if kernel:
59 control_file = get_kernel_stanza(kernel, platform, '')
60 indent = '\t'
61
62 control_file += indent_text(get_tests_stanza(tests), indent)
63 return control_file
64
65
66def generate_server_control(tests):
67 return get_tests_stanza(tests)