# Copyright 2018 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 = "jwerner"
NAME = "firmware_WriteProtect.dev"
PURPOSE = "Servo based hardware write protect test"
CRITERIA = "This test will fail if SPI hardware write-protect cannot be read correctly"
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_dev, suite:faft_lv1, suite:faft_bios_ec3po, suite:faft_bios_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 4

DOC = """
This is a simple test which toggles the hardware write-protect line via Servo
and checks that the correct state is reported by both firmware and kernel.
"""

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

def run_writeprotect(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_WriteProtect", host=host, cmdline_args=args,
                 dev_mode=True, tag="dev")

parallel_simple(run_writeprotect, machines)
