1 # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import logging 6 7 from autotest_lib.client.common_lib import utils 8 from autotest_lib.server.cros.faft.firmware_test import FirmwareTest 9 10 11 class firmware_ConsecutiveBootPowerButton(FirmwareTest): 12 """ 13 Servo based consecutive boot test via power button for both on and off. 14 15 This test is intended to be run with many iterations to ensure that the DUT 16 does boot into Chrome OS and then does power off later. 17 18 The iteration should be specified by the parameter -a "faft_iterations=10". 19 """ 20 version = 1 21 22 23 def initialize(self, host, cmdline_args, dev_mode=False): 24 # Parse arguments from command line 25 dict_args = utils.args_to_dict(cmdline_args) 26 self.faft_iterations = int(dict_args.get('faft_iterations', 1)) 27 super(firmware_ConsecutiveBootPowerButton, 28 self).initialize(host, cmdline_args) 29 self.switcher.setup_mode('dev' if dev_mode else 'normal') 30 self.setup_usbkey(usbkey=False) 31 32 33 def run_once(self, dev_mode=False): 34 for i in xrange(self.faft_iterations): 35 logging.info('======== Running FAFT ITERATION %d/%s ========', 36 i+1, self.faft_iterations) 37 logging.info("Expected boot fine, full power off DUT and on.") 38 self.check_state((self.checkers.crossystem_checker, { 39 'mainfw_type': 'developer' if dev_mode else 'normal', 40 })) 41 self.full_power_off_and_on() 42 self.switcher.wait_for_client() 43 44 logging.info("Expected boot fine.") 45 self.check_state((self.checkers.crossystem_checker, { 46 'mainfw_type': 'developer' if dev_mode else 'normal', 47 })) 48