# Copyright 2017 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.

AUTHOR = "Chrome OS Team"
NAME = "firmware_ChipFwUpdate"
PURPOSE = "TCPC firmware update test."
CRITERIA = "This test will pass if the updated bios.bin booted successfully."
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 0
PY_VERSION = 3

DOC = """
This test replaces chip (i.e. TCPC) firmware on the DUT's bios.bin
and reboots into it.  The expectation is that the TCPC firmware
is updated correctly when the system boots with the updated bios.bin

Software sync applies the TCPC firmware update and verifies that
it has been applied.  If the DUT rebooted successfully, we know
that the test has passed.

For independent verification, the firmware_CompareChipFwToShellBall
FAFT test can be used to verify the running TCPC firmware versions.

For complete testing, this test needs to be invoked to downgrade, then
upgrade the TCPCs so that we have confidence that the update process
really happened.
"""

from autotest_lib.client.common_lib import utils

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

def run_chip_fw_update(machine):
    # Setup the client machine.
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('firmware_ChipFwUpdate',
                 host=host, cmdline_args=args)


parallel_simple(run_chip_fw_update, machines)
