# Copyright 2019 The ChromiumOS Authors
# 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 = "seancarpenter, waihong"
NAME = "firmware_FAFTRPC.tpm"
METADATA = {
    "contacts": [
        "chromeos-faft@google.com",
        "seancarpenter@google.com",
        "waihong@chromium.org",
    ],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "Verify that the RPC system, and all TPM RPCs, work as expected",
}
ATTRIBUTES = "suite:faft_smoke"
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_TYPE = "server"

DOC = """
This test checks that all RPC functions on the TPM subsystem are connected,
and that they roughly work as expected.

"""

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


def run_faftrpc(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test(
        "firmware_FAFTRPC",
        host=host,
        cmdline_args=args,
        disable_sysinfo=True,
        category_under_test="tpm",
        tag="tpm",
    )


parallel_simple(run_faftrpc, machines)
