blob: 8083d22a0e2f2a78cc55a2af7efee232e5eff094 [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
showard1d445e92008-03-12 21:33:31 +000014CLIENT_KERNEL_TEMPLATE = """\
mblighe8819cd2008-02-15 16:48:40 +000015def 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
showard1d445e92008-03-12 21:33:31 +000025SERVER_KERNEL_TEMPLATE = """\
26kernel_install_control = \"""
27%s pass
28\"""
29
30at = autotest.Autotest()
31def install_kernel(machine):
32 host = hosts.SSHHost(machine)
33 at.run(kernel_install_control, host=host)
mbligh6437ff52008-04-17 15:24:38 +000034job.parallel_simple(install_kernel, machines)
showard1d445e92008-03-12 21:33:31 +000035
36""" % CLIENT_KERNEL_TEMPLATE
37
38
mblighe8819cd2008-02-15 16:48:40 +000039def kernel_config_line(kernel, platform):
40 if (not kernel.endswith('.rpm') and platform and
41 platform.kernel_config):
42 return "testkernel.config('%s')" % platform.kernel_config
43 return ''
44
45
46def read_control_file(test):
47 control_file = open(os.path.join(AUTOTEST_DIR, test.path))
48 control_contents = control_file.read()
49 control_file.close()
50 return control_contents
51
52
showard1d445e92008-03-12 21:33:31 +000053def get_kernel_stanza(kernel, platform=None, kernel_args='', is_server=False):
54 if is_server:
55 template = SERVER_KERNEL_TEMPLATE
56 indent = ''
57 else:
58 template = CLIENT_KERNEL_TEMPLATE
59 indent = '\t'
60
61 stanza = template % {
mblighe8819cd2008-02-15 16:48:40 +000062 'kernel' : kernel,
63 'kernel_config_line' : kernel_config_line(kernel, platform),
64 'kernel_args' : kernel_args}
showard1d445e92008-03-12 21:33:31 +000065 return stanza, indent
mblighe8819cd2008-02-15 16:48:40 +000066
67
68def get_tests_stanza(tests):
69 return ''.join(read_control_file(test) for test in tests)
70
71
72def indent_text(text, indent):
73 lines = [indent + line for line in text.splitlines()]
74 return '\n'.join(lines)
75
76
showard1d445e92008-03-12 21:33:31 +000077def generate_control(tests, kernel=None, platform=None, is_server=False):
mblighe8819cd2008-02-15 16:48:40 +000078 control_file = ''
79 indent = ''
80 if kernel:
showard1d445e92008-03-12 21:33:31 +000081 control_file, indent = get_kernel_stanza(kernel, platform,
82 is_server=is_server)
mblighe8819cd2008-02-15 16:48:40 +000083 control_file += indent_text(get_tests_stanza(tests), indent)
84 return control_file