# 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 = "FAFT LV4"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "suite"
TEST_TYPE = "server"

DOC = """
This test suite runs FAFT (Fully Automated Firmware Test) for BIOS that should
all pass and that verifies the BIOS fit Chrome OS verified-boot requirements.

All BIOS tests are categorized into 4 test levels:
  Level-1: Basic BIOS tests which verify basic vboot functions.
  Level-2: Recovery BIOS tests which need external USB disk.
  Level-3: Corruption BIOS tests which modify firmware/kernel image.
           These tests may corrupt the system if any failure happens.
  Level-4: Advanced BIOS tests which verify not-so-critical features.

This suite runs all Level-4 tests.
"""

TESTS_ON_NORMAL_MODE = [
    ('firmware_InvalidUSB', {}),
    ('firmware_CgptState', {}),
]

TESTS_ON_DEV_MODE = [
    ('firmware_DevScreenTimeout', {}),
    ('firmware_FwScreenPressPower', {}),
    ('firmware_FwScreenCloseLid', {}),
]

TESTS_ON_BOTH_MODES = [
]


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

def run_server_test(machine):
    client = hosts.create_host(machine, servo_args=servo_args)
    for test, argv in TESTS_ON_BOTH_MODES + TESTS_ON_NORMAL_MODE:
        job.run_test(test, host=client, cmdline_args=args,
                     disable_sysinfo=True, dev_mode=False, tag="normal",
                     **argv)
    for test, argv in TESTS_ON_BOTH_MODES + TESTS_ON_DEV_MODE:
        job.run_test(test, host=client, cmdline_args=args,
                     disable_sysinfo=True, dev_mode=True, tag="dev",
                     **argv)

parallel_simple(run_server_test, machines)
