# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# TODO(b/342928657): Remove from PVS testplans and remove this file.

AUTHOR = "ChromeOS Team"
NAME = "firmware_FWupdateThenSleep.wp"
METADATA = {
    "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "COPY FROM PURPOSE OR CRITERIA",
}
DEPENDENCIES = "servo_state:WORKING"
TIME = "MEDIUM"
TEST_TYPE = "server"

DOC = """
RW firmware update using chromeos-firmwareupdate --mode=recovery --wp=1, then
sleep and wake, then make sure the host responds and the flash contents
don't change.

Example:
test_that --board=BOARD --args 'servo_host=SERVO_IP' DUT_IP firmware_FWupdateThenSleep.wp
"""

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_FWupdateThenSleep",
        host=host,
        cmdline_args=args,
        wp=1,
        tag="wp",
    )


parallel_simple(run_firmwareupdate, machines)
