# Copyright 2019 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 = "mruthven"
NAME = "firmware_Cr50TpmManufactured"
PURPOSE = "Check if the TPM is manufactured."
ATTRIBUTES = "suite:faft_cr50_prepvt, suite:faft_cr50_pvt"
TIME = "SHORT"
TEST_TYPE = "server"
DEPENDENCIES = "servo_state:WORKING"

DOC = """Check if the TPM is manufactured.

Cr50 will manufacture the TPM if the manufacturing space is ok. If we reset the
TPM and it isn't manufactured, then it's likely the manufacturing space is
corrupted. Corrupted manufacturing space can cause all sorts of weird issues.
This test can be used to find bad boards and possibly find issues with Cr50
images. Most of the time this issue is caused by bad DBG images, so it can
highlight those issues, but the test is mainly to make sure there aren't broken
boards in the lab.
"""

if 'args_dict' not in locals():
    args_dict = {}

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

def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)

    iterations = int(args_dict.get("iterations", 1))

    job.run_test("firmware_Cr50TpmManufactured", host=host, cmdline_args=args,
                 full_args=args_dict, iterations=iterations)

parallel_simple(run, machines)
