# 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"
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)
