# Copyright 2021 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/343553247): Remove from PVS testplans and remove this file.

from autotest_lib.server import utils

AUTHOR = "ChromeOS Team"
NAME = "firmware_ECWakeFromULP.port0"
METADATA = {
        "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
        "bug_component": "b:792402", # ChromeOS > Platform > Enablement > Firmware > FAFT
        "criteria": "Servo based EC wake from ULP test on USB-C port 0",
}
TIME = "SHORT"
TEST_TYPE = "server"
JOB_RETRIES = 0
DEPENDENCIES = "ec:cros, servo_state:WORKING"

DOC = """
This test check the functionality of EC waking host from suspend. This includes
power button, AC on, and lid open (if supported).
"""

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

def run_ecwakesource(machine):
    host = hosts.create_host(machine, servo_args=servo_args,
                             pdtester_args=pdtester_args)
    job.run_test("firmware_ECWakeFromULP", host=host, cmdline_args=args,
                 disable_sysinfo=True, tag='.'.join(NAME.split('.')[1:]),
                 desired_pd_port_idx=0)

parallel_simple(run_ecwakesource, machines)
