# Copyright (c) 2020 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_DevDefaultBoot"
PURPOSE = "Ensure that dev_default_boot=usb actually boots usb by default"
CRITERIA = "This test will fail if firmware does not boot USB disk by default"
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_dev, suite:faft_lv2, suite:faft_bios_ec3po, suite:faft_bios_tot"
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 4

DOC = """
This test requires a USB disk plugged in, containing a Chrome OS test image.
On runtime, this test first switches DUT to developer mode, and modifies
the dev_default_boot crossystem value.
After waiting at the dev warning, or pressing enter in the detachable UI dev
options, the device should boot whatever's selected by default.
"""

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

def run_devdefaultboot(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_DevDefaultBoot", host=host, cmdline_args=args,
                 disable_sysinfo=True)

parallel_simple(run_devdefaultboot, machines)
