# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from autotest_lib.server import utils

AUTHOR = "Chrome OS Team"
NAME = "firmware_ConsecutiveBoot.500"
PURPOSE = "Servo based consecutive boot test (500 iterations)"
CRITERIA = "This test will fail if DUT fails to boot from power-off"
ATTRIBUTES = "suite:faft_stress"
TIME = "SHORT"
TEST_CATEGORY = "Stress"
TEST_CLASS = "firmware"
TEST_TYPE = "server"

DOC = """
This test is intended to be run with many iterations to ensure that the DUT
does boot into Chrome OS and then does power off later.

Runs 500 iterations.
"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

args.append('faft_iterations=500')
args.append('faft_waitup_time=60')
args.append('faft_localrun=1')

def run_consecutive_boot(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_ConsecutiveBoot", host=host, cmdline_args=args,
                 disable_sysinfo=True, dev_mode=False, tag="normal")

parallel_simple(run_consecutive_boot, machines)
