# 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."
SUITE = "faft,faft_bios,faft_normal,faft_lv2"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"

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.SiteHost.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,
                 use_faft=True, disable_sysinfo=True)

parallel_simple(run_faftsetup, machines)
