# Copyright (c) 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.

AUTHOR = "Chrome OS Team"
NAME = "firmware_FWupdateWP"
DEPENDENCIES = "servo_state:WORKING"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 0
PY_VERSION = 3

DOC = """
RO+RW firmware update using chromeos-firmwareupdate --mode=recovery

Example for servo V3:
test_that --board=BOARD --args 'servo_host=SERVO3_IP' DUT_IP firmware_FWupdateWP

Remove servo_host param for V2 servo.
Default mode is recovery, add mode=factory to use factory mode.

Note that the test modifies FWIDs, then restores them. If the test dies in a way
that doesn't run cleanup, then they will be left modified.
In that case, you may want to reflash the firmware to undo the changes.

"""

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_firmwareupdate(machine):
    # Setup the client machine.
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('firmware_FWupdateWP', host=host, cmdline_args=args)

parallel_simple(run_firmwareupdate, machines)
