# Copyright (c) 2013 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_SelfSignedBoot"
PURPOSE = "Servo based developer mode boot only test to Self signed Kernels."
CRITERIA = """
Prerequirement is as follow:
1. This test should run in Dev mode.
2. Enable dev_boot_usb and dev_boot_signed_only.
3. A USB disk should be plugged-in, which contains a Chrome OS Test Image.

This test will fail if one of the following conditions is met:
1. Ctrl-U boots to USB image with recovery keys.
2. Enabling rec mode, if it doesnt boot to USB image.
3. Ctrl-U doesnt boot to USB image after it resigned with SSD keys.
"""
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_au_1, suite:faft_bios_au_2, suite:faft_bios_au_3, 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, which contains a Chrome OS test
image (built by "build_image test"). On runtime, this test first switches
DUT to developer mode. When dev_boot_signed_only=1 and dev_boot_usb=1 and,
pressing Ctrl-U on developer screen should not boot the USB disk. On resigning
usb image with SSD keys When dev_boot_signed_only=1, pressing Ctrl-U should
boot the USB disk. More details: Refer to chrome-os-partner issue 5954(#37).
"""

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

def run_devbootsignedonly(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('firmware_SelfSignedBoot', host=host, cmdline_args=args,
                 disable_sysinfo=True, dev_mode=True, tag='dev')

parallel_simple(run_devbootsignedonly, machines)
