# 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, suite:faft_bios, suite:faft_dev, suite:faft_lv2, suite:faft_bios_ec3po"
SUITE = "faft,faft_bios,faft_dev,faft_lv2,faft_bios_ec3po"
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)
