# 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_ECHash"
PURPOSE = "Servo based EC hash recompute test"
CRITERIA = "This test will fail if EC failed to recompute its hash."
ATTRIBUTES = "suite:faft, suite:faft_ec, suite:faft_ec_au_1, suite:faft_ec_au_2, suite:faft_ec_au_3, suite:faft_ec_ryu, suite:faft_ec3po, suite:faft_ec_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
DEPENDENCIES = "ec:cros"
JOB_RETRIES = 4

DOC = """
This test ensures that the AP will ask the EC to recompute the hash if
the current hash isn't the right size/offset. Use 'ectool echash' command
to request the hash of some other part of EC EEPROM, then warm-reboot
the AP and use 'ectool echash' to see what hash the EC has after booting.
AP-RW should have requested the EC recompute the hash of EC-RW.
"""

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

def run_echash(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_ECHash", host=host, cmdline_args=args,
                 disable_sysinfo=True)

parallel_simple(run_echash, machines)
