# Copyright 2020 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 = "philipchen"
NAME = "firmware_WriteProtectFunc"
PURPOSE = "Servo based SPI flash write protect functional test"
CRITERIA = "This test will fail if SPI flash write-protection does not work correctly"
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_normal, suite:faft_lv2, suite:faft_bios_ec3po, suite:faft_bios_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 1

DOC = """
This test verifies the function of SPI flash write-protection.
After we enable hardware write-protection and then software write-protection,
SPI flash RO section is protected and can't be overwritten. After we disable
hardware write-protection and then software write-protection, SPI flash RO
section is not protected and can be overwritten.
"""

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

def run_writeprotectfunc(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_WriteProtectFunc", host=host, cmdline_args=args,
                 dev_mode=False, tag="normal")

parallel_simple(run_writeprotectfunc, machines)
