# 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_tot"
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 0
PY_VERSION = 3

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)
