site_suite.py revision 9512241978928631e38d59b5aca6467172fd404b
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') 6118c70b3d929b759ea9ba4e876517c6b8fd4d6921Chris Sosa self.parser.add_option('-n', '--num', type=int, 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') 669512241978928631e38d59b5aca6467172fd404bDan Shi self.parser.add_option('-w', '--wait_for_results', 679512241978928631e38d59b5aca6467172fd404bDan Shi default=True, 689512241978928631e38d59b5aca6467172fd404bDan Shi help=('Set to False for suite job to exit ' 699512241978928631e38d59b5aca6467172fd404bDan Shi 'without waiting for test jobs to finish. ' 709512241978928631e38d59b5aca6467172fd404bDan Shi 'Default is True.'), 719512241978928631e38d59b5aca6467172fd404bDan Shi metavar='WAIT_FOR_RESULTS') 72859fdecd96355279570007849d8bc46ff71874d7Chris Masone 73859fdecd96355279570007849d8bc46ff71874d7Chris Masone 74859fdecd96355279570007849d8bc46ff71874d7Chris Masone def parse(self): 75859fdecd96355279570007849d8bc46ff71874d7Chris Masone board_info = topic_common.item_parse_info(attribute_name='board', 76859fdecd96355279570007849d8bc46ff71874d7Chris Masone inline_option='board') 77859fdecd96355279570007849d8bc46ff71874d7Chris Masone build_info = topic_common.item_parse_info(attribute_name='build', 78859fdecd96355279570007849d8bc46ff71874d7Chris Masone inline_option='build') 7962579122694934d942a4844a615bc034bc2e8aa1Chris Masone pool_info = topic_common.item_parse_info(attribute_name='pool', 8062579122694934d942a4844a615bc034bc2e8aa1Chris Masone inline_option='pool') 8146d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone num_info = topic_common.item_parse_info(attribute_name='num', 8246d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone inline_option='num') 8362579122694934d942a4844a615bc034bc2e8aa1Chris Masone check_info = topic_common.item_parse_info(attribute_name='check_hosts', 8462579122694934d942a4844a615bc034bc2e8aa1Chris Masone inline_option='check_hosts') 85f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller bugs_info = topic_common.item_parse_info(attribute_name='file_bugs', 86f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller inline_option='file_bugs') 87859fdecd96355279570007849d8bc46ff71874d7Chris Masone suite_info = topic_common.item_parse_info(attribute_name='name', 88859fdecd96355279570007849d8bc46ff71874d7Chris Masone use_leftover=True) 899512241978928631e38d59b5aca6467172fd404bDan Shi wait_for_results_info = topic_common.item_parse_info( 909512241978928631e38d59b5aca6467172fd404bDan Shi attribute_name='wait_for_results', 919512241978928631e38d59b5aca6467172fd404bDan Shi inline_option='wait_for_results') 92859fdecd96355279570007849d8bc46ff71874d7Chris Masone 9362579122694934d942a4844a615bc034bc2e8aa1Chris Masone options, leftover = site_suite.parse( 9462579122694934d942a4844a615bc034bc2e8aa1Chris Masone self, 9546d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone [suite_info, board_info, build_info, pool_info, num_info, 969512241978928631e38d59b5aca6467172fd404bDan Shi check_info, bugs_info, wait_for_results_info], 9762579122694934d942a4844a615bc034bc2e8aa1Chris Masone req_items='name') 98859fdecd96355279570007849d8bc46ff71874d7Chris Masone self.data = {} 99859fdecd96355279570007849d8bc46ff71874d7Chris Masone name = getattr(self, 'name') 100859fdecd96355279570007849d8bc46ff71874d7Chris Masone if len(name) > 1: 101859fdecd96355279570007849d8bc46ff71874d7Chris Masone self.invalid_syntax('Too many arguments specified, only expected ' 102859fdecd96355279570007849d8bc46ff71874d7Chris Masone 'to receive suite name: %s' % name) 103859fdecd96355279570007849d8bc46ff71874d7Chris Masone self.data['suite_name'] = name[0] 104fc96a684c0b0827671e1e8c5dacb519fedb628c5Chris Masone self.data['pool'] = options.pool # None is OK. 10546d0eb11086d97db0178aa3cf316c8eb6d23c88dChris Masone self.data['num'] = options.num # None is OK. 10662579122694934d942a4844a615bc034bc2e8aa1Chris Masone self.data['check_hosts'] = options.check_hosts 107f43d0eb812e32df81accf388f3aa73b051b35d47Alex Miller self.data['file_bugs'] = options.file_bugs 1089512241978928631e38d59b5aca6467172fd404bDan Shi self.data['wait_for_results'] = options.wait_for_results 109859fdecd96355279570007849d8bc46ff71874d7Chris Masone if options.board: 110859fdecd96355279570007849d8bc46ff71874d7Chris Masone self.data['board'] = options.board 111859fdecd96355279570007849d8bc46ff71874d7Chris Masone else: 112859fdecd96355279570007849d8bc46ff71874d7Chris Masone self.invalid_syntax('--board is required.') 113859fdecd96355279570007849d8bc46ff71874d7Chris Masone if options.build: 114859fdecd96355279570007849d8bc46ff71874d7Chris Masone self.data['build'] = options.build 115859fdecd96355279570007849d8bc46ff71874d7Chris Masone else: 116859fdecd96355279570007849d8bc46ff71874d7Chris Masone self.invalid_syntax('--build is required.') 117859fdecd96355279570007849d8bc46ff71874d7Chris Masone 118859fdecd96355279570007849d8bc46ff71874d7Chris Masone return options, leftover 119859fdecd96355279570007849d8bc46ff71874d7Chris Masone 120859fdecd96355279570007849d8bc46ff71874d7Chris Masone 121859fdecd96355279570007849d8bc46ff71874d7Chris Masone def execute(self): 122859fdecd96355279570007849d8bc46ff71874d7Chris Masone return [self.execute_rpc(op='create_suite_job', **self.data)] 123