# Copyright (c) 2013 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 = "Chrome OS Team"
NAME = "firmware_TPMVersionCheck.dev"
PURPOSE = "Crossystem reports the tpm versions correctly"
CRITERIA = "This test will fail if crossystem reports tpm version incorrectly"
ATTRIBUTES = "suite:faft, suite:faft_bios, suite:faft_bios_au_1, suite:faft_bios_au_2, suite:faft_bios_au_3, 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 test will fail if crossystem does not report correctly.
"""

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

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

parallel_simple(run_tpmcheck, machines)
