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