# Copyright 2012 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# TODO(b/325642411): When PVS is done with this test, delete this file.

from autotest_lib.server import utils

AUTHOR = "ChromeOS Team"
NAME = "firmware_DevScreenTimeout"
METADATA = {
    "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "Servo based developer firmware screen timeout test",
}
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_TYPE = "server"
JOB_RETRIES = 0

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,
    )


parallel_simple(run_devscreentimeout, machines)
