# Copyright (c) 2012 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_FAFTSetup"
PURPOSE = "Servo based diagnose of FAFT hardware setup"
CRITERIA = "This test will fail if FAFT hardware is not set up correctly."
ATTRIBUTES = "suite:faft, suite:faft_bios, suite:faft_lab, suite:faft_lv2, suite:faft_normal, suite:faft_bios_ec3po"
SUITE = "faft,faft_bios,faft_normal,faft_lv2,faft_lab,faft_bios_ec3po"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 4

DOC = """
This test checks the following FAFT hardware requirement:
  - Warm reset
  - Cold reset
  - Recovery boot with USB stick
  - USB stick is plugged into Servo board, not DUT
  - Keyboard simulation

If this test is run with parameter -a "spec_check=True", then hardware
testability is checked according to spec and without any current
workaround.
  - Strict keyboard simulation
  - Recovery mode with dedicated recovery signal
"""

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

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

parallel_simple(run_faftsetup, machines)
