site_suite.py revision f43d0eb812e32df81accf388f3aa73b051b35d47
1859fdecd96355279570007849d8bc46ff71874d7Chris Masone# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2859fdecd96355279570007849d8bc46ff71874d7Chris Masone# Use of this source code is governed by a BSD-style license that can be
3859fdecd96355279570007849d8bc46ff71874d7Chris Masone# found in the LICENSE file.
4859fdecd96355279570007849d8bc46ff71874d7Chris Masone
5859fdecd96355279570007849d8bc46ff71874d7Chris Masone"""
6859fdecd96355279570007849d8bc46ff71874d7Chris MasoneThe job module contains the objects and methods used to
7859fdecd96355279570007849d8bc46ff71874d7Chris Masonemanage jobs in Autotest.
8859fdecd96355279570007849d8bc46ff71874d7Chris Masone
9859fdecd96355279570007849d8bc46ff71874d7Chris MasoneThe valid actions are:
10859fdecd96355279570007849d8bc46ff71874d7Chris Masonelist:    lists job(s)
11859fdecd96355279570007849d8bc46ff71874d7Chris Masonecreate:  create a job
12859fdecd96355279570007849d8bc46ff71874d7Chris Masoneabort:   abort job(s)
13859fdecd96355279570007849d8bc46ff71874d7Chris Masonestat:    detailed listing of job(s)
14859fdecd96355279570007849d8bc46ff71874d7Chris Masone
15859fdecd96355279570007849d8bc46ff71874d7Chris MasoneThe common options are:
16859fdecd96355279570007849d8bc46ff71874d7Chris Masone
17859fdecd96355279570007849d8bc46ff71874d7Chris MasoneSee topic_common.py for a High Level Design and Algorithm.
18859fdecd96355279570007849d8bc46ff71874d7Chris Masone"""
19859fdecd96355279570007849d8bc46ff71874d7Chris Masone
20859fdecd96355279570007849d8bc46ff71874d7Chris Masonefrom autotest_lib.cli import topic_common, action_common
21859fdecd96355279570007849d8bc46ff71874d7Chris Masone
22859fdecd96355279570007849d8bc46ff71874d7Chris Masone
23859fdecd96355279570007849d8bc46ff71874d7Chris Masoneclass site_suite(topic_common.atest):
24859fdecd96355279570007849d8bc46ff71874d7Chris Masone    """Suite class
25859fdecd96355279570007849d8bc46ff71874d7Chris Masone    atest suite [create] [options]"""
26859fdecd96355279570007849d8bc46ff71874d7Chris Masone    usage_action = '[create]'
27859fdecd96355279570007849d8bc46ff71874d7Chris Masone    topic = msg_topic = 'suite'
28859fdecd96355279570007849d8bc46ff71874d7Chris Masone    msg_items = ''
29859fdecd96355279570007849d8bc46ff71874d7Chris Masone
30859fdecd96355279570007849d8bc46ff71874d7Chris Masone
31859fdecd96355279570007849d8bc46ff71874d7Chris Masoneclass site_suite_help(site_suite):
32859fdecd96355279570007849d8bc46ff71874d7Chris Masone    """Just here to get the atest logic working.
33859fdecd96355279570007849d8bc46ff71874d7Chris Masone    Usage is set by its parent"""
34859fdecd96355279570007849d8bc46ff71874d7Chris Masone    pass
35859fdecd96355279570007849d8bc46ff71874d7Chris Masone
36859fdecd96355279570007849d8bc46ff71874d7Chris Masone
37859fdecd96355279570007849d8bc46ff71874d7Chris Masoneclass site_suite_create(action_common.atest_create, site_suite):
38859fdecd96355279570007849d8bc46ff71874d7Chris Masone    """Class containing the code for creating a suite."""
39859fdecd96355279570007849d8bc46ff71874d7Chris Masone    msg_items = 'suite_id'
40859fdecd96355279570007849d8bc46ff71874d7Chris Masone
41859fdecd96355279570007849d8bc46ff71874d7Chris Masone    def __init__(self):
42859fdecd96355279570007849d8bc46ff71874d7Chris Masone        super(site_suite_create, self).__init__()
43859fdecd96355279570007849d8bc46ff71874d7Chris Masone
44859fdecd96355279570007849d8bc46ff71874d7Chris Masone        self.parser.add_option('-b', '--board', help='Board to test. Required.',
45859fdecd96355279570007849d8bc46ff71874d7Chris Masone                               metavar='BOARD')
46859fdecd96355279570007849d8bc46ff71874d7Chris Masone        self.parser.add_option('-i', '--build',
47859fdecd96355279570007849d8bc46ff71874d7Chris Masone                               help='OS image to install before running the '
48859fdecd96355279570007849d8bc46ff71874d7Chris Masone                                    'test, e.g. '
49859fdecd96355279570007849d8bc46ff71874d7Chris Masone                                    'x86-alex-release/R17-1412.144.0-a1-b115.'
50859fdecd96355279570007849d8bc46ff71874d7Chris Masone                                    ' Required.',
51859fdecd96355279570007849d8bc46ff71874d7Chris Masone                               metavar='BUILD')
5262579122694934d942a4844a615bc034bc2e8aa1Chris Masone        self.parser.add_option('-c', '--check_hosts',
5362579122694934d942a4844a615bc034bc2e8aa1Chris Masone                               default=False,
5462579122694934d942a4844a615bc034bc2e8aa1Chris Masone                               help='Check that enough live hosts exist to '\
5562579122694934d942a4844a615bc034bc2e8aa1Chris Masone                                    'run this suite. Default False.',
5662579122694934d942a4844a615bc034bc2e8aa1Chris Masone                               action='store_true',
5762579122694934d942a4844a615bc034bc2e8aa1Chris Masone                               metavar='CHECK_HOSTS')
58f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller        self.parser.add_option('-f', '--file_bugs', default=False,
59f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller                               help='File bugs on test failures.',
60f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller                               action='store_true', metavar='FILE_BUGS')
6146d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone        self.parser.add_option('-n', '--num',
6246d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone                               help='Number of machines to schedule across.',
6346d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone                               metavar='NUM')
64fc96a684c0b0827671e1e8c5dacb519fedb628c5Chris Masone        self.parser.add_option('-p', '--pool', help='Pool of machines to use.',
65fc96a684c0b0827671e1e8c5dacb519fedb628c5Chris Masone                               metavar='POOL')
66859fdecd96355279570007849d8bc46ff71874d7Chris Masone
67859fdecd96355279570007849d8bc46ff71874d7Chris Masone
68859fdecd96355279570007849d8bc46ff71874d7Chris Masone    def parse(self):
69859fdecd96355279570007849d8bc46ff71874d7Chris Masone        board_info = topic_common.item_parse_info(attribute_name='board',
70859fdecd96355279570007849d8bc46ff71874d7Chris Masone                                                  inline_option='board')
71859fdecd96355279570007849d8bc46ff71874d7Chris Masone        build_info = topic_common.item_parse_info(attribute_name='build',
72859fdecd96355279570007849d8bc46ff71874d7Chris Masone                                                  inline_option='build')
7362579122694934d942a4844a615bc034bc2e8aa1Chris Masone        pool_info = topic_common.item_parse_info(attribute_name='pool',
7462579122694934d942a4844a615bc034bc2e8aa1Chris Masone                                                 inline_option='pool')
7546d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone        num_info = topic_common.item_parse_info(attribute_name='num',
7646d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone                                                inline_option='num')
7762579122694934d942a4844a615bc034bc2e8aa1Chris Masone        check_info = topic_common.item_parse_info(attribute_name='check_hosts',
7862579122694934d942a4844a615bc034bc2e8aa1Chris Masone                                                  inline_option='check_hosts')
79f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller        bugs_info = topic_common.item_parse_info(attribute_name='file_bugs',
80f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller                                                 inline_option='file_bugs')
81859fdecd96355279570007849d8bc46ff71874d7Chris Masone        suite_info = topic_common.item_parse_info(attribute_name='name',
82859fdecd96355279570007849d8bc46ff71874d7Chris Masone                                                  use_leftover=True)
83859fdecd96355279570007849d8bc46ff71874d7Chris Masone
8462579122694934d942a4844a615bc034bc2e8aa1Chris Masone        options, leftover = site_suite.parse(
8562579122694934d942a4844a615bc034bc2e8aa1Chris Masone            self,
8646d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone            [suite_info, board_info, build_info, pool_info, num_info,
87f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller             check_info, bugs_info],
8862579122694934d942a4844a615bc034bc2e8aa1Chris Masone            req_items='name')
89859fdecd96355279570007849d8bc46ff71874d7Chris Masone        self.data = {}
90859fdecd96355279570007849d8bc46ff71874d7Chris Masone        name = getattr(self, 'name')
91859fdecd96355279570007849d8bc46ff71874d7Chris Masone        if len(name) > 1:
92859fdecd96355279570007849d8bc46ff71874d7Chris Masone            self.invalid_syntax('Too many arguments specified, only expected '
93859fdecd96355279570007849d8bc46ff71874d7Chris Masone                                'to receive suite name: %s' % name)
94859fdecd96355279570007849d8bc46ff71874d7Chris Masone        self.data['suite_name'] = name[0]
95fc96a684c0b0827671e1e8c5dacb519fedb628c5Chris Masone        self.data['pool'] = options.pool  # None is OK.
9646d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone        self.data['num'] = options.num  # None is OK.
9762579122694934d942a4844a615bc034bc2e8aa1Chris Masone        self.data['check_hosts'] = options.check_hosts
98f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller        self.data['file_bugs'] = options.file_bugs
99859fdecd96355279570007849d8bc46ff71874d7Chris Masone        if options.board:
100859fdecd96355279570007849d8bc46ff71874d7Chris Masone            self.data['board'] = options.board
101859fdecd96355279570007849d8bc46ff71874d7Chris Masone        else:
102859fdecd96355279570007849d8bc46ff71874d7Chris Masone            self.invalid_syntax('--board is required.')
103859fdecd96355279570007849d8bc46ff71874d7Chris Masone        if options.build:
104859fdecd96355279570007849d8bc46ff71874d7Chris Masone            self.data['build'] = options.build
105859fdecd96355279570007849d8bc46ff71874d7Chris Masone        else:
106859fdecd96355279570007849d8bc46ff71874d7Chris Masone            self.invalid_syntax('--build is required.')
107859fdecd96355279570007849d8bc46ff71874d7Chris Masone
108859fdecd96355279570007849d8bc46ff71874d7Chris Masone        return options, leftover
109859fdecd96355279570007849d8bc46ff71874d7Chris Masone
110859fdecd96355279570007849d8bc46ff71874d7Chris Masone
111859fdecd96355279570007849d8bc46ff71874d7Chris Masone    def execute(self):
112859fdecd96355279570007849d8bc46ff71874d7Chris Masone        return [self.execute_rpc(op='create_suite_job', **self.data)]
113