# 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_FwScreenCloseLid"
PURPOSE = "Servo based lid close triggered shutdown during firmware screens."
CRITERIA = "This test will fail if DUT doesn't shutdown"
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_dev, suite:faft_lv4, suite:faft_bios_ec3po, suite:faft_bios_tot"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 4

DOC = """
This test requires a USB disk plugged-in, which contains a Chrome OS test
image (built by "build_image --test"). On runtime, this test triggers
firmware screens (developer, remove, insert, yuck, to_norm screens),
and then closes the lid in order to power the machine down.
"""

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

def run_fwscreencloselid(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_FwScreenCloseLid", host=host, cmdline_args=args,
                 disable_sysinfo=True, dev_mode=True, tag="dev")

parallel_simple(run_fwscreencloselid, machines)
