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


AUTHOR = "chromeos-lab-infrastructure"
NAME = "provision_FirmwareUpdate"
PURPOSE = "Provision a system to the correct firmware version."
TIME = "MEDIUM"
TEST_CATEGORY = "System"
TEST_CLASS = "provision"
TEST_TYPE = "Server"

DOC = """
This is a test used by the provision control segment in autoserv to set the
fwro-version label of a host to the desired setting. This test attempts to
reprogram both EC and AP firmware.
"""


from autotest_lib.client.common_lib import error, utils


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


if not locals().get('value'):
    if not args_dict.get('value'):
        raise error.TestError("No provision value!")
    value = args_dict['value']


if not locals().get('fw_path'):
    fw_path = args_dict.get('fw_path', None)


def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('provision_FirmwareUpdate', host=host, value=value,
                 rw_only=False, disable_sysinfo=True, fw_path=fw_path)


job.parallel_simple(run, machines)
