# Copyright 2017 The ChromiumOS Authors
# 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 = "ChromeOS Team"
NAME = "firmware_CorruptRecoveryCache"
METADATA = {
    "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "Servo based RECOVERY_MRC_CACHE corruption test",
    "requirements": ["sys-fw-0021-v01", "sys-fw-0024-v01"],
}
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_lv3"
DEPENDENCIES = "servo_state:WORKING, servo_usb_state:NORMAL"
TIME = "SHORT"
TEST_TYPE = "server"
JOB_RETRIES = 0

DOC = """
This test corrupts RECOVERY_MRC_CACHE and makes sure the DUT recreates the
cache and boots into recovery. This only applies to intel chips.

The expected behavior is that if the RECOVERY_MRC_CACHE is corrupted then
it will be recreated and still boot into recovery mode.
"""

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


def run_corruptrecoverycache(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test(
        "firmware_CorruptRecoveryCache",
        host=host,
        cmdline_args=args,
        disable_sysinfo=True,
        dev_mode=False,
    )


parallel_simple(run_corruptrecoverycache, machines)
