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

from autotest_lib.server import utils

AUTHOR = "ChromeOS Team"
NAME = "firmware_PDVbusRequest.shutdown"
METADATA = {
    "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "Servo based PD VBUS voltage level test",
}
ATTRIBUTES = "suite:faft_pd"
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_TYPE = "server"

DOC = """
This test checks:
  - PD Dual role mode is operational in the DUT.
  - Ability to initiate new PD contract with various VBUS values.
  - Receive Source capabilty messages from PDTester.
  - The DUT does not source power in shutdown mode.
"""

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(machine):
    host = hosts.create_host(
        machine, servo_args=servo_args, pdtester_args=pdtester_args
    )
    job.run_test(
        "firmware_PDVbusRequest",
        host=host,
        cmdline_args=args,
        disable_sysinfo=True,
        flip_cc=False,
        dts_mode=False,
        init_power_mode="shutdown",
        tag="shutdown",
    )


parallel_simple(run, machines)
