# Copyright 2023 The ChromiumOS Authors
# 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 = "mruthven"
NAME = "firmware_Cr50DeepSleepStress.reboot.fwmp"
METADATA = {
    "contacts": ["chromeos-faft@google.com", "mruthven@chromium.org"],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "Verify deep sleep",
}
ATTRIBUTES = (
    "suite:faft_gsc_nightly, suite:faft_cr50_pvt, suite:faft_cr50_prepvt"
)
TIME = "LONG"
TEST_TYPE = "server"
DEPENDENCIES = "servo_state:WORKING"

DOC = """
Cr50 should enter deep sleep every time the system goes into S5. Run
power_SuspendStress and verify the deep sleep count matches the number of
suspend iterations.
"""

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


def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)

    reset_type = args_dict.get("reset_type", "reboot")

    job.run_test(
        "firmware_Cr50DeepSleepStress",
        host=host,
        cmdline_args=args,
        suspend_count=3,
        reset_type=reset_type,
        fwmp="0x41",
        tag="reboot.fwmp",
    )


parallel_simple(run, machines)
