# Copyright 2014 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_TPMExtend"
PURPOSE = "Ensure TPM PCRs have been correctly extended with boot mode and HWID"
CRITERIA = "This test will fail if TPM PCR 0 or 1 has an incorrect value"
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_lv2, suite:faft_normal, 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 ensures that the TPM PCRs 0 and 1 have been extended with a hash that
encodes the current boot mode and the HWID, respectively.
"""

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

def run_eventlog(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_TPMExtend", host=host, cmdline_args=args,
                 disable_sysinfo=True, dev_mode=False)

parallel_simple(run_eventlog, machines)
