# 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_DevScreenTimeout"
PURPOSE = "Servo based developer firmware screen timeout test"
CRITERIA = "This test will fail if the timeout period does not match our spec."
ATTRIBUTES = "suite:faft, suite:faft_bios, suite:faft_bios_au_1, suite:faft_bios_au_2, suite:faft_bios_au_3, suite:faft_dev, suite:faft_lv4, suite:faft_bios_ec3po, suite:faft_bios_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 4

DOC = """
When booting in developer mode, the firmware shows a screen to warn user
the disk image is not secured. If a user press Ctrl-D or a timeout reaches,
it will boot to developer mode. This test is to verify the timeout period.

This test tries to boot the system in developer mode twice.
The first one will repeatly press Ctrl-D on booting in order to reduce
the time on developer warning screen. The second one will do nothing and
wait the developer screen timeout. The time difference of these two boots
is close to the developer screen timeout.
"""

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

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

parallel_simple(run_devscreentimeout, machines)
