# Copyright 2011 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# TODO(b/343308767): Remove from PVS testplans and remove this file.

from autotest_lib.server import utils

AUTHOR = "ChromeOS Team"
NAME = "firmware_CorruptFwSigB"
METADATA = {
    "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "Servo based firmware signature B corruption test",
}
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_TYPE = "server"
JOB_RETRIES = 0

DOC = """
This test corrupts firmware signature B and checks the next boot results.
"""

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


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


parallel_simple(run_corruptfwsigb, machines)
